diff options
author | Simon Rettberg | 2015-08-12 19:09:58 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-08-12 19:09:58 +0200 |
commit | c5cca325907d5471c10a4888eef84d970d538a3d (patch) | |
tree | 195fd4213cb37cdb1a5ec4181eaf1cf1395daccf /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java | |
parent | [client] Extended description text for main menu (diff) | |
download | tutor-module-c5cca325907d5471c10a4888eef84d970d538a3d.tar.gz tutor-module-c5cca325907d5471c10a4888eef84d970d538a3d.tar.xz tutor-module-c5cca325907d5471c10a4888eef84d970d538a3d.zip |
[server] Update lecture/latestversionid links when image versions are created/deleted
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java')
-rw-r--r-- | dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java | 189 |
1 files changed, 115 insertions, 74 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java index efd9f78b..4ad815ec 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java @@ -13,6 +13,7 @@ import org.openslx.bwlp.sat.database.MysqlConnection; import org.openslx.bwlp.sat.database.MysqlStatement; import org.openslx.bwlp.sat.permissions.User; import org.openslx.bwlp.sat.util.Json; +import org.openslx.bwlp.thrift.iface.ImageVersionDetails; import org.openslx.bwlp.thrift.iface.LectureRead; import org.openslx.bwlp.thrift.iface.LectureSummary; import org.openslx.bwlp.thrift.iface.LectureWrite; @@ -26,10 +27,45 @@ public class DbLecture { private static final Logger LOGGER = Logger.getLogger(DbLecture.class); - public static String create(UserInfo user, LectureWrite lecture) throws SQLException { + private static void setWriteFields(MysqlStatement stmt, String lectureId, LectureWrite lecture, + UserInfo updatingUser) throws SQLException { if (lecture.lectureName.length() > 100) { lecture.lectureName = lecture.lectureName.substring(0, 100); } + String nicsJson = null; + if (lecture.nics != null && !lecture.nics.isEmpty()) { + for (;;) { + nicsJson = Json.serialize(lecture.nics); + if (nicsJson.length() < 200) + break; + lecture.nics.remove(0); + } + } + String netruleJson; + if (lecture.networkExceptions == null) { + netruleJson = null; + } else { + netruleJson = Json.serialize(lecture.networkExceptions); + } + stmt.setString("lectureid", lectureId); + stmt.setString("displayname", lecture.lectureName); + stmt.setString("description", lecture.description); + stmt.setString("imageversionid", lecture.imageVersionId); + stmt.setBoolean("autoupdate", lecture.autoUpdate); + stmt.setBoolean("isenabled", lecture.isEnabled); + stmt.setLong("starttime", lecture.startTime); + stmt.setLong("endtime", lecture.endTime); + stmt.setString("updaterid", updatingUser.userId); + stmt.setString("runscript", lecture.runscript); + stmt.setString("nics", nicsJson); + stmt.setString("netrules", netruleJson); + stmt.setBoolean("isexam", lecture.isExam); + stmt.setBoolean("hasinternetaccess", lecture.hasInternetAccess); + stmt.setBoolean("caneditdefault", lecture.defaultPermissions.edit); + stmt.setBoolean("canadmindefault", lecture.defaultPermissions.admin); + } + + public static String create(UserInfo user, LectureWrite lecture) throws SQLException { try (MysqlConnection connection = Database.getConnection()) { MysqlStatement stmt = connection.prepareStatement("INSERT INTO lecture" + " (lectureid, displayname, description, imageversionid, autoupdate," @@ -39,23 +75,12 @@ public class DbLecture { + " VALUES " + " (:lectureid, :displayname, :description, :imageversionid, :autoupdate," + " :isenabled, :starttime, :endtime, UNIX_TIMESTAMP(), UNIX_TIMESTAMP()," - + " :userid, :userid, NULL, NULL, NULL, :isexam, :hasinternetaccess, :canedit, :canadmin)"); + + " :ownerid, :updaterid, :runscript, :nics, :netrules, :isexam," + + " :hasinternetaccess, :caneditdefault, :canadmindefault)"); String lectureId = UUID.randomUUID().toString(); - stmt.setString("lectureid", lectureId); - stmt.setString("displayname", lecture.lectureName); - stmt.setString("description", lecture.description); - stmt.setString("imageversionid", lecture.imageVersionId); - stmt.setBoolean("autoupdate", lecture.autoUpdate); - stmt.setBoolean("isenabled", lecture.isEnabled); - stmt.setLong("starttime", lecture.startTime); - stmt.setLong("endtime", lecture.endTime); - stmt.setString("userid", user.userId); - stmt.setBoolean("isexam", lecture.isExam); - stmt.setBoolean("hasinternetaccess", lecture.hasInternetAccess); - stmt.setBoolean("canedit", lecture.defaultPermissions.edit); - stmt.setBoolean("canadmin", lecture.defaultPermissions.admin); + setWriteFields(stmt, lectureId, lecture, user); + stmt.setString("ownerid", user.userId); stmt.executeUpdate(); - update(connection, user, lectureId, lecture); // TODO: WTF connection.commit(); return lectureId; } catch (SQLException e) { @@ -64,20 +89,18 @@ public class DbLecture { } } - public static void setOwner(UserInfo user, String lectureId, String newOwnerId) throws SQLException { - try (MysqlConnection connection = Database.getConnection()) { - MysqlStatement stmt = connection.prepareStatement("UPDATE lecture" - + " SET ownerid = :ownerid, updaterid = :userid, updatetime = UNIX_TIMESTAMP()" - + " WHERE lectureid = :lectureid"); - stmt.setString("ownerid", newOwnerId); - stmt.setString("userid", user.userId); - stmt.setString("lectureid", lectureId); - stmt.executeUpdate(); - connection.commit(); - } catch (SQLException e) { - LOGGER.error("Query failed in DbLecture.setOwner()", e); - throw e; - } + private static void update(MysqlConnection connection, UserInfo user, String lectureId, + LectureWrite lecture) throws SQLException { + MysqlStatement stmt = connection.prepareStatement("UPDATE lecture SET " + + " displayname = :displayname, description = :description, imageversionid = :imageversionid," + + " autoupdate = :autoupdate, isenabled = :isenabled, starttime = :starttime," + + " endtime = :endtime, updatetime = UNIX_TIMESTAMP()," + + " updaterid = :updaterid, runscript = :runscript, nics = :nics," + + " netrules = :netrules, isexam = :isexam, hasinternetaccess = :hasinternetaccess," + + " caneditdefault = :caneditdefault, canadmindefault = :canadmindefault" + + " WHERE lectureid = :lectureid"); + setWriteFields(stmt, lectureId, lecture, user); + stmt.executeUpdate(); } public static void update(UserInfo user, String lectureId, LectureWrite lecture) throws SQLException { @@ -90,51 +113,20 @@ public class DbLecture { } } - private static void update(MysqlConnection connection, UserInfo user, String lectureId, - LectureWrite lecture) throws SQLException { - if (lecture.lectureName.length() > 100) { - lecture.lectureName = lecture.lectureName.substring(0, 100); - } - String nicsJson = null; - if (lecture.nics != null && !lecture.nics.isEmpty()) { - for (;;) { - nicsJson = Json.serialize(lecture.nics); - if (nicsJson.length() < 200) - break; - lecture.nics.remove(0); - } - } - String netruleJson; - if (lecture.networkExceptions == null) { - netruleJson = null; - } else { - netruleJson = Json.serialize(lecture.networkExceptions); + public static void setOwner(UserInfo user, String lectureId, String newOwnerId) throws SQLException { + try (MysqlConnection connection = Database.getConnection()) { + MysqlStatement stmt = connection.prepareStatement("UPDATE lecture" + + " SET ownerid = :ownerid, updaterid = :updaterid, updatetime = UNIX_TIMESTAMP()" + + " WHERE lectureid = :lectureid"); + stmt.setString("ownerid", newOwnerId); + stmt.setString("updaterid", user.userId); + stmt.setString("lectureid", lectureId); + stmt.executeUpdate(); + connection.commit(); + } catch (SQLException e) { + LOGGER.error("Query failed in DbLecture.setOwner()", e); + throw e; } - MysqlStatement stmt = connection.prepareStatement("UPDATE lecture SET " - + " displayname = :displayname, description = :description, imageversionid = :imageversionid," - + " autoupdate = :autoupdate, isenabled = :isenabled, starttime = :starttime," - + " endtime = :endtime, updatetime = UNIX_TIMESTAMP()," - + " updaterid = :updaterid, runscript = :runscript, nics = :nics," - + " netrules = :netrules, isexam = :isexam, hasinternetaccess = :hasinternetaccess," - + " caneditdefault = :caneditdefault, canadmindefault = :canadmindefault" - + " WHERE lectureid = :lectureid"); - stmt.setString("lectureid", lectureId); - stmt.setString("displayname", lecture.lectureName); - stmt.setString("description", lecture.description); - stmt.setString("imageversionid", lecture.imageVersionId); - stmt.setBoolean("autoupdate", lecture.autoUpdate); - stmt.setBoolean("isenabled", lecture.isEnabled); - stmt.setLong("starttime", lecture.startTime); - stmt.setLong("endtime", lecture.endTime); - stmt.setString("updaterid", user.userId); - stmt.setString("runscript", lecture.runscript); - stmt.setString("nics", nicsJson); - stmt.setString("netrules", netruleJson); - stmt.setBoolean("isexam", lecture.isExam); - stmt.setBoolean("hasinternetaccess", lecture.hasInternetAccess); - stmt.setBoolean("caneditdefault", lecture.defaultPermissions.edit); - stmt.setBoolean("canadmindefault", lecture.defaultPermissions.admin); - stmt.executeUpdate(); } public static LectureSummary getLectureSummary(UserInfo user, String lectureId) throws SQLException, @@ -219,6 +211,18 @@ public class DbLecture { } } + protected static List<String> getAllUsingImageVersion(MysqlConnection connection, String imageVersionId) + throws SQLException { + MysqlStatement stmt = connection.prepareStatement("SELECT lectureid FROM lecture WHERE imageversionid = :imageversionid"); + stmt.setString("imageversionid", imageVersionId); + ResultSet rs = stmt.executeQuery(); + List<String> list = new ArrayList<>(); + while (rs.next()) { + list.add(rs.getString("lectureid")); + } + return list; + } + public static LectureRead getLectureDetails(UserInfo user, String lectureId) throws SQLException, TNotFoundException { try (MysqlConnection connection = Database.getConnection()) { @@ -297,4 +301,41 @@ public class DbLecture { } return affected == 1; } + + protected static void autoUpdateUsedImage(MysqlConnection connection, String imageBaseId, + String imageVersionId) throws SQLException { + // TODO: select first so we can email + MysqlStatement stmt = connection.prepareStatement("UPDATE lecture l, imageversion v SET" + + " l.imageversionid = :imageversionid" + + " WHERE v.imageversionid = l.imageversionid AND v.imagebaseid = :imagebaseid" + + " AND l.autoupdate = 1"); + stmt.setString("imageversionid", imageVersionId); + stmt.setString("imagebaseid", imageBaseId); + stmt.executeUpdate(); + } + + /** + * Called when an image version is deleted or marked for deletion, so that + * linking lectures switch over to other available versions. + */ + protected static void autoSwitchUsedImage(MysqlConnection connection, ImageVersionDetails oldVersion, ImageVersionDetails newVersion) + throws TNotFoundException, SQLException { + // First, get list of lectures using the image version to switch away to + List<String> lectures = getAllUsingImageVersion(connection, oldVersion.versionId); + if (lectures.isEmpty()) + return; + // TODO: If there is no new candidate to switch to, send a warning via mail + if (newVersion == null) { + // ... email stuff + return; + } + // Update and send info mail + MysqlStatement stmt = connection.prepareStatement("UPDATE lecture SET imageversionid = :newversionid" + + " WHERE imageversionid = :oldversionid"); + stmt.setString("oldversionid", oldVersion.versionId); + stmt.setString("newversionid", newVersion.versionId); + stmt.executeUpdate(); + // TODO: Send mails .. Something.sendLectureChangeNotify(lectures, oldVersion, newVersion); + } + } |