package sql; import java.sql.*; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.UUID; import models.Configuration; import org.apache.log4j.Logger; import server.BinaryListener; import server.Image; import server.Lecture; public class SQL { private static Logger log = Logger.getLogger(BinaryListener.class); public Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { Connection con = DriverManager .getConnection("jdbc:mysql://"+Configuration.config.getSql_connection()+"?user="+Configuration.config.getSql_user()+"&password="+Configuration.config.getSql_pass()+""); con.setAutoCommit(false); return con; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to return connection to Client."); e.printStackTrace(); } return null; } public int writeFTPUser(String user, String pass) { Statement stm; try { Connection con=getConnection(); stm = con.createStatement(); int ret = stm .executeUpdate("INSERT INTO `bwLehrpool`.`FtpUsers`(`User`,`Password`,`Uid`,`Gid`,`Dir`)VALUES('" + user + "',SHA1('" + pass + "'),'10001','12345','"+Configuration.config.getAbsolute_path()+"temp/');"); con.commit(); con.close(); log.info(new Date() + " - created FTPUser " + user + " : " + pass + "."); return ret; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to writeFTPUser."); e.printStackTrace(); } return -1; } public int DeleteUser(String user) { Statement stm; try { Connection con=getConnection(); stm = con.createStatement(); int ret = stm .executeUpdate("DELETE FROM `bwLehrpool`.`FtpUsers` where User like '" + user + "';"); con.commit(); con.close(); log.info(new Date() + " - FTPUser " + user + " deleted."); return ret; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to DeleteUser."); e.printStackTrace(); } return -1; } public ResultSet getImage() { try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet rs=stm .executeQuery("SELECT image_name FROM bwLehrpool.m_VLData_imageInfo;"); con.close(); return rs; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getImage."); e.printStackTrace(); } return null; } public String getPathOfImage(String image_id, String version) { try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet rs=stm .executeQuery("SELECT image_path FROM bwLehrpool.m_VLData_imageInfo where GUID_imageID='" + image_id + "' and imageVersion='" + version + "';"); rs.first(); String path=rs.getString("image_path"); con.close(); return path; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getPathOfImage."); e.printStackTrace(); } return null; } public String setInstitution(String university) { try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet ret = stm .executeQuery("SELECT * FROM bwLehrpool.m_institution where name like'" + university + "';"); if (ret.next() == false) { String id = UUID.randomUUID().toString(); stm.executeUpdate("INSERT INTO `bwLehrpool`.`m_institution`(`institutionID`,`name`)VALUES('" + id + "','" + university + "');"); con.commit(); ResultSet rs = stm .executeQuery("SELECT institutionID FROM bwLehrpool.m_institution WHERE name like '" + university + "';"); rs.next(); String institution=rs.getString("institutionID"); con.close(); return institution; } else { String institution=ret.getString("institutionID"); con.close(); return institution; } } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to setInstitution."); e.printStackTrace(); } return "-1"; } public String setPerson(String login, String lastname, String firstname, String mail, Date lastlogin, String Institution) { DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet ret = stm .executeQuery("SELECT userID FROM bwLehrpool.m_user where Nachname like '" + lastname + "' and Vorname like '" + firstname + "';"); if (ret.next() == false) { String id = UUID.randomUUID().toString(); stm.executeUpdate("INSERT INTO `bwLehrpool`.`m_user`(`userID`,`loginName`,`nachname`,`vorname`,`mail`,`lastLogin`,`institution`)VALUES('" + id + "','" + login + "','" + lastname + "','" + firstname + "','" + mail + "','" + formatter.format(new Date()) + "','" + Institution + "');"); con.commit(); ResultSet rs = stm .executeQuery("SELECT userID FROM bwLehrpool.m_user where Nachname like '" + lastname + "' and Vorname like '" + firstname + "';"); rs.next(); String userid=rs.getString("userID"); con.close(); return userid; } else { ret.first(); String userid=ret.getString("userID"); con.close(); return userid; } } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to setPerson."); e.printStackTrace(); } return "-1"; } public boolean setImageData(String pk_person, boolean license, boolean internet, long cpu, long ram, String imagename, String imagePath, boolean isTemplate, long filesize, String shareMode) { DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); int internet_bol = 0; int license_bol = 0; if (internet == true) { internet_bol = 1; } if (license == true) { license_bol = 1; } try { Connection con=getConnection(); Statement stm = con.createStatement(); String uid = UUID.randomUUID().toString(); stm.executeUpdate("INSERT INTO `bwLehrpool`.`m_VLData_imageInfo`(`GUID_imageID`,`imageVersion`,`image_name`,`image_path`,`image_lastCall`,`image_create_time`,`image_update_time`,`image_owner`,`image_change_by`,`rec_create_time`,`rec_change_time`,`rec_owner`,`rec_change_by`,`content_operatingSystem`,`status_isCompressed`,`status_isSecure`,`status_isOptimzed`,`status_isValid`,`status_isReady`,`status_isDeleted`,`status_isLastOfficialVersion`,`cond_hasLicenseRestriction`,`cond_hasInternetRestriction`,`cond_minRAM`,`cond_minCPUs`,`image_isTemplate`,`image_filesize`,`image_syncMode`)VALUES('" + uid // GUID_imageID + "',1,'" // imageVersion + imagename // image_name + "','" + imagePath // image_path + "','" + formatter.format(new Date()) // image_lastCall + "','" + formatter.format(new Date()) // image_create_time + "','" + formatter.format(new Date()) // image_update_time + "','" + pk_person // image_owner + "','" + pk_person // image_change_by + "','" + formatter.format(new Date()) // rec_create_time + "','" + formatter.format(new Date()) // rec_change_time + "','" + pk_person // rec_owner + "','" + pk_person // rec_change_by + "',0" // content_operatingSystem + ",1" // status_isCompressed + ",1" // status_isSecure + ",1" // status_isOptimzed + ",1" // status_isValid + ",1" // status_isReady + ",0" // status_isDeleted + ",0,'" // status_isLastOfficialVersion + license_bol // cond_hasLicenseRestriction + "','" + internet_bol // cond_hasInternetRestriction + "','" + ram // cond_minRAM + "','" + cpu // cond_minCPUs + "','" + isTemplate //image_isTemplate + "','" + filesize //image_filesize + "','" + shareMode //shareMode + "');"); con.commit(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to setImageData."); e.printStackTrace(); } return true; } public List getImageList() { Connection con=getConnection(); Statement stm; List list = new ArrayList(); try { stm = con.createStatement(); ResultSet res=stm .executeQuery("SELECT vl.GUID_imageID, vl.imageVersion,vl.image_name, vl.cond_hasLicenseRestriction, os.name, '' as lecture,vl.image_update_time, Concat(u.Nachname,' ',u.Vorname) as user FROM bwLehrpool.m_VLData_imageInfo vl, bwLehrpool.m_operatingSystem os, bwLehrpool.m_user u Where vl.content_operatingSystem=os.operatingSystemID and vl.image_owner=u.userID and vl.image_name not in (SELECT vl.image_name FROM bwLehrpool.m_VLData_imageInfo vl, bwLehrpool.m_operatingSystem os, bwLehrpool.m_VLData_lecture lect, bwLehrpool.m_user u Where vl.content_operatingSystem=os.operatingSystemID and lect.imageID=vl.GUID_imageID and vl.image_owner=u.userID) union SELECT vl.GUID_imageID, vl.imageVersion,vl.image_name, vl.cond_hasLicenseRestriction, os.name, lect.name as lecture, vl.image_update_time, Concat(u.Nachname,' ',u.Vorname) as user FROM bwLehrpool.m_VLData_imageInfo vl, bwLehrpool.m_operatingSystem os, bwLehrpool.m_VLData_lecture lect, bwLehrpool.m_user u Where vl.content_operatingSystem=os.operatingSystemID and lect.imageID=vl.GUID_imageID and vl.image_owner=u.userID;"); while (res.next()) { list.add(new Image(res.getString("GUID_imageID"), res .getString("imageVersion"), res.getString("image_name"), res .getString("cond_hasLicenseRestriction"), res .getString("name"), res.getString("lecture"), res.getString("image_update_time"), res .getString("user"))); } con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; } public List getLectureList() { List list = new ArrayList(); try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet res=stm .executeQuery("SELECT l.lectureID, l.name, l.isActive,l.startTime,l.endTime,l.lastUsed,l.description, i.image_name, concat(u.Nachname,' ',u.Vorname) as user FROM bwLehrpool.m_VLData_lecture l, bwLehrpool.m_VLData_imageInfo i, bwLehrpool.m_user u where i.GUID_imageID=l.imageID and l.admin_owner=u.userID;"); while (res.next()) { list.add(new Lecture(res.getString("lectureID"), res .getString("name"), res.getString("isActive"), res .getString("startTime"), res.getString("endTime"), res .getString("lastUsed"), res.getString("description"), res.getString("image_name"), res.getString("user"))); } con.close(); return list; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getLectureList."); e.printStackTrace(); } return null; } public List getAllOS() { List list = new ArrayList<>(); try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet rs=stm .executeQuery("SELECT name FROM bwLehrpool.m_operatingSystem;"); while (rs.next()) { list.add(rs.getString("name")); } return list; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getAllOS."); e.printStackTrace(); } return null; } public Map getPersonData(String Vorname, String Nachname) { Map map = new HashMap(); try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet rs= stm .executeQuery("SELECT u.Nachname, u.Vorname, u.mail, i.name FROM bwLehrpool.m_user u, bwLehrpool.m_institution i where u.Nachname like '" + Nachname + "' and u.Vorname like '" + Vorname + "' and u.institution=i.institutionID;"); while (rs.next()) { map.put("mail", rs.getString("mail")); map.put("Nachname", rs.getString("Nachname")); map.put("Vorname", rs.getString("Vorname")); map.put("Hochschule", rs.getString("name")); } con.close(); return map; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getPersonData."); e.printStackTrace(); } return null; } public int setLectureData(String pk_person, String pk_image, int imageversion, String name, String desc, String shortdesc, String start, String end, boolean isactive) { DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); int active_bol = 0; if (isactive == true) { active_bol = 1; } try { Connection con=getConnection(); Statement stm = con.createStatement(); String uid = UUID.randomUUID().toString(); stm.executeUpdate("INSERT INTO `bwLehrpool`.`m_VLData_lecture`(`lectureID`,`name`,`isActive`,`startTime`,`endTime`,`lastUsed`,`shortDescription`,`description`,`imageID`,`imageVersion`,`admin_createTime`,`admin_changeTime`,`admin_owner`,`admin_change_by`)VALUES('" + uid + "','" + name + "','" + active_bol + "','" + start + "','" + end + "','" + formatter.format(new Date()) + "','" + shortdesc + "','" + desc + "','" + pk_image + "','" + imageversion + "','" + formatter.format(new Date()) + "','" + formatter.format(new Date()) + "','" + pk_person + "','" + pk_person + "');"); con.commit(); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to setLectureData."); e.printStackTrace(); } return 0; } public Map getImageIDandVersion(String name) { Map map = new HashMap(); try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet image= stm .executeQuery("SELECT GUID_imageID, imageVersion FROM bwLehrpool.m_VLData_imageInfo where image_name like '" + name + "';"); while (image.next()) { map.put("GUID", image.getString("GUID_imageID")); map.put("version", String.valueOf(image.getString("imageVersion"))); } con.close(); return map; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getImageIDandVersion."); e.printStackTrace(); } return null; } public Map getImageData(String id, String version) { Map map = new HashMap(); try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet data=stm .executeQuery("SELECT image_name,cond_hasInternetRestriction,cond_hasLicenseRestriction, cond_minCPUs, cond_minRAM, image_syncMode,image_filesize,image_path FROM bwLehrpool.m_VLData_imageInfo where GUID_imageID = '" + id + "' and imageVersion = '" + version + "' ;"); while (data.next()) { map.put("name", data.getString("image_name")); map.put("internet", data.getString("cond_hasInternetRestriction")); map.put("license", data.getString("cond_hasLicenseRestriction")); map.put("cpu", data.getString("cond_minCPUs")); map.put("ram", data.getString("cond_minRAM")); map.put("shareMode", data.getString("image_syncMode")); map.put("filesize", data.getString("image_filesize")); map.put("path", data.getString("image_path")); } con.close(); return map; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getImageData."); e.printStackTrace(); } return null; } public int UpdateImageData(String name, String newName,String image_path, boolean license, boolean internet, long cpu, long ram, String id, String version, boolean isTemplate, long filesize, String shareMode) { try { Connection con=getConnection(); DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Statement stm = con.createStatement(); int newVersion = Integer.parseInt(version) + 1; int internet_bol = 0; int license_bol = 0; if (internet == true) { internet_bol = 1; } if (license == true) { license_bol = 1; } log.info(new Date() + " - 'image_name` = '" + newName+ "\n length of name="+newName.length()); stm.executeUpdate("UPDATE `bwLehrpool`.`m_VLData_imageInfo` SET `imageVersion` = '" + newVersion + "',`image_name` = '" + newName + "',`image_path` = '" + image_path + "',`image_update_time` = '" + formatter.format(new Date()) + "',`rec_change_time` = '" + formatter.format(new Date()) + "',`cond_hasLicenseRestriction` = '" + license_bol + "',`cond_hasInternetRestriction` = '" + internet_bol + "',`cond_minRAM` = '" + ram + "',`cond_minCPUs` = '" + cpu + "',`image_isTemplate` = '" + isTemplate + "',`image_filesize` = '" + filesize + "',`image_syncMode` = '" + shareMode + "' WHERE `GUID_imageID` = '" + id + "' AND `imageVersion` = '" + version + "';"); con.commit(); con.close(); return 0; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to UpdateImageData."); e.printStackTrace(); } return -1; } public boolean deleteImage(String id, String version) { try { Connection con=getConnection(); Statement stm = con.createStatement(); stm.executeUpdate("DELETE FROM bwLehrpool.m_VLData_imageInfo where GUID_imageID = '" + id + "' " + "AND imageVersion = '" + version + "';"); con.commit(); con.close(); return true; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to deleteImage."); e.printStackTrace(); } return false; } public int updateLectureData(String pk_image, int imageversion, String name, String newName, String desc, String shortdesc, String start, String end, boolean isactive, String id) { DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); int active_bol = 0; if (isactive == true) { active_bol = 1; } try { Connection con=getConnection(); Statement stm = con.createStatement(); stm.executeUpdate("UPDATE `bwLehrpool`.`m_VLData_lecture` SET `name` = '" + newName + "',`isActive` = '" + active_bol + "',`startTime` = '" + start + "',`endTime` = '" + end + "',`description` = '" + desc + "',`imageID` = '" + pk_image + "',`imageVersion` = '" + imageversion + "',`admin_changeTime` = '" + formatter.format(new Date()) + "'WHERE `lectureID` = '" + id + "';"); con.commit(); con.close(); log.info(new Date() + " - Succeeded to updateLectureData."); } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to updateLectureData."); e.printStackTrace(); } return 0; } public boolean connectedToLecture(String id, String version) { try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet rs = stm.executeQuery("SELECT lectureID FROM " + "bwLehrpool.m_VLData_lecture WHERE imageID = '" + id + "' AND imageVersion = '" + version + "';"); con.close(); return rs.first(); } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to execute method connectedToLecture."); e.printStackTrace(); } return false; } public boolean deleteLecture(String id) { try { Connection con=getConnection(); Statement stm = con.createStatement(); stm.executeUpdate("DELETE FROM bwLehrpool.m_VLData_lecture WHERE lectureID = '" + id + "';"); con.commit(); con.close(); return true; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to deleteLecture."); e.printStackTrace(); } return false; } public String getFile(String imageid, String imageversion) { try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet rs = stm .executeQuery("SELECT image_path FROM bwLehrpool.m_VLData_imageInfo WHERE GUID_imageID = '" + imageid + "' AND imageVersion = '" + imageversion + "';"); rs.next(); String path=rs.getString("image_path"); con.close(); return path; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getFile."); e.printStackTrace(); } return null; } public Map getDeleteXMLData(String id) { Map map = new HashMap(); try { Connection con=getConnection(); Statement stm = con.createStatement(); ResultSet rs = stm .executeQuery("SELECT name, admin_createTime FROM bwLehrpool.m_VLData_lecture where lectureID='" + id + "';"); rs.next(); map.put("date", rs.getString("admin_createTime").replace(" ", "") .replace("-", "").replace(":", "")); map.put("name", rs.getString("name")); con.close(); return map; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to getDeleteXMLData."); e.printStackTrace(); } return null; } public int UpdateImagePath(String name) { try { Connection con=getConnection(); Statement stm = con.createStatement(); String image_path="prod/"+name; stm.executeUpdate("UPDATE `bwLehrpool`.`m_VLData_imageInfo` SET `image_path` = '" + image_path + "' WHERE `image_path` = '" + "temp/"+name + "';"); con.commit(); con.close(); return 0; } catch (SQLException e) { // TODO Auto-generated catch block log.info(new Date() + " - Failed to UpdateImageData."); e.printStackTrace(); } return -1; } }