summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-06-18 19:20:56 +0200
committerSimon Rettberg2015-06-18 19:20:56 +0200
commite9c43071935c25db93e3465b1c83b4be3a9421d1 (patch)
treef126ac46e6fff41a217ea1c1b2eff6d300087c25 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java
parent[server] Implement getOperatingSystems and getVirtualizers (diff)
downloadtutor-module-e9c43071935c25db93e3465b1c83b4be3a9421d1.tar.gz
tutor-module-e9c43071935c25db93e3465b1c83b4be3a9421d1.tar.xz
tutor-module-e9c43071935c25db93e3465b1c83b4be3a9421d1.zip
[server] Implemented getUsers call, more permission checking methods
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java92
1 files changed, 80 insertions, 12 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 bbb5dad9..37baf447 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
@@ -21,6 +21,29 @@ public class DbImage {
private static final Logger LOGGER = Logger.getLogger(DbImage.class);
+ public static ImageSummaryRead getImageSummary(UserInfo user, String imageBaseId) throws SQLException,
+ TNotFoundException {
+ try (MysqlConnection connection = Database.getConnection()) {
+ return getImageSummary(connection, user, imageBaseId);
+ } catch (SQLException e) {
+ LOGGER.error("Query failed in DbImage.getImageSummary()", e);
+ throw e;
+ }
+ }
+
+ public static ImageSummaryRead getImageSummaryFromVersionId(UserInfo user, String imageVersionId)
+ throws TNotFoundException, SQLException {
+ try (MysqlConnection connection = Database.getConnection()) {
+ final String imageBaseId = getBaseIdForVersionId(connection, imageVersionId);
+ if (imageBaseId == null)
+ throw new TNotFoundException();
+ return getImageSummary(connection, user, imageBaseId);
+ } catch (SQLException e) {
+ LOGGER.error("Query failed in DbImage.getImageSummaryFromVersionId()", e);
+ throw e;
+ }
+ }
+
/**
* Get list of all images visible to the given user, optionally filtered by
* the given list of tags.
@@ -51,17 +74,7 @@ public class DbImage {
ResultSet rs = stmt.executeQuery();
List<ImageSummaryRead> list = new ArrayList<>();
while (rs.next()) {
- ImagePermissions defaultPermissions = DbImagePermissions.fromResultSetDefault(rs);
- ImageSummaryRead entry = new ImageSummaryRead(rs.getString("imagebaseid"),
- rs.getString("currentversionid"), rs.getString("latestversionid"),
- rs.getString("displayname"), rs.getInt("osid"), rs.getString("virtid"),
- rs.getLong("createtime"), rs.getLong("updatetime"), rs.getLong("expiretime"),
- rs.getString("ownerid"), rs.getString("uploaderid"),
- toShareMode(rs.getString("sharemode")), rs.getLong("filesize"),
- rs.getByte("isrestricted") != 0, rs.getByte("isvalid") != 0,
- rs.getByte("isprocessed") != 0, rs.getByte("istemplate") != 0, defaultPermissions);
- entry.userPermissions = DbImagePermissions.fromResultSetUser(rs);
- list.add(entry);
+ list.add(resultSetToSummary(rs));
}
return list;
} catch (SQLException e) {
@@ -103,7 +116,51 @@ public class DbImage {
}
}
- public static List<ImageVersionDetails> getImageVersions(MysqlConnection connection, String imageBaseId)
+ /**
+ * Private helper to create an {@link ImageSummaryRead} instance from a
+ * {@link ResultSet}
+ *
+ * @param rs
+ * @return
+ * @throws SQLException
+ */
+ private static ImageSummaryRead resultSetToSummary(ResultSet rs) throws SQLException {
+ ImagePermissions defaultPermissions = DbImagePermissions.fromResultSetDefault(rs);
+ ImageSummaryRead entry = new ImageSummaryRead(rs.getString("imagebaseid"),
+ rs.getString("currentversionid"), rs.getString("latestversionid"),
+ rs.getString("displayname"), rs.getInt("osid"), rs.getString("virtid"),
+ rs.getLong("createtime"), rs.getLong("updatetime"), rs.getLong("expiretime"),
+ rs.getString("ownerid"), rs.getString("uploaderid"), toShareMode(rs.getString("sharemode")),
+ rs.getLong("filesize"), rs.getByte("isrestricted") != 0, rs.getByte("isvalid") != 0,
+ rs.getByte("isprocessed") != 0, rs.getByte("istemplate") != 0, defaultPermissions);
+ entry.userPermissions = DbImagePermissions.fromResultSetUser(rs);
+ return entry;
+ }
+
+ private static ImageSummaryRead getImageSummary(MysqlConnection connection, UserInfo user,
+ String imageBaseId) throws SQLException, TNotFoundException {
+ MysqlStatement stmt = connection.prepareStatement("SELECT"
+ + " i.imagebaseid, i.currentversionid, i.latestversionid, i.displayname,"
+ + " i.osid, i.virtid, i.createtime, i.updatetime, i.ownerid,"
+ + " i.sharemode, i.istemplate, i.canlinkdefault, i.candownloaddefault,"
+ + " i.caneditdefault, i.canadmindefault,"
+ + " cur.expiretime, cur.filesize, cur.isenabled, cur.isrestricted, cur.isvalid,"
+ + " lat.uploaderid, lat.isprocessed,"
+ + " perm.canlink, perm.candownload, perm.canedit, perm.canadmin"
+ + " FROM imagebase i"
+ + " LEFT JOIN imageversion cur ON (cur.imageversionid = i.currentversionid)"
+ + " LEFT JOIN imageversion lat ON (lat.imageversionid = i.latestversionid)"
+ + " LEFT JOIN imagepermission perm ON (i.imagebaseid = perm.imagebaseid AND perm.userid = :userid)"
+ + " WHERE i.imagebaseid = :imagebaseid");
+ stmt.setString("userid", user.userId);
+ stmt.setString("imagebaseid", imageBaseId);
+ ResultSet rs = stmt.executeQuery();
+ if (!rs.next())
+ throw new TNotFoundException();
+ return resultSetToSummary(rs);
+ }
+
+ private static List<ImageVersionDetails> getImageVersions(MysqlConnection connection, String imageBaseId)
throws SQLException {
List<ImageVersionDetails> versionList = new ArrayList<>();
MysqlStatement stmt = connection.prepareStatement("SELECT"
@@ -124,6 +181,17 @@ public class DbImage {
return versionList;
}
+ private static String getBaseIdForVersionId(MysqlConnection connection, String imageVersionId)
+ throws SQLException {
+ MysqlStatement stmt = connection.prepareStatement("SELECT imagebaseid FROM imageversion"
+ + " WHERE imageversionid = :imageversionid LIMIT 1");
+ stmt.setString("imageversionid", imageVersionId);
+ ResultSet rs = stmt.executeQuery();
+ if (!rs.next())
+ return null;
+ return rs.getString("imagebaseid");
+ }
+
private static ShareMode toShareMode(String string) {
return ShareMode.valueOf(string);
}