summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java
diff options
context:
space:
mode:
authorSimon Rettberg2015-10-02 16:58:42 +0200
committerSimon Rettberg2015-10-02 16:58:42 +0200
commit7960b7b5744cac56c65a576be3c452fa8bdaca66 (patch)
treee74a7c6908c21c43557cfa8cbc71c47e2f601704 /dozentenmodulserver/src/main/java
parent[server] Fix NPE (diff)
downloadtutor-module-7960b7b5744cac56c65a576be3c452fa8bdaca66.tar.gz
tutor-module-7960b7b5744cac56c65a576be3c452fa8bdaca66.tar.xz
tutor-module-7960b7b5744cac56c65a576be3c452fa8bdaca66.zip
[server] Fix constraint issues when deleting an image by baseid
Diffstat (limited to 'dozentenmodulserver/src/main/java')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java45
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java2
2 files changed, 23 insertions, 24 deletions
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
index 320f6cc5..ace8df01 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
@@ -501,14 +501,14 @@ public class DbImage {
affectedList.add(imageVersionId);
}
}
+ if (!affectedList.isEmpty()) {
+ updateLatestVersion(connection, affectedList.toArray(new String[affectedList.size()]));
+ }
connection.commit();
} catch (SQLException e) {
LOGGER.error("Query failed in DbImage.markForDeletion()", e);
throw e;
}
- if (!affectedList.isEmpty()) {
- updateLatestVersionAsync(affectedList.toArray(new String[affectedList.size()]));
- }
}
public static void setShareMode(String imageBaseId, ImageBaseWrite newData) throws SQLException {
@@ -640,15 +640,21 @@ public class DbImage {
public static void deleteVersionPermanently(LocalImageVersion image) throws SQLException {
try (MysqlConnection connection = Database.getConnection()) {
- DbLecture.unlinkFromImageVersion(connection, image.imageVersionId);
DbLecture.deletePermanently(connection, image);
+ // Unlink any linked lectures
+ DbLecture.unlinkFromImageVersion(connection, image.imageVersionId);
+ // Unlink latest version field from image base
+ MysqlStatement unlinkStmt = connection.prepareStatement("UPDATE imagebase SET latestversionid = NULL"
+ + " WHERE latestversionid = :imageversionid");
+ unlinkStmt.setString("imageversionid", image.imageVersionId);
+ unlinkStmt.executeUpdate();
MysqlStatement stmt = connection.prepareStatement("DELETE FROM imageversion"
+ " WHERE imageversionid = :imageversionid");
stmt.setString("imageversionid", image.imageVersionId);
stmt.executeUpdate();
connection.commit();
} catch (SQLException e) {
- LOGGER.error("Query failed in DbImage.deletePermanently()", e);
+ LOGGER.error("Query failed in DbImage.deleteVersionPermanently()", e);
throw e;
}
}
@@ -669,31 +675,26 @@ public class DbImage {
});
}
- private static void updateLatestVersionAsync(final String... changingImageVersionIds) {
- if (changingImageVersionIds == null || changingImageVersionIds.length == 0)
+ private static void updateLatestVersion(MysqlConnection connection, LocalImageVersion... versions)
+ throws SQLException {
+ if (versions == null || versions.length == 0)
return;
- QuickTimer.scheduleOnce(new Task() {
- @Override
- public void fire() {
- try (MysqlConnection connection = Database.getConnection()) {
- for (String changingImageVersionId : changingImageVersionIds) {
- versionValidityChanged(connection, changingImageVersionId, null);
- }
- connection.commit();
- } catch (SQLException | TNotFoundException e) {
- LOGGER.error("Query failed in DbImage.updateLatestVersionAsync()", e);
- }
+ for (LocalImageVersion version : versions) {
+ try {
+ versionValidityChanged(connection, version.imageVersionId, version.imageBaseId);
+ } catch (TNotFoundException e) {
+ // Swallow - logging happens in called method
}
- });
+ }
}
- private static void updateLatestVersion(MysqlConnection connection, LocalImageVersion... versions)
+ private static void updateLatestVersion(MysqlConnection connection, String... versions)
throws SQLException {
if (versions == null || versions.length == 0)
return;
- for (LocalImageVersion version : versions) {
+ for (String version : versions) {
try {
- versionValidityChanged(connection, version.imageVersionId, version.imageBaseId);
+ versionValidityChanged(connection, version, null);
} catch (TNotFoundException e) {
// Swallow - logging happens in called method
}
diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java
index 8cc2cd75..850f56b8 100644
--- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java
+++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/maintenance/DeleteOldImages.java
@@ -10,7 +10,6 @@ import org.apache.log4j.Logger;
import org.joda.time.DateTime;
import org.openslx.bwlp.sat.database.mappers.DbImage;
import org.openslx.bwlp.sat.database.mappers.DbImage.DeleteState;
-import org.openslx.bwlp.sat.database.mappers.DbLecture;
import org.openslx.bwlp.sat.database.models.LocalImageVersion;
import org.openslx.bwlp.sat.util.FileSystem;
import org.openslx.util.QuickTimer;
@@ -137,7 +136,6 @@ public class DeleteOldImages implements Runnable {
for (LocalImageVersion version : deletables) {
FileSystem.deleteImageRelatedFiles(version);
try {
- DbLecture.unlinkFromImageVersion(version.imageVersionId);
DbImage.deleteVersionPermanently(version);
} catch (SQLException e) {
writeln(sb, version.imageVersionId, ": Cannot delete image: ", e.getMessage());