summaryrefslogtreecommitdiffstats
path: root/dozentenmodulserver
diff options
context:
space:
mode:
authorManuel Bentele2021-04-20 13:58:37 +0200
committerManuel Bentele2021-04-20 13:58:37 +0200
commit2a2c15fd614d6156406d7791330bd7a82a38b86b (patch)
treeb0373b0b47024389f2ca03b13b63a67a67520700 /dozentenmodulserver
parent[client,server] Rename VmMetaData classes (diff)
downloadtutor-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')
-rw-r--r--dozentenmodulserver/src/main/java/org/openslx/bwlp/sat/database/mappers/DbLecture.java45
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;
}