diff options
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.java | 45 |
1 files changed, 26 insertions, 19 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 48915664..8701a722 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 @@ -31,7 +31,9 @@ import org.openslx.bwlp.thrift.iface.UserInfo; import org.openslx.util.Json; import org.openslx.util.Util; import org.openslx.virtualization.configuration.VirtualizationConfiguration; -import org.openslx.virtualization.configuration.VirtualizationConfiguration.UsbSpeed; +import org.openslx.virtualization.configuration.data.ConfigurationDataDozModServerToStatelessClient; +import org.openslx.virtualization.configuration.logic.ConfigurationLogicDozModServerToStatelessClient; +import org.openslx.virtualization.configuration.transformation.TransformationException; import com.google.gson.JsonParseException; @@ -555,10 +557,7 @@ public class DbLecture { TNotFoundException { LaunchData retval = new LaunchData(); byte[] config; - String lectureName; - String osKeyword; - boolean usbAccess; - VirtualizationConfiguration<?, ?, ?, ?, ?> virtualizationConfig = null; + try (MysqlConnection connection = Database.getConnection()) { // Get required data about lecture and used image MysqlStatement stmt = connection.prepareStatement("SELECT" @@ -575,23 +574,40 @@ public class DbLecture { || rs.getLong("endtime") < now) { throw new TNotFoundException(); } + config = rs.getBytes("virtualizerconfig"); if (config == null) { return null; } + + final String lectureName = rs.getString("lecturename"); + final String osKeyword = rs.getString("virtoskeyword"); + final boolean usbAccess = rs.getBoolean("hasusbaccess"); + + // prepare virtualization configuration as part of the launch data + VirtualizationConfiguration<?, ?, ?, ?, ?> virtualizationConfig = null; try { virtualizationConfig = VirtualizationConfiguration.getInstance(OperatingSystemList.get(), config, config.length); } catch (Exception e) { - LOGGER.error("virtualization config could not be initialized", e); + LOGGER.error("Virtualization configuration could not be initialized", e); return null; } - lectureName = rs.getString("lecturename"); - osKeyword = rs.getString("virtoskeyword"); - usbAccess = rs.getBoolean("hasusbaccess"); + + // modify virtualization configuration + try { + final ConfigurationLogicDozModServerToStatelessClient downloadLogic = new ConfigurationLogicDozModServerToStatelessClient(); + downloadLogic.apply(virtualizationConfig, + new ConfigurationDataDozModServerToStatelessClient(lectureName, osKeyword, usbAccess)); + } catch (TransformationException e) { + LOGGER.error("Virtualization configuration could not be modified", e); + return null; + } + retval.virtualizationConfig = virtualizationConfig; retval.legacyRunScript = rs.getString("runscript"); 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" + " lecture SET lastused = UNIX_TIMESTAMP(), usecount = usecount + 1" @@ -603,16 +619,7 @@ public class DbLecture { LOGGER.error("Query failed in DbLecture.getClientLaunchData()", e); throw e; } - virtualizationConfig.addDisplayName(lectureName); - if (osKeyword != null) { - virtualizationConfig.setOs(osKeyword); - } - virtualizationConfig.addHddTemplate("%VM_DISK_PATH%", "%VM_DISK_MODE%", "%VM_DISK_REDOLOGDIR%"); - virtualizationConfig.addEthernet(VirtualizationConfiguration.EtherType.NAT); // TODO: Use config - if (!usbAccess) { - virtualizationConfig.setMaxUsbSpeed(UsbSpeed.NONE); - } - virtualizationConfig.tweakForNonPersistent(); + return retval; } |