summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-08-12 19:09:58 +0200
committerSimon Rettberg2015-08-12 19:09:58 +0200
commitc5cca325907d5471c10a4888eef84d970d538a3d (patch)
tree195fd4213cb37cdb1a5ec4181eaf1cf1395daccf /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java
parent[client] Extended description text for main menu (diff)
downloadtutor-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.java189
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);
+ }
+
}