diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateAttributeForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateAttributeForm.java index 4c0acc5a..09ac97fd 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateAttributeForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/ConfigTemplateAttributeForm.java @@ -135,8 +135,7 @@ public class ConfigTemplateAttributeForm implements TemplateComposer { final boolean hasView = attribute.getOrientation() != null; - this.pageService.formBuilder( - formContext, 4) + this.pageService.formBuilder(formContext) .readonly(true) // TODO change this for next version .addField(FormBuilder.text( Domain.CONFIGURATION_ATTRIBUTE.ATTR_NAME, @@ -161,12 +160,18 @@ public class ConfigTemplateAttributeForm implements TemplateComposer { attribute.getGroupId())) .build(); + final Composite valSpace = new Composite(content, SWT.NONE); + valSpace.setLayout(new GridLayout()); + valSpace.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); + widgetFactory.labelLocalized( - content, + valSpace, CustomVariant.TEXT_H2, FORM_VALUE_TEXT_KEY); - final Composite grid = new Composite(content, SWT.NONE); + widgetFactory.labelSeparator(valSpace); + + final Composite grid = new Composite(valSpace, SWT.NONE); grid.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); grid.setLayout(new GridLayout(6, true)); @@ -188,7 +193,7 @@ public class ConfigTemplateAttributeForm implements TemplateComposer { defaultOrientation); final InputField createInputField = inputFieldBuilder.createInputField( - content, + grid, attribute.getConfigAttribute(), viewContext); 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 636eb0ad..4d0535ec 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 @@ -141,7 +141,7 @@ public class ConfigTemplateForm implements TemplateComposer { // The SebClientConfig form final FormHandle formHandle = this.pageService.formBuilder( - formContext.copyOf(content), 4) + formContext.copyOf(content)) .readonly(isReadonly) .putStaticValueIf(() -> !isNew, Domain.CONFIGURATION_NODE.ATTR_ID, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamForm.java index c0d9af38..b95ade56 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamForm.java @@ -42,7 +42,6 @@ import ch.ethz.seb.sebserver.gbl.model.exam.ExamConfigurationMap; import ch.ethz.seb.sebserver.gbl.model.exam.Indicator; import ch.ethz.seb.sebserver.gbl.model.exam.QuizData; import ch.ethz.seb.sebserver.gbl.model.institution.LmsSetup.Features; -import ch.ethz.seb.sebserver.gbl.model.institution.LmsSetupTestResult; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; import ch.ethz.seb.sebserver.gbl.profile.GuiProfile; import ch.ethz.seb.sebserver.gbl.util.Result; @@ -71,7 +70,6 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.GetExamConfi import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.GetIndicatorPage; import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.exam.SaveExam; import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.lmssetup.GetLmsSetup; -import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.lmssetup.TestLmsSetup; import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.quiz.GetQuizData; import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.quiz.ImportAsExam; import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.CurrentUser; @@ -379,6 +377,7 @@ public class ExamForm implements TemplateComposer { .withURIVariable(API.PARAM_MODEL_ID, String.valueOf(exam.lmsSetupId)) .call() .getOrThrow().lmsType.name()) + .noEventPropagation() .publishIf(() -> sebRestrictionAvailable && readonly) .newAction(ActionDefinition.EXAM_ENABLE_SEB_RESTRICTION) @@ -394,13 +393,13 @@ public class ExamForm implements TemplateComposer { // additional data in read-only view if (readonly && !importFromQuizData) { - this.widgetFactory.labelSeparator(content); - // List of SEB Configuration + this.widgetFactory.label(content, ""); this.widgetFactory.labelLocalized( content, CustomVariant.TEXT_H3, CONFIG_LIST_TITLE_KEY); + this.widgetFactory.labelSeparator(content); final EntityTable configurationTable = this.pageService.entityTableBuilder(this.restService.getRestCall(GetExamConfigMappingsPage.class)) @@ -481,13 +480,13 @@ public class ExamForm implements TemplateComposer { .noEventPropagation() .publishIf(() -> userGrantCheck.r() && configurationTable.hasAnyContent()); - this.widgetFactory.labelSeparator(content); - // List of Indicators + this.widgetFactory.label(content, ""); this.widgetFactory.labelLocalized( content, CustomVariant.TEXT_H3, INDICATOR_LIST_TITLE_KEY); + this.widgetFactory.labelSeparator(content); final EntityTable indicatorTable = this.pageService.entityTableBuilder(this.restService.getRestCall(GetIndicatorPage.class)) @@ -568,19 +567,12 @@ public class ExamForm implements TemplateComposer { } private boolean testSebRestrictionAPI(final Exam exam) { - final boolean hasFeature = this.restService.getBuilder(GetLmsSetup.class) + return this.restService.getBuilder(GetLmsSetup.class) .withURIVariable(API.PARAM_MODEL_ID, String.valueOf(exam.lmsSetupId)) .call() .onError(t -> log.error("Failed to check SEB restriction API: ", t)) .map(lmsSetup -> lmsSetup.lmsType.features.contains(Features.SEB_RESTICTION)) .getOr(false); - - return hasFeature && this.restService.getBuilder(TestLmsSetup.class) - .withURIVariable(API.PARAM_MODEL_ID, String.valueOf(exam.lmsSetupId)) - .call() - .onError(t -> log.error("Failed to check SEB restriction API: ", t)) - .map(result -> !result.hasError(LmsSetupTestResult.ErrorType.QUIZ_RESTRICTION_API_REQUEST)) - .getOr(false); } private void showConsistencyChecks(final Collection result, final Composite parent) { diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamSebRestrictionSettings.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamSebRestrictionSettings.java index 2cd0ba37..2539daa6 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamSebRestrictionSettings.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamSebRestrictionSettings.java @@ -182,8 +182,8 @@ public class ExamSebRestrictionSettings { .clearEntityKeys(); final FormHandle formHandle = this.pageService.formBuilder( - formContext, 3) - .withDefaultSpanEmptyCell(0) + formContext) + .withDefaultSpanInput(6) .withEmptyCellSeparation(false) .readonly(false) diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamToConfigBindingForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamToConfigBindingForm.java index 4db3ba5d..6da33b40 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamToConfigBindingForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamToConfigBindingForm.java @@ -159,6 +159,10 @@ final class ExamToConfigBindingForm { @Override public Supplier> compose(final Composite parent) { + + final Composite grid = this.pageService.getWidgetFactory() + .createPopupScrollComposite(parent); + final RestService restService = this.pageService.getRestService(); final ResourceService resourceService = this.pageService.getResourceService(); @@ -191,7 +195,7 @@ final class ExamToConfigBindingForm { final PageContext formContext = this.pageContext.withEntityKey(examConfigurationMap.getEntityKey()); final FormHandle formHandle = this.pageService.formBuilder( - formContext.copyOf(parent), 4) + formContext.copyOf(grid)) .readonly(false) .putStaticValueIf(() -> !isNew, Domain.EXAM_CONFIGURATION_MAP.ATTR_ID, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/IndicatorForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/IndicatorForm.java index 4fd8dc67..ba8509cf 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/IndicatorForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/IndicatorForm.java @@ -122,7 +122,7 @@ public class IndicatorForm implements TemplateComposer { titleKey); final FormHandle formHandle = this.pageService.formBuilder( - formContext.copyOf(content), 4) + formContext.copyOf(content)) .readonly(isReadonly) .putStaticValueIf(() -> !isNew, Domain.INDICATOR.ATTR_ID, @@ -156,7 +156,7 @@ public class IndicatorForm implements TemplateComposer { typeDescription) .asArea() .readonly(true) - .withInputSpan(3)) + .withInputSpan(6)) .addField(FormBuilder.colorSelection( Domain.INDICATOR.ATTR_COLOR, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/InstitutionForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/InstitutionForm.java index 6352bf3e..75857063 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/InstitutionForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/InstitutionForm.java @@ -102,7 +102,7 @@ public class InstitutionForm implements TemplateComposer { // The Institution form final FormHandle formHandle = this.pageService.formBuilder( - formContext.copyOf(content), 4) + formContext.copyOf(content)) .readonly(isReadonly) .putStaticValueIf(() -> !isNew, Domain.INSTITUTION.ATTR_ID, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/LmsSetupForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/LmsSetupForm.java index 5fb7d1c4..68236399 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/LmsSetupForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/LmsSetupForm.java @@ -148,8 +148,8 @@ public class LmsSetupForm implements TemplateComposer { final FormHandle formHandle = this.pageService.formBuilder( formContext.copyOf(content), 8) .withDefaultSpanLabel(2) - .withDefaultSpanInput(4) - .withDefaultSpanEmptyCell(2) + .withDefaultSpanInput(5) + .withDefaultSpanEmptyCell(1) .readonly(readonly) .putStaticValueIf(isNotNew, Domain.LMS_SETUP.ATTR_ID, @@ -208,7 +208,7 @@ public class LmsSetupForm implements TemplateComposer { Domain.LMS_SETUP.ATTR_LMS_PROXY_HOST, FORM_PROXY_HOST_KEY, (StringUtils.isNotBlank(lmsSetup.getProxyHost())) ? lmsSetup.getProxyHost() : null) - .withInputSpan(2) + .withInputSpan(3) .withEmptyCellSpan(0)) .addFieldIf( isEdit, @@ -231,7 +231,7 @@ public class LmsSetupForm implements TemplateComposer { Domain.LMS_SETUP.ATTR_LMS_PROXY_AUTH_USERNAME, FORM_PROXY_AUTH_CREDENTIALS_KEY, (lmsSetup.getProxyAuthUsername() != null) ? lmsSetup.getProxyAuthUsername() : null) - .withInputSpan(2) + .withInputSpan(3) .withEmptyCellSpan(0)) .addFieldIf( isEdit, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/QuizDiscoveryList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/QuizDiscoveryList.java index efce13e0..413c8357 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/QuizDiscoveryList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/QuizDiscoveryList.java @@ -286,7 +286,8 @@ public class QuizDiscoveryList implements TemplateComposer { final Composite parent = pc.getParent(); final Composite grid = this.widgetFactory.createPopupScrollComposite(parent); - final FormBuilder formbuilder = this.pageService.formBuilder(pc.copyOf(grid), 3) + final FormBuilder formbuilder = this.pageService.formBuilder(pc.copyOf(grid)) + .withDefaultSpanInput(6) .withEmptyCellSeparation(false) .readonly(true) .addFieldIf( diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientConfigForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientConfigForm.java index 8c96b1eb..ab7e20b9 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientConfigForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientConfigForm.java @@ -123,7 +123,7 @@ public class SebClientConfigForm implements TemplateComposer { // The SebClientConfig form final FormHandle formHandle = this.pageService.formBuilder( - formContext.copyOf(content), 4) + formContext.copyOf(content)) .readonly(isReadonly) .putStaticValueIf(() -> !isNew, Domain.SEB_CLIENT_CONFIGURATION.ATTR_ID, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientLogs.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientLogs.java index 1aa028c8..a165adce 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientLogs.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebClientLogs.java @@ -261,7 +261,8 @@ public class SebClientLogs implements TemplateComposer { CustomVariant.TEXT_H3, DETAILS_EVENT_TILE_TEXT_KEY); - this.pageService.formBuilder(pc.copyOf(content), 3) + this.pageService.formBuilder(pc.copyOf(content)) + .withDefaultSpanInput(6) .withEmptyCellSeparation(false) .readonly(true) .addField(FormBuilder.text( @@ -302,7 +303,8 @@ public class SebClientLogs implements TemplateComposer { error -> log.error("Failed to get ClientConnection for id {}", clientEvent.connectionId, error), () -> ClientConnection.EMPTY_CLIENT_CONNECTION); - this.pageService.formBuilder(pc.copyOf(content), 3) + this.pageService.formBuilder(pc.copyOf(content)) + .withDefaultSpanInput(6) .withEmptyCellSeparation(false) .readonly(true) .addField(FormBuilder.text( @@ -336,7 +338,8 @@ public class SebClientLogs implements TemplateComposer { error -> log.error("Failed to get Exam for id {}", clientEvent.examId, error), () -> Exam.EMPTY_EXAM); - this.pageService.formBuilder(pc.copyOf(content), 3) + this.pageService.formBuilder(pc.copyOf(content)) + .withDefaultSpanInput(6) .withEmptyCellSeparation(false) .readonly(true) .addField(FormBuilder.text( diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigCreationPopup.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigCreationPopup.java index e065bb37..33998111 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigCreationPopup.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigCreationPopup.java @@ -152,9 +152,12 @@ final class SebExamConfigCreationPopup { @Override public Supplier> compose(final Composite parent) { + final Composite grid = this.pageService.getWidgetFactory() + .createPopupScrollComposite(parent); + final EntityKey entityKey = this.pageContext.getEntityKey(); final FormHandle formHandle = this.pageService.formBuilder( - this.pageContext.copyOf(parent), 4) + this.pageContext.copyOf(grid)) .readonly(false) .putStaticValueIf( () -> !this.createFromTemplate, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigImportPopup.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigImportPopup.java index f3ebdce5..261d14f4 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigImportPopup.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigImportPopup.java @@ -225,10 +225,13 @@ final class SebExamConfigImportPopup { @Override public Supplier> compose(final Composite parent) { + final Composite grid = this.pageService.getWidgetFactory() + .createPopupScrollComposite(parent); + final ResourceService resourceService = this.pageService.getResourceService(); final List> examConfigTemplateResources = resourceService.getExamConfigTemplateResources(); final FormHandle formHandle = this.pageService.formBuilder( - this.pageContext.copyOf(parent), 4) + this.pageContext.copyOf(grid)) .readonly(false) .addField(FormBuilder.fileUpload( API.IMPORT_FILE_ATTR_NAME, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigList.java index 1ea19cac..547ad313 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigList.java @@ -149,10 +149,10 @@ public class SebExamConfigList implements TemplateComposer { // configuration template table widgetFactory.label(content, ""); - widgetFactory.labelSeparator(content); widgetFactory.labelLocalizedTitle( content, TITLE_TEMPLATE_TEXT_KEY); + widgetFactory.labelSeparator(content); final EntityTable templateTable = this.pageService.entityTableBuilder(this.restService.getRestCall(GetExamConfigNodePage.class)) diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigPropForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigPropForm.java index b6bff8e2..04b96c4c 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigPropForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigPropForm.java @@ -162,7 +162,7 @@ public class SebExamConfigPropForm implements TemplateComposer { final List> examConfigTemplateResources = resourceService.getExamConfigTemplateResources(); final FormHandle formHandle = this.pageService.formBuilder( - formContext.copyOf(content), 4) + formContext.copyOf(content)) .readonly(isReadonly) .putStaticValueIf(() -> !isNew, Domain.CONFIGURATION_NODE.ATTR_ID, @@ -191,8 +191,7 @@ public class SebExamConfigPropForm implements TemplateComposer { Domain.CONFIGURATION_NODE.ATTR_DESCRIPTION, FORM_DESCRIPTION_TEXT_KEY, examConfig.description) - .asArea() - .withInputSpan((isReadonly) ? 3 : 2)) + .asArea()) .addField(FormBuilder.singleSelection( Domain.CONFIGURATION_NODE.ATTR_STATUS, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountChangePasswordForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountChangePasswordForm.java index ee00b517..9aaf7b19 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountChangePasswordForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountChangePasswordForm.java @@ -91,8 +91,7 @@ public class UserAccountChangePasswordForm implements TemplateComposer { final boolean ownAccount = this.currentUser.get().uuid.equals(entityKey.getModelId()); // The Password Change form - final FormHandle formHandle = this.pageService.formBuilder( - pageContext.copyOf(content), 4) + final FormHandle formHandle = this.pageService.formBuilder(pageContext.copyOf(content)) .readonly(false) .putStaticValueIf(() -> entityKey != null, Domain.USER.ATTR_UUID, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountForm.java index deab98a2..294a4203 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/UserAccountForm.java @@ -141,7 +141,7 @@ public class UserAccountForm implements TemplateComposer { // The UserAccount form final FormHandle formHandle = this.pageService.formBuilder( - formContext.copyOf(content), 4) + formContext.copyOf(content)) .readonly(readonly) .putStaticValueIf(isNotNew, Domain.USER.ATTR_UUID, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/UserActivityLogs.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/UserActivityLogs.java index 2310c621..b7ee79a0 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/UserActivityLogs.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/UserActivityLogs.java @@ -223,8 +223,7 @@ public class UserActivityLogs implements TemplateComposer { final ModalInputDialog dialog = new ModalInputDialog<>( action.pageContext().getParent().getShell(), this.widgetFactory); - - //dialog.setDialogHeight(400); + dialog.setLargeDialogWidth(); dialog.open( DETAILS_TITLE_TEXT_KEY, action.pageContext(), @@ -238,7 +237,8 @@ public class UserActivityLogs implements TemplateComposer { final Composite parent = pc.getParent(); final Composite grid = this.widgetFactory.createPopupScrollComposite(parent); - this.pageService.formBuilder(pc.copyOf(grid), 3) + this.pageService.formBuilder(pc.copyOf(grid)) + .withDefaultSpanInput(6) .withEmptyCellSeparation(false) .readonly(true) .addField(FormBuilder.text( diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/form/FormBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/form/FormBuilder.java index dc59e9eb..f55f8ab9 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/form/FormBuilder.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/form/FormBuilder.java @@ -48,8 +48,8 @@ public class FormBuilder { public final Form form; boolean readonly = false; - private int defaultSpanLabel = 1; - private int defaultSpanInput = 2; + private int defaultSpanLabel = 2; + private int defaultSpanInput = 5; private int defaultSpanEmptyCell = 1; private boolean emptyCellSeparation = true; @@ -188,8 +188,10 @@ public class FormBuilder { private void empty(final Composite parent, final int hspan, final int vspan) { final Label empty = new Label(parent, SWT.LEFT); - empty.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, hspan, vspan)); - empty.setText(""); + final GridData gridData = new GridData(SWT.LEFT, SWT.TOP, false, false, hspan, vspan); + gridData.minimumWidth = 0; + gridData.widthHint = 0; + empty.setLayoutData(gridData); } public static CheckboxFieldBuilder checkbox(final String name, final LocTextKey label) { diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/form/SelectionFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/form/SelectionFieldBuilder.java index 8e77c5a6..926a1395 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/form/SelectionFieldBuilder.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/form/SelectionFieldBuilder.java @@ -104,9 +104,11 @@ public final class SelectionFieldBuilder extends FieldBuilder { gridLayout.marginHeight = 0; gridLayout.marginWidth = 0; composite.setLayout(gridLayout); + composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, this.spanInput, 1)); if (StringUtils.isBlank(this.value)) { final Label label = new Label(composite, SWT.NONE); final GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, true); + label.setLayoutData(gridData); label.setText(this.value); } else { @@ -115,7 +117,7 @@ public final class SelectionFieldBuilder extends FieldBuilder { .stream() .filter(tuple -> keys.contains(tuple._1)) .map(tuple -> tuple._1) - .forEach(v -> buildReadonlyLabel(composite, v, 0)); + .forEach(v -> buildReadonlyLabel(composite, v, 1)); } } else { builder.form.putReadonlyField( @@ -128,7 +130,7 @@ public final class SelectionFieldBuilder extends FieldBuilder { private Text buildReadonlyLabel(final Composite composite, final String valueKey, final int hspan) { final Text label = new Text(composite, SWT.READ_ONLY); - final GridData gridData = new GridData(SWT.LEFT, SWT.TOP, true, true, hspan, 1); + final GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, true, hspan, 1); gridData.verticalIndent = 0; gridData.horizontalIndent = 0; label.setLayoutData(gridData); diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/form/TextFieldBuilder.java b/src/main/java/ch/ethz/seb/sebserver/gui/form/TextFieldBuilder.java index 5ae6c531..9b56d961 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/form/TextFieldBuilder.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/form/TextFieldBuilder.java @@ -95,7 +95,7 @@ public final class TextFieldBuilder extends FieldBuilder { final Browser browser = new Browser(fieldGrid, SWT.NONE); final GridData gridData = new GridData(SWT.FILL, SWT.TOP, true, true); gridData.minimumHeight = this.areaMinHeight; - browser.setBackground(new Color(builder.formParent.getDisplay(), new RGB(240, 240, 240))); + browser.setBackground(new Color(builder.formParent.getDisplay(), new RGB(250, 250, 250))); browser.setLayoutData(gridData); if (StringUtils.isNoneBlank(this.value)) { browser.setText(createHTMLText(this.value)); diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java index 48965aaf..ba1b380c 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/PageService.java @@ -181,6 +181,15 @@ public interface PageService { * @param pageAction the PageAction to publish */ void publishAction(final PageAction pageAction); + /** Get a new FormBuilder for the given PageContext + * This FormBuilder uses the standard form grid which has 8 rows (2 title, 5 input and 1 right-space) + * + * @param pageContext the PageContext on that the FormBuilder should work + * @return a FormBuilder instance for the given PageContext and with number of rows */ + default FormBuilder formBuilder(final PageContext pageContext) { + return formBuilder(pageContext, 8); + } + /** Get a new FormBuilder for the given PageContext and with number of rows. * * @param pageContext the PageContext on that the FormBuilder should work diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java index fbf8a402..e9221368 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/PageServiceImpl.java @@ -297,9 +297,15 @@ public class PageServiceImpl implements PageService { .getUISession() .getHttpSession(); - if (action != null && action.definition != null && action.definition.targetState != null) { + if (action != null && + action.fireActionEvent && + action.definition != null && + action.definition.targetState != null) { + final PageState pageState = new PageState(action.definition.targetState, action); - log.debug("Set session PageState: {} : {}", pageState, httpSession.getId()); + if (log.isDebugEnabled()) { + log.debug("Set session PageState: {} : {}", pageState, httpSession.getId()); + } httpSession.setAttribute(ATTR_PAGE_STATE, pageState); } } catch (final Exception e) { diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/session/ClientConnectionDetails.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/session/ClientConnectionDetails.java index c0babfac..71568ca8 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/session/ClientConnectionDetails.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/session/ClientConnectionDetails.java @@ -81,7 +81,7 @@ public class ClientConnectionDetails { this.colorData, NUMBER_OF_NONE_INDICATOR_ROWS); - final FormBuilder formBuilder = this.pageService.formBuilder(pageContext, 4) + final FormBuilder formBuilder = this.pageService.formBuilder(pageContext) .readonly(true) .addField(FormBuilder.text( QuizData.QUIZ_ATTR_NAME, @@ -95,7 +95,7 @@ public class ClientConnectionDetails { Domain.CLIENT_CONNECTION.ATTR_CLIENT_ADDRESS, CONNECTION_ADDRESS_TEXT_KEY, Constants.EMPTY_NOTE)) - .withDefaultSpanInput(1) + .withDefaultSpanInput(3) .addField(FormBuilder.text( Domain.CLIENT_CONNECTION.ATTR_STATUS, CONNECTION_STATUS_TEXT_KEY, diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/widget/FileUploadSelection.java b/src/main/java/ch/ethz/seb/sebserver/gui/widget/FileUploadSelection.java index 61187d3a..411986a6 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/widget/FileUploadSelection.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/widget/FileUploadSelection.java @@ -196,11 +196,6 @@ public class FileUploadSelection extends Composite { } void close() { - try { - this.pOut.flush(); - } catch (final Exception e) { - log.error("Unexpected error while trying to flush: ", e); - } IOUtils.closeQuietly(this.pOut); } } diff --git a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/edx/OpenEdxCourseAccess.java b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/edx/OpenEdxCourseAccess.java index 26521021..4d27b8c4 100644 --- a/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/edx/OpenEdxCourseAccess.java +++ b/src/main/java/ch/ethz/seb/sebserver/webservice/servicelayer/lms/impl/edx/OpenEdxCourseAccess.java @@ -102,49 +102,6 @@ final class OpenEdxCourseAccess extends CourseAccess { return LmsSetupTestResult.ofOkay(); } -// -// Result getQuizFromCache(final String id) { -// return Result.tryCatch(() -> { -// return this.allQuizzesSupplier -// .getChached() -// .stream() -// .filter(qd -> id.equals(qd.id)) -// .findFirst() -// .orElseThrow(() -> new NoSuchElementException("No cached quiz: " + id)); -// }); -// } -// -// Result>> getQuizzesFromCache(final Set ids) { -// return Result.tryCatch(() -> { -// final List cached = this.allQuizzesSupplier.getChached(); -// if (cached == null) { -// throw new RuntimeException("No cached quizzes"); -// } -// -// final Map cacheMapping = cached -// .stream() -// .collect(Collectors.toMap(q -> q.id, Function.identity())); -// -// if (!cacheMapping.keySet().containsAll(ids)) { -// throw new RuntimeException("Not all requested quizzes cached"); -// } -// -// return ids -// .stream() -// .map(id -> { -// final QuizData q = cacheMapping.get(id); -// return (q == null) -// ? Result. ofError(new NoSuchElementException("Quiz with id: " + id)) -// : Result.of(q); -// }) -// .collect(Collectors.toList()); -// }); -// } - -// Result> getQuizzes(final FilterMap filterMap) { -// return this.allQuizzesSupplier.get() -// .map(LmsAPIService.quizzesFilterFunction(filterMap)); -// } @Override protected Supplier> allQuizzesSupplier() {