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 7407c218..b11ec765 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 @@ -192,14 +192,14 @@ public class SebExamConfigPropForm implements TemplateComposer { FORM_DESCRIPTION_TEXT_KEY, examConfig.description) .asArea() - .withInputSpan(3)) + .withInputSpan((isReadonly) ? 3 : 2)) .addField(FormBuilder.singleSelection( Domain.CONFIGURATION_NODE.ATTR_STATUS, FORM_STATUS_TEXT_KEY, examConfig.status.name(), () -> resourceService.examConfigStatusResources(isAttachedToExam)) - .withEmptyCellSeparation(false)) + .withEmptyCellSeparation((isReadonly) ? false : true)) .buildFor((isNew) ? this.restService.getRestCall(NewExamConfig.class) : this.restService.getRestCall(SaveExamConfig.class)); diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigSettingsForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigSettingsForm.java index d94b36e4..ec77a9af 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigSettingsForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/SebExamConfigSettingsForm.java @@ -11,6 +11,7 @@ package ch.ethz.seb.sebserver.gui.content; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; @@ -144,6 +145,16 @@ public class SebExamConfigSettingsForm implements TemplateComposer { tabItem.setControl(viewGrid); } + // set selection if available + final String viewIndex = pageContext.getAttribute("VIEW_INDEX"); + if (StringUtils.isNotBlank(viewIndex)) { + try { + tabFolder.setSelection(Integer.parseInt(viewIndex)); + } catch (final NumberFormatException e) { + log.warn("Failed to initialize view selection"); + } + } + this.examConfigurationService.initInputFieldValues(configuration.id, viewContexts); final GrantCheck examConfigGrant = this.currentUser.grantCheck(EntityType.CONFIGURATION_NODE); @@ -156,7 +167,9 @@ public class SebExamConfigSettingsForm implements TemplateComposer { .withURIVariable(API.PARAM_MODEL_ID, configuration.getModelId()) .call() .onError(t -> notifyErrorOnSave(t, pageContext)); - return action; + return action.withAttribute( + "VIEW_INDEX", + String.valueOf(tabFolder.getSelectionIndex())); }) .withSuccess(KEY_SAVE_TO_HISTORY_SUCCESS) .ignoreMoveAwayFromEdit() @@ -169,7 +182,9 @@ public class SebExamConfigSettingsForm implements TemplateComposer { .withURIVariable(API.PARAM_MODEL_ID, configuration.getModelId()) .call() .getOrThrow(); - return action; + return action.withAttribute( + "VIEW_INDEX", + String.valueOf(tabFolder.getSelectionIndex())); }) .withSuccess(KEY_UNDO_SUCCESS) .ignoreMoveAwayFromEdit() diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/ResourceService.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/ResourceService.java index 55950fa3..f73ed5ad 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/ResourceService.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/ResourceService.java @@ -294,7 +294,7 @@ public class ResourceService { if (type == null) { return Constants.EMPTY_NOTE; } - return this.i18nSupport.getText(ENTITY_TYPE_PREFIX + type.name()); + return this.i18nSupport.getText(getEntityTypeNameKey(type)); } public String getEntityTypeName(final UserActivityLog userLog) { diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/MultiPageMessageException.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/MultiPageMessageException.java new file mode 100644 index 00000000..332dd4a2 --- /dev/null +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/MultiPageMessageException.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2019 ETH Zürich, Educational Development and Technology (LET) + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + */ + +package ch.ethz.seb.sebserver.gui.service.page; + +import java.util.Collection; + +import ch.ethz.seb.sebserver.gbl.util.Utils; +import ch.ethz.seb.sebserver.gui.service.i18n.LocTextKey; + +public class MultiPageMessageException extends PageMessageException { + + private static final long serialVersionUID = -501071029069528332L; + + private final Collection errors; + + public MultiPageMessageException(final LocTextKey message, final Collection errors) { + super(message, (errors != null && !errors.isEmpty()) ? errors.iterator().next() : null); + this.errors = Utils.immutableCollectionOf(errors); + } + + public Collection getErrors() { + return this.errors; + } + +} 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 bd586ea0..9f2b97a9 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 @@ -43,6 +43,7 @@ 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.i18n.PolyglotPageService; import ch.ethz.seb.sebserver.gui.service.page.ComposerService; +import ch.ethz.seb.sebserver.gui.service.page.MultiPageMessageException; import ch.ethz.seb.sebserver.gui.service.page.PageContext; import ch.ethz.seb.sebserver.gui.service.page.PageMessageException; import ch.ethz.seb.sebserver.gui.service.page.PageService; @@ -268,7 +269,10 @@ public class PageServiceImpl implements PageService { } if (!errors.isEmpty()) { - // TODO notify message for user + final String entityTypeName = this.resourceService.getEntityTypeName(entityType); + throw new MultiPageMessageException( + new LocTextKey(PageContext.GENERIC_ACTIVATE_ERROR_TEXT_KEY, entityTypeName), + errors); } return action;