diff options
author | Manuel Bentele | 2021-04-20 13:58:37 +0200 |
---|---|---|
committer | Manuel Bentele | 2021-04-20 13:58:37 +0200 |
commit | 2a2c15fd614d6156406d7791330bd7a82a38b86b (patch) | |
tree | b0373b0b47024389f2ca03b13b63a67a67520700 /dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers | |
parent | [client,server] Rename VmMetaData classes (diff) | |
download | tutor-module-2a2c15fd614d6156406d7791330bd7a82a38b86b.tar.gz tutor-module-2a2c15fd614d6156406d7791330bd7a82a38b86b.tar.xz tutor-module-2a2c15fd614d6156406d7791330bd7a82a38b86b.zip |
[client,server] Encapsulate transformation logic for virtualization configurations
Diffstat (limited to 'dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers')
-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; } |