diff options
author | Simon Rettberg | 2015-06-18 19:20:56 +0200 |
---|---|---|
committer | Simon Rettberg | 2015-06-18 19:20:56 +0200 |
commit | e9c43071935c25db93e3465b1c83b4be3a9421d1 (patch) | |
tree | f126ac46e6fff41a217ea1c1b2eff6d300087c25 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbImage.java | |
parent | [server] Implement getOperatingSystems and getVirtualizers (diff) | |
download | tutor-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.java | 92 |
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); } |