From 645f99079478eb3a5e7e041a6f5a836e61832ad2 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 11 Dec 2018 10:41:49 +0100 Subject: [*] Follow changes in m-s-s to load/save predef netshare/filters --- .../gui/configurator/LdapFilterConfigurator.java | 29 ++++---------------- .../gui/configurator/NetshareConfigurator.java | 24 +++-------------- .../dozmod/gui/window/LectureDetailsWindow.java | 4 +-- .../bwlp/sat/database/mappers/DbLecture.java | 21 ++++++++++----- .../bwlp/sat/database/mappers/DbLectureFilter.java | 23 +++++++++------- .../sat/database/mappers/DbLectureNetshare.java | 31 +++++++++++++--------- .../org/openslx/bwlp/sat/thrift/ServerHandler.java | 4 +-- 7 files changed, 59 insertions(+), 77 deletions(-) diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java index 1f359305..6ebd180f 100755 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/LdapFilterConfigurator.java @@ -157,36 +157,17 @@ public class LdapFilterConfigurator extends LdapFilterConfiguratorLayout { return ret; } - public boolean setState(List data) { + public boolean setState(List data, List predefSelected) { if (data == null) return false; ArrayList filterList = new ArrayList<>(data); + Set checked = new HashSet(); List predef = MetaDataCache.getPredefinedLdapFilters(); - Set checked = new HashSet<>(); - for (LdapFilter item : data) { - if (item.filterId == 0) - continue; - // Item has a filterId (is predefined), so validate it's in there - // before marking it checked, or just uncheck it by removing the id - // so it becomes a custom entry. - boolean ok = false; - for (LdapFilter pd : predef) { - if (pd.filterId == item.filterId) { - checked.add(pd); - ok = true; - break; - } - } - // If it wasn't preselected, add to list now... - if (!ok) { - item.filterId = 0; - } - } // Now add remaining filters for (LdapFilter pd : predef) { - if (!checked.contains(pd)) { - filterList.add(pd); - LOGGER.info("Adding " + pd.filterId); + filterList.add(pd); + if (predefSelected != null && predefSelected.contains(pd.filterId)) { + checked.add(pd); } } tblFilters.setData(filterList, checked, false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java index 0fe7052b..ec0c9009 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/configurator/NetshareConfigurator.java @@ -292,32 +292,16 @@ public class NetshareConfigurator extends NetshareConfiguratorLayout { return ret; } - public boolean setState(List data) { + public boolean setState(List data, List predefSelected) { if (data == null) return false; List shareList = new ArrayList<>(data); List predef = MetaDataCache.getPredefinedNetshares(); Set checked = new HashSet<>(); - for (NetShare item : data) { - if (item.shareId == 0) - continue; - boolean ok = false; - for (NetShare share : predef) { - if (share.shareId == item.shareId) { - checked.add(share); - ok = true; - break; - } - } - if (!ok) { - item.shareId = 0; - } - } - // Now add remaining filters for (NetShare share : predef) { - if (!checked.contains(share)) { - shareList.add(share); - LOGGER.info("Adding " + share.shareId); + shareList.add(share); + if (predefSelected != null && predefSelected.contains(share.shareId)) { + checked.add(share); } } tblNetshare.setData(shareList, checked, false); diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java index 9fc5dd34..4820ccc6 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/window/LectureDetailsWindow.java @@ -343,8 +343,8 @@ public class LectureDetailsWindow extends LectureDetailsWindowLayout implements // init advanced info ctlRunscriptConfigurator.setState(lecture.runscript); - ctlNetshareConfigurator.setState(lecture.networkShares); - ctlLdapFilterConfigurator.setState(lecture.ldapFilters); + ctlNetshareConfigurator.setState(lecture.networkShares, lecture.presetNetworkShares); + ctlLdapFilterConfigurator.setState(lecture.ldapFilters, lecture.presetLdapFilters); ctlNetrulesConfigurator.setState(lecture.networkExceptions); txtTitle.setText(lecture.getLectureName()); 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 fd2b8c19..faa708ba 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 @@ -20,6 +20,7 @@ import org.openslx.bwlp.sat.thrift.cache.OperatingSystemList; import org.openslx.bwlp.sat.web.VmChooserEntryXml; import org.openslx.bwlp.sat.web.VmChooserListXml; import org.openslx.bwlp.sat.web.XmlFilterEntry; +import org.openslx.bwlp.thrift.iface.LdapFilter; import org.openslx.bwlp.thrift.iface.LectureRead; import org.openslx.bwlp.thrift.iface.LectureSummary; import org.openslx.bwlp.thrift.iface.LectureWrite; @@ -120,10 +121,10 @@ public class DbLecture { stmt.executeUpdate(); writeLocations(connection, lectureId, lecture.locationIds); if (lecture.isSetNetworkShares()) { - DbLectureNetshare.writeNetworkShares(connection, lectureId, lecture.networkShares); + DbLectureNetshare.writeForLecture(connection, lectureId, lecture.networkShares); } if (lecture.isSetLdapFilters()) { - DbLectureFilter.writeLdapFilters(connection, lectureId, lecture.ldapFilters); + DbLectureFilter.writeForLectureLdap(connection, lectureId, lecture.ldapFilters); } connection.commit(); return lectureId; @@ -147,10 +148,10 @@ public class DbLecture { setWriteFields(stmt, lectureId, lecture, user); writeLocations(connection, lectureId, lecture.locationIds); if (lecture.isSetNetworkShares()) { - DbLectureNetshare.writeNetworkShares(connection, lectureId, lecture.networkShares); + DbLectureNetshare.writeForLecture(connection, lectureId, lecture.networkShares); } if (lecture.isSetLdapFilters()) { - DbLectureFilter.writeLdapFilters(connection, lectureId, lecture.ldapFilters); + DbLectureFilter.writeForLectureLdap(connection, lectureId, lecture.ldapFilters); } if (lecture.isSetPresetScriptIds()) { DbRunScript.writeLectureRunScripts(connection, lectureId, lecture.presetScriptIds); @@ -344,8 +345,14 @@ public class DbLecture { lecture.setUserPermissions(DbLecturePermissions.fromResultSetUser(rs)); User.setCombinedUserPermissions(lecture, user); lecture.setLocationIds(DbLocation.getLectureLocations(connection, lectureId)); - lecture.setNetworkShares(DbLectureNetshare.getLectureNetshares(connection, lectureId)); - lecture.setLdapFilters(DbLectureFilter.getLectureLdapFilters(connection, lectureId)); + lecture.setNetworkShares(new ArrayList()); + lecture.setPresetNetworkShares(new ArrayList()); + DbLectureNetshare.getSplitForLecture(connection, lectureId, + lecture.networkShares, lecture.presetNetworkShares); + lecture.setLdapFilters(new ArrayList()); + lecture.setPresetLdapFilters(new ArrayList()); + DbLectureFilter.getSplitForLectureLdap(connection, lectureId, + lecture.ldapFilters, lecture.presetLdapFilters); return lecture; } catch (SQLException e) { LOGGER.error("Query failed in DbLecture.getLectureDetails()", e); @@ -577,7 +584,7 @@ public class DbLecture { usbAccess = rs.getBoolean("hasusbaccess"); retval.vmx = meta; retval.legacyRunScript = rs.getString("runscript"); - retval.netShares = DbLectureNetshare.getLectureNetshares(connection, lectureId); + retval.netShares = DbLectureNetshare.getCombinedForLecture(connection, lectureId); retval.runScript = DbRunScript.getRunScriptsForLaunch(connection, lectureId, rs.getInt("osid")); // Everything worked so far, update statistics counters MysqlStatement upStmt = connection.prepareStatement("UPDATE" diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureFilter.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureFilter.java index 8afe7988..2f21af99 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureFilter.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureFilter.java @@ -28,21 +28,24 @@ public class DbLectureFilter { return stmt; } - public static List getLectureLdapFilters(MysqlConnection connection, String lectureId) - throws SQLException { - List list = new ArrayList<>(); + public static void getSplitForLectureLdap(MysqlConnection connection, String lectureId, + List custom, List predef) throws SQLException { MysqlStatement stmt = getLdapFilterStatement(connection, lectureId); ResultSet rs = stmt.executeQuery(); while (rs.next()) { - LdapFilter filter = new LdapFilter(rs.getString("filterkey"), rs.getString("filtervalue")); - filter.setFilterId(rs.getInt("filterid")); - filter.setTitle(rs.getString("filtername")); - list.add(filter); + int id = rs.getInt("filterid"); + if (id != 0) { + predef.add(id); + } else { + LdapFilter filter = new LdapFilter(rs.getString("filterkey"), rs.getString("filtervalue")); + filter.setFilterId(id); + filter.setTitle(rs.getString("filtername")); + custom.add(filter); + } } - return list; } - public static List getPredefinedLdapFilters() + public static List getPredefinedLdap() throws SQLException { try (MysqlConnection connection = Database.getConnection()) { List list = new ArrayList<>(); @@ -78,7 +81,7 @@ public class DbLectureFilter { return list; } - public static void writeLdapFilters(MysqlConnection connection, String lectureId, List list) + public static void writeForLectureLdap(MysqlConnection connection, String lectureId, List list) throws SQLException { if (lectureId == null || lectureId.isEmpty()) { return; diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureNetshare.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureNetshare.java index c60de376..30843d31 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureNetshare.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLectureNetshare.java @@ -17,7 +17,7 @@ public class DbLectureNetshare { private static final Logger LOGGER = Logger.getLogger(DbLectureNetshare.class); - public static void writeNetworkShares(MysqlConnection connection, String lectureId, List shares) + public static void writeForLecture(MysqlConnection connection, String lectureId, List shares) throws SQLException { if (lectureId == null || lectureId.isEmpty()) { return; @@ -53,16 +53,7 @@ public class DbLectureNetshare { } } - public static List getLectureNetshares(String lectureId) throws SQLException { - try (MysqlConnection connection = Database.getConnection()) { - return getLectureNetshares(connection, lectureId); - } catch (SQLException e) { - LOGGER.error("Query failed in DbNetshare.getLectureNetshares()", e); - throw e; - } - } - - public static List getLectureNetshares(MysqlConnection connection, String lectureId) + public static List getCombinedForLecture(MysqlConnection connection, String lectureId) throws SQLException { List list = new ArrayList<>(); MysqlStatement netsharestmt = connection.prepareStatement( @@ -78,7 +69,23 @@ public class DbLectureNetshare { return list; } - public static List getPredefinedNetshares() throws SQLException { + public static void getSplitForLecture(MysqlConnection connection, String lectureId, + List custom, List predef) throws SQLException { + MysqlStatement netsharestmt = connection + .prepareStatement("SELECT sharepresetid, sharedata FROM networkshare WHERE lectureid = :lectureid"); + netsharestmt.setString("lectureid", lectureId); + ResultSet rs = netsharestmt.executeQuery(); + while (rs.next()) { + int id = rs.getInt("sharepresetid"); + if (id == 0) { + custom.add(Json.deserialize(rs.getString("sharedata"), NetShare.class).setShareId(0)); + } else { + predef.add(id); + } + } + } + + public static List getPredefined() throws SQLException { try (MysqlConnection connection = Database.getConnection()) { List list = new ArrayList<>(); MysqlStatement stmt = connection diff --git a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java index f97766ed..a818a9ae 100644 --- a/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java +++ b/dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/thrift/ServerHandler.java @@ -794,13 +794,13 @@ public class ServerHandler implements SatelliteServer.Iface { SessionManager.ensureAuthenticated(userToken); // Only logged in users PredefinedData data = new PredefinedData(); try { - data.ldapFilter = DbLectureFilter.getPredefinedLdapFilters(); + data.ldapFilter = DbLectureFilter.getPredefinedLdap(); } catch (SQLException e) { throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "Database failure when querying predefined LDAP filters."); } try { - data.netShares = DbLectureNetshare.getPredefinedNetshares(); + data.netShares = DbLectureNetshare.getPredefined(); } catch (SQLException e) { throw new TInvocationException(InvocationError.INTERNAL_SERVER_ERROR, "Database failure when querying predefined network shares."); -- cgit v1.2.3-55-g7522