diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateAttributeForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateAttributeForm.java
index 4addce83..df7144fd 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateAttributeForm.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateAttributeForm.java
@@ -188,7 +188,7 @@ public class ConfigTemplateAttributeForm implements TemplateComposer {
new View(-1L, ViewContext.TEMPLATE_VIEW_NAME, 10, 0, templateId),
viewName -> null,
attributeMapping,
- 1, false, null);
+ 1, false, true, null);
final InputFieldBuilder inputFieldBuilder = this.examConfigurationService.getInputFieldBuilder(
attribute.getConfigAttribute(),
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBSettingsForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBSettingsForm.java
index c389f14a..34b7e7bf 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBSettingsForm.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBSettingsForm.java
@@ -173,6 +173,7 @@ public class SEBSettingsForm implements TemplateComposer {
attributes,
30,
readonly,
+ false,
publishedMessagePanelViewCallback);
viewContexts.add(viewContext);
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/ExamConfigurationService.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/ExamConfigurationService.java
index 15cf8280..6861db84 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/ExamConfigurationService.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/ExamConfigurationService.java
@@ -79,6 +79,7 @@ public interface ExamConfigurationService {
* @param attributeMapping The attribute mapping if the properties page
* @param rows Number of rows supported for the view.
* @param readonly Indicates if the view shall be composed in read-only mode.
+ * @param isTemplate indicates if the view context is related to a configuration template or not
* @return ViewContext instance. */
ViewContext createViewContext(
PageContext pageContext,
@@ -88,7 +89,8 @@ public interface ExamConfigurationService {
AttributeMapping attributeMapping,
int rows,
boolean readonly,
- Runnable valueChageCallback);
+ boolean isTemplate,
+ Runnable valueChangeCallback);
Composite createViewGrid(
Composite parent,
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/AbstractTableFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/AbstractTableFieldBuilder.java
index cb7cb3e6..2e3896fb 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/AbstractTableFieldBuilder.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/AbstractTableFieldBuilder.java
@@ -44,7 +44,7 @@ public abstract class AbstractTableFieldBuilder implements InputFieldBuilder {
private static final Logger log = LoggerFactory.getLogger(AbstractTableFieldBuilder.class);
- private static final int ROW_HEIGHT = 20;
+ private static final int ROW_HEIGHT = 30;
private static final int NAV_HEIGHT = 40;
private static final int TABLE_WIDTH_SPACE = 50;
@@ -65,7 +65,11 @@ public abstract class AbstractTableFieldBuilder implements InputFieldBuilder {
this.inputFieldBuilderSupplier = inputFieldBuilderSupplier;
}
- protected Table createTable(final Composite parent, final TableContext tableContext) {
+ protected Table createTable(
+ final Composite parent,
+ final TableContext tableContext,
+ final boolean isTemplate) {
+
final Table table = new Table(parent, SWT.NONE | SWT.V_SCROLL);
table.setLayout(new GridLayout());
final GridData gridData = new GridData(
@@ -74,7 +78,7 @@ public abstract class AbstractTableFieldBuilder implements InputFieldBuilder {
tableContext.orientation.width(),
tableContext.orientation.height());
- gridData.heightHint = tableContext.orientation.height() * ROW_HEIGHT + NAV_HEIGHT;
+ gridData.heightHint = (isTemplate ? 15 : tableContext.orientation.height()) * ROW_HEIGHT + NAV_HEIGHT;
table.setLayoutData(gridData);
table.setHeaderVisible(true);
table.addListener(SWT.Resize, event -> adaptColumnWidth(table, tableContext));
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CompositeTableFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CompositeTableFieldBuilder.java
index 112b9c77..c372cba9 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CompositeTableFieldBuilder.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/CompositeTableFieldBuilder.java
@@ -78,7 +78,7 @@ public class CompositeTableFieldBuilder extends AbstractTableFieldBuilder {
final I18nSupport i18nSupport = viewContext.getI18nSupport();
final TableContext tableContext = createTableContext(attribute, viewContext);
- final Table table = createTable(parent, tableContext);
+ final Table table = createTable(parent, tableContext, viewContext.isTemplate);
final String resources = attribute.getResources();
final String[] columnsAndRows = StringUtils.split(
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ExamConfigurationServiceImpl.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ExamConfigurationServiceImpl.java
index 6a477e0a..2795eb25 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ExamConfigurationServiceImpl.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ExamConfigurationServiceImpl.java
@@ -184,7 +184,8 @@ public class ExamConfigurationServiceImpl implements ExamConfigurationService {
final AttributeMapping attributeMapping,
final int rows,
final boolean readonly,
- final Runnable valueChageCallback) {
+ final boolean isTemplate,
+ final Runnable valueChangeCallback) {
return new ViewContext(
configuration,
@@ -197,9 +198,10 @@ public class ExamConfigurationServiceImpl implements ExamConfigurationService {
this.restService,
this.jsonMapper,
this.valueChangeRules,
- valueChageCallback),
+ valueChangeCallback),
this.widgetFactory.getI18nSupport(),
- readonly);
+ readonly,
+ isTemplate);
}
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TableFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TableFieldBuilder.java
index baac9047..7c417220 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TableFieldBuilder.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/TableFieldBuilder.java
@@ -76,7 +76,7 @@ public class TableFieldBuilder extends AbstractTableFieldBuilder {
final ViewContext viewContext) {
final TableContext tableContext = createTableContext(attribute, viewContext);
- final Table table = createTable(parent, tableContext);
+ final Table table = createTable(parent, tableContext, viewContext.isTemplate);
for (final ConfigurationAttribute columnAttribute : tableContext.getColumnAttributes()) {
final TableColumn column = this.widgetFactory.tableColumnLocalized(
diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewContext.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewContext.java
index 16702505..53c47ea7 100644
--- a/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewContext.java
+++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/examconfig/impl/ViewContext.java
@@ -48,6 +48,7 @@ public final class ViewContext {
final ValueChangeListener valueChangeListener;
final I18nSupport i18nSupport;
final boolean readonly;
+ final boolean isTemplate;
ViewContext(
final Configuration configuration,
@@ -57,7 +58,8 @@ public final class ViewContext {
final AttributeMapping attributeContext,
final ValueChangeListener valueChangeListener,
final I18nSupport i18nSupport,
- final boolean readonly) {
+ final boolean readonly,
+ final boolean isTemplate) {
Objects.requireNonNull(configuration);
Objects.requireNonNull(view);
@@ -74,6 +76,7 @@ public final class ViewContext {
this.valueChangeListener = valueChangeListener;
this.i18nSupport = i18nSupport;
this.readonly = readonly;
+ this.isTemplate = isTemplate;
}
public boolean isReadonly() {
diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/converter/InlineTableConverter.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/converter/InlineTableConverter.java
index f005df9b..4ec34a6c 100644
--- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/converter/InlineTableConverter.java
+++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/sebconfig/impl/converter/InlineTableConverter.java
@@ -132,7 +132,7 @@ public class InlineTableConverter implements AttributeValueConverter {
value.configurationId,
configurationAttribute.id,
0,
- val[1]);
+ val.length > 1 ? val[1] : null);
if (xml) {
attributeValueConverter.convertToXML(
diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties
index ab231750..36f94456 100644
--- a/src/main/resources/messages.properties
+++ b/src/main/resources/messages.properties
@@ -813,7 +813,8 @@ sebserver.exam.delete.report.list.empty=No dependencies will be deleted.
sebserver.exam.proctoring.actions.open=Proctoring Settings
sebserver.exam.proctoring.form.title=Exam Proctoring Settings
sebserver.exam.proctoring.form.info.title=Remote Proctoring
-sebserver.exam.proctoring.form.sebserver.exam.proctoring.form.enabled=Proctoring enabled
+sebserver.exam.proctoring.form.info=This allows to integrate a supported external proctoring service.
To integrate Jitsi Meet, JWT based authentication must be enabled.
To integrate Zoom a Zoom higher-plan account is needed and also JWT based authentication.
+sebserver.exam.proctoring.form.enabled=Proctoring enabled
sebserver.exam.proctoring.form.enabled.tooltip=Indicates whether the exam proctoring feature is enabled for this exam or not.
sebserver.exam.proctoring.form.type=Type
sebserver.exam.proctoring.form.type.tooltip=The type and server type of the external proctoring service.