diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateForm.java index 2c53a5bd..636eb0ad 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateForm.java @@ -8,6 +8,7 @@ package ch.ethz.seb.sebserver.gui.content; +import org.apache.commons.lang3.StringUtils; import org.eclipse.swt.widgets.Composite; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @@ -28,6 +29,7 @@ import ch.ethz.seb.sebserver.gui.form.FormBuilder; import ch.ethz.seb.sebserver.gui.form.FormHandle; import ch.ethz.seb.sebserver.gui.service.ResourceService; import ch.ethz.seb.sebserver.gui.service.examconfig.ExamConfigurationService; +import ch.ethz.seb.sebserver.gui.service.i18n.I18nSupport; import ch.ethz.seb.sebserver.gui.service.i18n.LocTextKey; import ch.ethz.seb.sebserver.gui.service.page.PageContext; import ch.ethz.seb.sebserver.gui.service.page.PageService; @@ -76,6 +78,7 @@ public class ConfigTemplateForm implements TemplateComposer { private final PageService pageService; private final RestService restService; private final CurrentUser currentUser; + private final I18nSupport i18nSupport; private final ResourceService resourceService; private final ExamConfigurationService examConfigurationService; @@ -93,6 +96,7 @@ public class ConfigTemplateForm implements TemplateComposer { this.pageService = pageService; this.restService = restService; this.currentUser = currentUser; + this.i18nSupport = pageService.getI18nSupport(); this.resourceService = pageService.getResourceService(); this.examConfigurationService = examConfigurationService; @@ -195,27 +199,31 @@ public class ConfigTemplateForm implements TemplateComposer { .withColumn(new ColumnDefinition<>( Domain.CONFIGURATION_ATTRIBUTE.ATTR_NAME, ATTRIBUTES_LIST_NAME_TEXT_KEY, - TemplateAttribute::getName) + this::getAttributeName) .withFilter(this.nameFilter) - .sortable()) + .sortable() + .widthProportion(3)) .withColumn(new ColumnDefinition( Domain.CONFIGURATION_ATTRIBUTE.ATTR_TYPE, ATTRIBUTES_LIST_TYPE_TEXT_KEY, resourceService::getAttributeTypeName) .withFilter(typeFilter) - .sortable()) + .sortable() + .widthProportion(1)) .withColumn(new ColumnDefinition<>( Domain.ORIENTATION.ATTR_VIEW_ID, ATTRIBUTES_LIST_VIEW_TEXT_KEY, resourceService.getViewNameFunction(entityKey.modelId)) .withFilter(viewFilter) - .sortable()) + .sortable() + .widthProportion(1)) .withColumn(new ColumnDefinition<>( Domain.ORIENTATION.ATTR_GROUP_ID, ATTRIBUTES_LIST_GROUP_TEXT_KEY, TemplateAttribute::getGroupId) .withFilter(this.groupFilter) - .sortable()) + .sortable() + .widthProportion(1)) .withDefaultAction(pageActionBuilder .newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_EDIT) .withParentEntityKey(entityKey) @@ -295,6 +303,18 @@ public class ConfigTemplateForm implements TemplateComposer { } + private String getAttributeName(final TemplateAttribute attribute) { + + final String name = this.i18nSupport.getText( + ExamConfigurationService.ATTRIBUTE_LABEL_LOC_TEXT_PREFIX + attribute.getName(), + ""); + if (StringUtils.isNotBlank(name)) { + return attribute.getName() + " (" + name + ")"; + } else { + return attribute.getName(); + } + } + private final PageAction resetToDefaults( final PageAction action, final EntityTable attrTable) { diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/InputFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/InputFieldBuilder.java index a777c6da..a84282f5 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/InputFieldBuilder.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/InputFieldBuilder.java @@ -21,8 +21,6 @@ import ch.ethz.seb.sebserver.gui.service.examconfig.impl.ViewContext; public interface InputFieldBuilder { - String RES_BUNDLE_KEY_PREFIX = "sebserver.examconfig.attribute."; - /** Called by the InputFieldBuilderSupplier bean instance on initialization to avoid * circular dependencies. * diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/ExamConfigXMLParser.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/ExamConfigXMLParser.java index de29712d..247f53de 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/ExamConfigXMLParser.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/ExamConfigXMLParser.java @@ -61,6 +61,7 @@ public class ExamConfigXMLParser extends DefaultHandler { "outsideSebEnableStartTaskManager", "outsideSebEnableSwitchUser", "outsideSebEnableVmWareClientShade", + "outsideSebEnableShutDown", "enableURLContentFilter", "enableURLFilter", "prohibitedProcesses.windowHandlingProcess", diff --git a/src/main/resources/data-demo.sql b/src/main/resources/data-demo.sql index a3743aac..8f750f4a 100644 --- a/src/main/resources/data-demo.sql +++ b/src/main/resources/data-demo.sql @@ -276,6 +276,41 @@ INSERT IGNORE INTO configuration_attribute VALUES (812, 'allowWlan', 'CHECKBOX', null, null, null, null, 'false'), (813, 'hookKeys', 'CHECKBOX', null, null, null, null, 'true'), + (900, 'examSessionClearCookiesOnEnd', 'CHECKBOX', null, null, null, null, 'false'), + (901, 'examSessionClearCookiesOnStart', 'CHECKBOX', null, null, null, null, 'false'), + (902, 'showBackToStartButton', 'CHECKBOX', null, null, null, null, 'true'), + (903, 'showSettingsInApp', 'CHECKBOX', null, null, null, null, 'false'), + (904, 'browserUserAgentWinTouchModeIPad', 'TEXT_FIELD', null, null, null, null, 'Mozilla/5.0 (iPad; CPU OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1'), + (905, 'mobileAllowPictureInPictureMediaPlayback', 'CHECKBOX', null, null, null, null, 'false'), + (906, 'lockOnMessageSocketClose', 'CHECKBOX', null, null, null, null, 'false'), + (907, 'enableDrawingEditor', 'CHECKBOX', null, null, null, null, 'false'), + (908, 'URLFilterMessage', 'RADIO_SELECTION', null, '0,1', null, null, '0'), + (909, 'allowDictation', 'CHECKBOX', null, null, null, null, 'false'), + (910, 'allowUserSwitching', 'CHECKBOX', null, null, null, null, 'false'), + (911, 'allowiOSBetaVersionNumber', 'SINGLE_SELECTION', null, '0,12', null, null, '0'), + (912, 'allowiOSVersionNumberMajor', 'SINGLE_SELECTION', null, '9,10,11,12', null, null, '9'), + (913, 'allowiOSVersionNumberMinor', 'INTEGER', null, null, null, null, '3'), + (914, 'allowiOSVersionNumberPatch', 'INTEGER', null, null, null, null, '5'), + (915, 'browserURLSalt', 'CHECKBOX', null, null, null, null, 'true'), + (916, 'examKeySalt', 'TEXT_FIELD', null, null, null, null, null), + (917, 'browserUserAgentiOS', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '0'), + (918, 'browserUserAgentiOSCustom', 'TEXT_FIELD', null, null, null, null, ''), + (919, 'browserWindowShowURL', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '0'), + (920, 'mobileAllowQRCodeConfig', 'CHECKBOX', null, null, null, null, 'false'), + (921, 'mobileAllowSingleAppMode', 'CHECKBOX', null, null, null, null, 'false'), + (922, 'mobileEnableASAM', 'CHECKBOX', null, null, null, null, 'true'), + (923, 'mobileEnableGuidedAccessLinkTransform', 'CHECKBOX', null, null, null, null, 'false'), + (924, 'mobilePreventAutoLock', 'CHECKBOX', null, null, null, null, 'true'), + (925, 'mobileShowSettings', 'CHECKBOX', null, null, null, null, 'false'), + (926, 'mobileStatusBarAppearance', 'SINGLE_SELECTION', null, '0,1,2', null, null, '1'), + (927, 'mobileStatusBarAppearanceExtended', 'SINGLE_SELECTION', null, '0,1,2,3,4', null, null, '1'), + (928, 'newBrowserWindowShowURL', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '1'), + (929, 'pinEmbeddedCertificates', 'CHECKBOX', null, null, null, null, 'false'), + (930, 'sendBrowserExamKey', 'CHECKBOX', null, null, null, null, 'false'), + (931, 'showNavigationButtons', 'CHECKBOX', null, null, null, null, 'false'), + (932, 'showScanQRCodeButton', 'CHECKBOX', null, null, null, null, 'false'), + (933, 'startResource', 'TEXT_FIELD', null, null, null, null, ''), + (1000, 'originatorVersion', 'TEXT_FIELD', null, null, null, null, 'SEB_Server_0.3.0'), (1001, 'sebConfigPurpose', 'RADIO_SELECTION', null, '0,1', null, null, '0') diff --git a/src/main/resources/data-prod.sql b/src/main/resources/data-prod.sql index 84e823e0..250fd21a 100644 --- a/src/main/resources/data-prod.sql +++ b/src/main/resources/data-prod.sql @@ -249,6 +249,41 @@ INSERT IGNORE INTO configuration_attribute VALUES (812, 'allowWlan', 'CHECKBOX', null, null, null, null, 'false'), (813, 'hookKeys', 'CHECKBOX', null, null, null, null, 'true'), + (900, 'examSessionClearCookiesOnEnd', 'CHECKBOX', null, null, null, null, 'false'), + (901, 'examSessionClearCookiesOnStart', 'CHECKBOX', null, null, null, null, 'false'), + (902, 'showBackToStartButton', 'CHECKBOX', null, null, null, null, 'true'), + (903, 'showSettingsInApp', 'CHECKBOX', null, null, null, null, 'false'), + (904, 'browserUserAgentWinTouchModeIPad', 'TEXT_FIELD', null, null, null, null, 'Mozilla/5.0 (iPad; CPU OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1'), + (905, 'mobileAllowPictureInPictureMediaPlayback', 'CHECKBOX', null, null, null, null, 'false'), + (906, 'lockOnMessageSocketClose', 'CHECKBOX', null, null, null, null, 'false'), + (907, 'enableDrawingEditor', 'CHECKBOX', null, null, null, null, 'false'), + (908, 'URLFilterMessage', 'RADIO_SELECTION', null, '0,1', null, null, '0'), + (909, 'allowDictation', 'CHECKBOX', null, null, null, null, 'false'), + (910, 'allowUserSwitching', 'CHECKBOX', null, null, null, null, 'false'), + (911, 'allowiOSBetaVersionNumber', 'SINGLE_SELECTION', null, '0,12', null, null, '0'), + (912, 'allowiOSVersionNumberMajor', 'SINGLE_SELECTION', null, '9,10,11,12', null, null, '9'), + (913, 'allowiOSVersionNumberMinor', 'INTEGER', null, null, null, null, '3'), + (914, 'allowiOSVersionNumberPatch', 'INTEGER', null, null, null, null, '5'), + (915, 'browserURLSalt', 'CHECKBOX', null, null, null, null, 'true'), + (916, 'examKeySalt', 'TEXT_FIELD', null, null, null, null, null), + (917, 'browserUserAgentiOS', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '0'), + (918, 'browserUserAgentiOSCustom', 'TEXT_FIELD', null, null, null, null, ''), + (919, 'browserWindowShowURL', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '0'), + (920, 'mobileAllowQRCodeConfig', 'CHECKBOX', null, null, null, null, 'false'), + (921, 'mobileAllowSingleAppMode', 'CHECKBOX', null, null, null, null, 'false'), + (922, 'mobileEnableASAM', 'CHECKBOX', null, null, null, null, 'true'), + (923, 'mobileEnableGuidedAccessLinkTransform', 'CHECKBOX', null, null, null, null, 'false'), + (924, 'mobilePreventAutoLock', 'CHECKBOX', null, null, null, null, 'true'), + (925, 'mobileShowSettings', 'CHECKBOX', null, null, null, null, 'false'), + (926, 'mobileStatusBarAppearance', 'SINGLE_SELECTION', null, '0,1,2', null, null, '1'), + (927, 'mobileStatusBarAppearanceExtended', 'SINGLE_SELECTION', null, '0,1,2,3,4', null, null, '1'), + (928, 'newBrowserWindowShowURL', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '1'), + (929, 'pinEmbeddedCertificates', 'CHECKBOX', null, null, null, null, 'false'), + (930, 'sendBrowserExamKey', 'CHECKBOX', null, null, null, null, 'false'), + (931, 'showNavigationButtons', 'CHECKBOX', null, null, null, null, 'false'), + (932, 'showScanQRCodeButton', 'CHECKBOX', null, null, null, null, 'false'), + (933, 'startResource', 'TEXT_FIELD', null, null, null, null, ''), + (1000, 'originatorVersion', 'TEXT_FIELD', null, null, null, null, 'SEB_Server_0.3.0'), (1001, 'sebConfigPurpose', 'RADIO_SELECTION', null, '0,1', null, null, '0') diff --git a/src/test/resources/data-test-additional.sql b/src/test/resources/data-test-additional.sql index c6c40816..7516d7b3 100644 --- a/src/test/resources/data-test-additional.sql +++ b/src/test/resources/data-test-additional.sql @@ -257,6 +257,41 @@ INSERT IGNORE INTO configuration_attribute VALUES (812, 'allowWlan', 'CHECKBOX', null, null, null, null, 'false'), (813, 'hookKeys', 'CHECKBOX', null, null, null, null, 'true'), + (900, 'examSessionClearCookiesOnEnd', 'CHECKBOX', null, null, null, null, 'false'), + (901, 'examSessionClearCookiesOnStart', 'CHECKBOX', null, null, null, null, 'false'), + (902, 'showBackToStartButton', 'CHECKBOX', null, null, null, null, 'true'), + (903, 'showSettingsInApp', 'CHECKBOX', null, null, null, null, 'false'), + (904, 'browserUserAgentWinTouchModeIPad', 'TEXT_FIELD', null, null, null, null, 'Mozilla/5.0 (iPad; CPU OS 12_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.2 Mobile/15E148 Safari/604.1'), + (905, 'mobileAllowPictureInPictureMediaPlayback', 'CHECKBOX', null, null, null, null, 'false'), + (906, 'lockOnMessageSocketClose', 'CHECKBOX', null, null, null, null, 'false'), + (907, 'enableDrawingEditor', 'CHECKBOX', null, null, null, null, 'false'), + (908, 'URLFilterMessage', 'RADIO_SELECTION', null, '0,1', null, null, '0'), + (909, 'allowDictation', 'CHECKBOX', null, null, null, null, 'false'), + (910, 'allowUserSwitching', 'CHECKBOX', null, null, null, null, 'false'), + (911, 'allowiOSBetaVersionNumber', 'SINGLE_SELECTION', null, '0,12', null, null, '0'), + (912, 'allowiOSVersionNumberMajor', 'SINGLE_SELECTION', null, '9,10,11,12', null, null, '9'), + (913, 'allowiOSVersionNumberMinor', 'INTEGER', null, null, null, null, '3'), + (914, 'allowiOSVersionNumberPatch', 'INTEGER', null, null, null, null, '5'), + (915, 'browserURLSalt', 'CHECKBOX', null, null, null, null, 'true'), + (916, 'examKeySalt', 'TEXT_FIELD', null, null, null, null, null), + (917, 'browserUserAgentiOS', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '0'), + (918, 'browserUserAgentiOSCustom', 'TEXT_FIELD', null, null, null, null, ''), + (919, 'browserWindowShowURL', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '0'), + (920, 'mobileAllowQRCodeConfig', 'CHECKBOX', null, null, null, null, 'false'), + (921, 'mobileAllowSingleAppMode', 'CHECKBOX', null, null, null, null, 'false'), + (922, 'mobileEnableASAM', 'CHECKBOX', null, null, null, null, 'true'), + (923, 'mobileEnableGuidedAccessLinkTransform', 'CHECKBOX', null, null, null, null, 'false'), + (924, 'mobilePreventAutoLock', 'CHECKBOX', null, null, null, null, 'true'), + (925, 'mobileShowSettings', 'CHECKBOX', null, null, null, null, 'false'), + (926, 'mobileStatusBarAppearance', 'SINGLE_SELECTION', null, '0,1,2', null, null, '1'), + (927, 'mobileStatusBarAppearanceExtended', 'SINGLE_SELECTION', null, '0,1,2,3,4', null, null, '1'), + (928, 'newBrowserWindowShowURL', 'SINGLE_SELECTION', null, '0,1,2,3', null, null, '1'), + (929, 'pinEmbeddedCertificates', 'CHECKBOX', null, null, null, null, 'false'), + (930, 'sendBrowserExamKey', 'CHECKBOX', null, null, null, null, 'false'), + (931, 'showNavigationButtons', 'CHECKBOX', null, null, null, null, 'false'), + (932, 'showScanQRCodeButton', 'CHECKBOX', null, null, null, null, 'false'), + (933, 'startResource', 'TEXT_FIELD', null, null, null, null, ''), + (1000, 'originatorVersion', 'TEXT_FIELD', null, null, null, null, 'SEB_Server_0.3.0'), (1001, 'sebConfigPurpose', 'RADIO_SELECTION', null, '0,1', null, null, '0')