summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java
diff options
context:
space:
mode:
authorSimon Rettberg2015-07-03 16:43:38 +0200
committerSimon Rettberg2015-07-03 16:43:38 +0200
commit90c159d622f234b99e47293f3ff2a35d64e6f8c9 (patch)
treee967412b1464e9e3cad381399d5dd1c596c0bf28 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java
parent[server] Refactored permission checking classes a bit (diff)
downloadtutor-module-90c159d622f234b99e47293f3ff2a35d64e6f8c9.tar.gz
tutor-module-90c159d622f234b99e47293f3ff2a35d64e6f8c9.tar.xz
tutor-module-90c159d622f234b99e47293f3ff2a35d64e6f8c9.zip
[server] Adapt to API changes, refine permission checking for image version deletion
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.java77
1 files changed, 74 insertions, 3 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 18f21498..a40fbbb3 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
@@ -3,6 +3,7 @@ package org.openslx.bwlp.sat.database.mappers;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@@ -12,9 +13,10 @@ 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.LecturePermissions;
+import org.openslx.bwlp.thrift.iface.LectureRead;
import org.openslx.bwlp.thrift.iface.LectureSummary;
import org.openslx.bwlp.thrift.iface.LectureWrite;
+import org.openslx.bwlp.thrift.iface.NetRule;
import org.openslx.bwlp.thrift.iface.TNotFoundException;
import org.openslx.bwlp.thrift.iface.UserInfo;
@@ -80,7 +82,7 @@ public class DbLecture {
MysqlStatement stmt = connection.prepareStatement("UPDATE lecture SET "
+ " displayname = :displayname, description = :description, imageversionid = :imageversionid,"
+ " autoupdate = :autoupdate, isenabled = :isenabled, starttime = :starttime,"
- + " endtime = :endtime, createtime = :createtime, updatetime = :updatetime,"
+ + " endtime = :endtime, updatetime = UNIX_TIMESTAMP(),"
+ " updaterid = :updaterid, runscript = :runscript, nics = :nics,"
+ " netrules = :netrules, isexam = :isexam, hasinternetaccess = :hasinternetaccess,"
+ " caneditdefault = :caneditdefault, canadmindefault = :canadmindefault"
@@ -111,7 +113,7 @@ public class DbLecture {
+ " l.lectureid, l.displayname AS lecturename, l.imageversionid, l.isenabled,"
+ " l.starttime, l.endtime, l.lastused, l.usecount, l.ownerid, l.updaterid,"
+ " l.isexam, l.hasinternetaccess, l.caneditdefault, l.canadmindefault,"
- + " perm.canedit, perm.canadmin"
+ + " perm.canedit, perm.canadmin FROM lecture l"
+ " LEFT JOIN lecturepermission perm ON (perm.lectureid = l.lectureid AND perm.userid = :userid)"
+ " WHERE lectureid = :lectureid");
stmt.setString("lectureid", lectureId);
@@ -186,4 +188,73 @@ public class DbLecture {
}
}
+ public static LectureRead getLectureDetails(UserInfo user, String lectureId) throws SQLException,
+ TNotFoundException {
+ try (MysqlConnection connection = Database.getConnection()) {
+ MysqlStatement stmt = connection.prepareStatement("SELECT"
+ + " l.lectureid, l.displayname AS l.lecturename, l.description, l.imageversionid, l.autoupdate,"
+ + " l.isenabled, l.starttime, l.endtime, l.lastused, l.usecount, l.createtime, l.updatetime,"
+ + " l.ownerid, l.updaterid, l.runscript, l.nics, l.netrules, l.isexam, l.hasinternetaccess,"
+ + " l.caneditdefault, l.canadmindefault, p.canedit, p.canadmin"
+ + " FROM lecture l "
+ + " LEFT JOIN lecturepermission p ON (l.lectureid = p.lectureid AND p.userid = :userid)"
+ + " WHERE l.lectureid = :lectureid LIMIT 1");
+ stmt.setString("userid", user.userId);
+ stmt.setString("lectureid", lectureId);
+ ResultSet rs = stmt.executeQuery();
+ if (!rs.next())
+ throw new TNotFoundException();
+ LectureRead lecture = new LectureRead();
+ lecture.setLectureId(rs.getString("lectureid"));
+ lecture.setLectureName(rs.getString("lecturename"));
+ lecture.setDescription(rs.getString("description"));
+ lecture.setAutoUpdate(rs.getBoolean("autoupdate"));
+ lecture.setIsEnabled(rs.getBoolean("isenabled"));
+ lecture.setStartTime(rs.getLong("starttime"));
+ lecture.setEndTime(rs.getLong("endtime"));
+ lecture.setLastUsed(rs.getLong("lastused"));
+ lecture.setUseCount(rs.getInt("usecount"));
+ lecture.setCreateTime(rs.getLong("createtime"));
+ lecture.setUpdateTime(rs.getLong("updatetime"));
+ lecture.setOwnerId(rs.getString("ownerid"));
+ lecture.setUpdaterId(rs.getString("updaterid"));
+ lecture.setRunscript(rs.getString("runscript"));
+ lecture.setNetworkExceptions(Arrays.asList(Json.deserializeThrift(rs.getString("netrules"),
+ NetRule[].class)));
+ lecture.setImage(DbImage.getImageSummary(connection, user,
+ DbImage.getBaseIdForVersionId(connection, rs.getString("imageversionid"))));
+ lecture.setAllowedUsers(getAllowedUsers(connection, lectureId));
+ return lecture;
+ } catch (SQLException e) {
+ LOGGER.error("Query failed in DbLecture.getLectureDetails()", e);
+ throw e;
+ }
+ }
+
+ public static List<String> getAllowedUsers(MysqlConnection connection, String lectureId)
+ throws SQLException {
+ MysqlStatement stmt = connection.prepareStatement("SELECT" + " userlogin FROM lectureuser"
+ + " WHERE lectureid = :lectureid");
+ stmt.setString("lectureid", lectureId);
+ ResultSet rs = stmt.executeQuery();
+ List<String> list = new ArrayList<>();
+ while (rs.next()) {
+ list.add(rs.getString("userlogin"));
+ }
+ return list;
+ }
+
+ public static boolean delete(String lectureId) throws TNotFoundException, SQLException {
+ int affected;
+ try (MysqlConnection connection = Database.getConnection()) {
+ MysqlStatement stmt = connection.prepareStatement("DELETE FROM lecture WHERE lectureid = :lectureid");
+ stmt.setString("lectureid", lectureId);
+ affected = stmt.executeUpdate();
+ connection.commit();
+ } catch (SQLException e) {
+ LOGGER.error("Query failed in DbLecture.delete()", e);
+ throw e;
+ }
+ return affected == 1;
+ }
}