From 71783cf27808305acd6d3ed874e2bc01b80e5a73 Mon Sep 17 00:00:00 2001 From: anhefti Date: Tue, 3 Sep 2019 14:49:24 +0200 Subject: [PATCH] SEBSERV-79 SEBSERV-66 implementation --- .../seb/sebserver/gui/content/ExamList.java | 4 +- .../seb/sebserver/gui/content/MainPage.java | 2 +- .../gui/content/activity/ActivitiesPane.java | 436 +++++++++++------- .../content/activity/ActivityDefinition.java | 8 +- .../gui/service/page/impl/TODOTemplate.java | 33 -- src/main/resources/messages.properties | 9 +- 6 files changed, 285 insertions(+), 207 deletions(-) delete mode 100644 src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/TODOTemplate.java diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamList.java index 52526901..d4784d21 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/ExamList.java @@ -211,9 +211,9 @@ public class ExamList implements TemplateComposer { throw new PageMessageException(EMPTY_SELECTION_TEXT_KEY); } - if (exam.startTime != null) { + if (exam.endTime != null) { final DateTime now = DateTime.now(DateTimeZone.UTC); - if (exam.startTime.isBefore(now)) { + if (exam.endTime.isBefore(now)) { throw new PageMessageException(NO_MODIFY_OF_OUT_DATED_EXAMS); } } diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/MainPage.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/MainPage.java index 3260232d..0ef38963 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/MainPage.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/MainPage.java @@ -42,7 +42,7 @@ public class MainPage implements TemplateComposer { static final Logger log = LoggerFactory.getLogger(MainPage.class); - private static final int ACTIVITY_PANE_WEIGHT = 15; + private static final int ACTIVITY_PANE_WEIGHT = 18; private static final int CONTENT_PANE_WEIGHT = 65; private static final int ACTION_PANE_WEIGHT = 20; private static final int[] DEFAULT_SASH_WEIGHTS = new int[] { diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivitiesPane.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivitiesPane.java index 988e3734..bcc26c8a 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivitiesPane.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivitiesPane.java @@ -8,7 +8,8 @@ package ch.ethz.seb.sebserver.gui.content.activity; -import org.eclipse.rap.rwt.RWT; +import org.apache.commons.lang3.ArrayUtils; +import org.apache.commons.lang3.BooleanUtils; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Event; @@ -20,7 +21,6 @@ import org.springframework.stereotype.Component; import ch.ethz.seb.sebserver.gbl.api.EntityType; import ch.ethz.seb.sebserver.gbl.api.authorization.PrivilegeType; -import ch.ethz.seb.sebserver.gbl.model.EntityKey; import ch.ethz.seb.sebserver.gbl.model.user.UserInfo; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; import ch.ethz.seb.sebserver.gui.content.action.ActionDefinition; @@ -44,6 +44,8 @@ import ch.ethz.seb.sebserver.gui.widget.WidgetFactory.CustomVariant; @Component public class ActivitiesPane implements TemplateComposer { + private static final String SKIP_EXPAND = "SKIP_EXPAND"; + private static final String ATTR_ACTIVITY_SELECTION = "ACTIVITY_SELECTION"; private final WidgetFactory widgetFactory; @@ -81,12 +83,20 @@ public class ActivitiesPane implements TemplateComposer { final PageActionBuilder actionBuilder = this.pageService.pageActionBuilder(pageContext); + //-------------------------------------------------------------------------------------- + // ---- SEB ADMIN ---------------------------------------------------------------------- + + // SEB Server Administration + final TreeItem sebadmin = this.widgetFactory.treeItemLocalized( + navigation, + ActivityDefinition.SEB_ADMINISTRATION.displayName); + // Institution // If current user has SEB Server Admin role, show the Institution list if (userInfo.hasRole(UserRole.SEB_SERVER_ADMIN)) { // institutions (list) as root final TreeItem institutions = this.widgetFactory.treeItemLocalized( - navigation, + sebadmin, ActivityDefinition.INSTITUTION.displayName); injectActivitySelection( institutions, @@ -97,7 +107,7 @@ public class ActivitiesPane implements TemplateComposer { } else if (userInfo.hasRole(UserRole.INSTITUTIONAL_ADMIN)) { // otherwise show the form of the institution for current user final TreeItem institutions = this.widgetFactory.treeItemLocalized( - navigation, + sebadmin, ActivityDefinition.INSTITUTION.displayName); injectActivitySelection( institutions, @@ -112,7 +122,7 @@ public class ActivitiesPane implements TemplateComposer { if (this.currentUser.get().hasAnyRole(UserRole.SEB_SERVER_ADMIN, UserRole.INSTITUTIONAL_ADMIN)) { final TreeItem userAccounts = this.widgetFactory.treeItemLocalized( - navigation, + sebadmin, ActivityDefinition.USER_ACCOUNT.displayName); injectActivitySelection( userAccounts, @@ -122,7 +132,7 @@ public class ActivitiesPane implements TemplateComposer { } else { // otherwise show the user account form for current user final TreeItem userAccounts = this.widgetFactory.treeItemLocalized( - navigation, + sebadmin, ActivityDefinition.USER_ACCOUNT.displayName); injectActivitySelection( userAccounts, @@ -132,42 +142,27 @@ public class ActivitiesPane implements TemplateComposer { .create()); } - // LMS Setup - if (this.currentUser.hasInstitutionalPrivilege(PrivilegeType.READ, EntityType.LMS_SETUP)) { - final TreeItem lmsSetup = this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.LMS_SETUP.displayName); + // User Activity Logs + final boolean viewUserActivityLogs = this.currentUser.hasInstitutionalPrivilege( + PrivilegeType.READ, + EntityType.USER_ACTIVITY_LOG); + if (viewUserActivityLogs) { + final TreeItem activityLogs = this.widgetFactory.treeItemLocalized( + sebadmin, + ActivityDefinition.USER_ACTIVITY_LOGS.displayName); injectActivitySelection( - lmsSetup, + activityLogs, actionBuilder - .newAction(ActionDefinition.LMS_SETUP_VIEW_LIST) + .newAction(ActionDefinition.LOGS_USER_ACTIVITY_LIST) .create()); } - // Exam (Quiz Discovery) - if (this.currentUser.get().hasAnyRole(UserRole.EXAM_SUPPORTER, UserRole.EXAM_ADMIN) || - this.currentUser.hasInstitutionalPrivilege(PrivilegeType.READ, EntityType.EXAM)) { + sebadmin.setExpanded(true); + // ---- SEB ADMIN ---------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- - // Quiz Discovery - final TreeItem quizDiscovery = this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.QUIZ_DISCOVERY.displayName); - injectActivitySelection( - quizDiscovery, - actionBuilder - .newAction(ActionDefinition.QUIZ_DISCOVERY_VIEW_LIST) - .create()); - - // Exam - final TreeItem exam = this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.EXAM.displayName); - injectActivitySelection( - exam, - actionBuilder - .newAction(ActionDefinition.EXAM_VIEW_LIST) - .create()); - } + //-------------------------------------------------------------------------------------- + // ---- SEB CONFIGURATION -------------------------------------------------------------- // SEB Configurations final boolean clientConfigRead = this.currentUser.hasInstitutionalPrivilege( @@ -177,120 +172,175 @@ public class ActivitiesPane implements TemplateComposer { PrivilegeType.READ, EntityType.CONFIGURATION_NODE); - TreeItem sebConfigs = null; - if (clientConfigRead && examConfigRead) { - sebConfigs = this.widgetFactory.treeItemLocalized( + if (clientConfigRead || examConfigRead) { + final TreeItem sebConfigs = this.widgetFactory.treeItemLocalized( navigation, ActivityDefinition.SEB_CONFIGURATION.displayName); - sebConfigs.setData(RWT.CUSTOM_VARIANT, CustomVariant.ACTIVITY_TREE_SECTION.key); + //sebConfigs.setData(RWT.CUSTOM_VARIANT, CustomVariant.ACTIVITY_TREE_SECTION.key); + // SEB Client Config + if (clientConfigRead) { + final TreeItem clientConfig = (sebConfigs != null) + ? this.widgetFactory.treeItemLocalized( + sebConfigs, + ActivityDefinition.SEB_CLIENT_CONFIG.displayName) + : this.widgetFactory.treeItemLocalized( + navigation, + ActivityDefinition.SEB_CLIENT_CONFIG.displayName); + injectActivitySelection( + clientConfig, + actionBuilder + .newAction(ActionDefinition.SEB_CLIENT_CONFIG_LIST) + .create()); + } + + // SEB Exam Config + if (examConfigRead) { + final TreeItem examConfig = (sebConfigs != null) + ? this.widgetFactory.treeItemLocalized( + sebConfigs, + ActivityDefinition.SEB_EXAM_CONFIG.displayName) + : this.widgetFactory.treeItemLocalized( + navigation, + ActivityDefinition.SEB_EXAM_CONFIG.displayName); + injectActivitySelection( + examConfig, + actionBuilder + .newAction(ActionDefinition.SEB_EXAM_CONFIG_LIST) + .create()); + } + sebConfigs.setExpanded(true); } - // SEB Client Config - if (clientConfigRead) { - final TreeItem clientConfig = (sebConfigs != null) - ? this.widgetFactory.treeItemLocalized( - sebConfigs, - ActivityDefinition.SEB_CLIENT_CONFIG.displayName) - : this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.SEB_CLIENT_CONFIG.displayName); - injectActivitySelection( - clientConfig, - actionBuilder - .newAction(ActionDefinition.SEB_CLIENT_CONFIG_LIST) - .create()); + // ---- SEB CONFIGURATION -------------------------------------------------------------- + //-------------------------------------------------------------------------------------- + + //-------------------------------------------------------------------------------------- + // ---- EXAM ADMINISTRATION ------------------------------------------------------------ + + final boolean lmsRead = this.currentUser.hasInstitutionalPrivilege(PrivilegeType.READ, EntityType.LMS_SETUP); + final boolean examRead = this.currentUser.get().hasAnyRole(UserRole.EXAM_SUPPORTER, UserRole.EXAM_ADMIN) || + this.currentUser.hasInstitutionalPrivilege(PrivilegeType.READ, EntityType.EXAM); + + // Exam Administration + final TreeItem examadmin = this.widgetFactory.treeItemLocalized( + navigation, + ActivityDefinition.EXAM_ADMINISTRATION.displayName); + + if (examRead || lmsRead) { + // LMS Setup + if (lmsRead) { + final TreeItem lmsSetup = this.widgetFactory.treeItemLocalized( + examadmin, + ActivityDefinition.LMS_SETUP.displayName); + injectActivitySelection( + lmsSetup, + actionBuilder + .newAction(ActionDefinition.LMS_SETUP_VIEW_LIST) + .create()); + } + + // Exam (Quiz Discovery) + if (examRead) { + + // Quiz Discovery + final TreeItem quizDiscovery = this.widgetFactory.treeItemLocalized( + examadmin, + ActivityDefinition.QUIZ_DISCOVERY.displayName); + injectActivitySelection( + quizDiscovery, + actionBuilder + .newAction(ActionDefinition.QUIZ_DISCOVERY_VIEW_LIST) + .create()); + + // Exam + final TreeItem exam = this.widgetFactory.treeItemLocalized( + examadmin, + ActivityDefinition.EXAM.displayName); + injectActivitySelection( + exam, + actionBuilder + .newAction(ActionDefinition.EXAM_VIEW_LIST) + .create()); + } + + examadmin.setExpanded(true); } - // SEB Exam Config - if (examConfigRead) { - final TreeItem examConfig = (sebConfigs != null) - ? this.widgetFactory.treeItemLocalized( - sebConfigs, - ActivityDefinition.SEB_EXAM_CONFIG.displayName) - : this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.SEB_EXAM_CONFIG.displayName); - injectActivitySelection( - examConfig, - actionBuilder - .newAction(ActionDefinition.SEB_EXAM_CONFIG_LIST) - .create()); - } + // ---- EXAM ADMINISTRATION ------------------------------------------------------------ + //-------------------------------------------------------------------------------------- - // Monitoring exams - if (this.currentUser.get().hasAnyRole(UserRole.EXAM_SUPPORTER)) { - final TreeItem clientConfig = this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.MONITORING_EXAMS.displayName); - injectActivitySelection( - clientConfig, - actionBuilder - .newAction(ActionDefinition.RUNNING_EXAM_VIEW_LIST) - .create()); - } + //-------------------------------------------------------------------------------------- + // ---- MONITORING --------------------------------------------------------------------- - // Logs - final boolean viewUserActivityLogs = this.currentUser.hasInstitutionalPrivilege( - PrivilegeType.READ, - EntityType.USER_ACTIVITY_LOG); + final boolean isSupporter = this.currentUser.get().hasAnyRole(UserRole.EXAM_SUPPORTER); final boolean viewSebClientLogs = this.currentUser.hasInstitutionalPrivilege( PrivilegeType.READ, EntityType.EXAM) || this.currentUser.get().hasRole(UserRole.EXAM_SUPPORTER); - TreeItem logRoot = null; - if (viewUserActivityLogs && viewSebClientLogs) { - logRoot = this.widgetFactory.treeItemLocalized( + if (isSupporter || viewSebClientLogs) { + // Monitoring + final TreeItem monitoring = this.widgetFactory.treeItemLocalized( navigation, - ActivityDefinition.LOGS.displayName); - logRoot.setData(RWT.CUSTOM_VARIANT, CustomVariant.ACTIVITY_TREE_SECTION.key); + ActivityDefinition.MONITORING.displayName); + + // Monitoring exams + if (isSupporter) { + final TreeItem clientConfig = this.widgetFactory.treeItemLocalized( + monitoring, + ActivityDefinition.MONITORING_EXAMS.displayName); + injectActivitySelection( + clientConfig, + actionBuilder + .newAction(ActionDefinition.RUNNING_EXAM_VIEW_LIST) + .create()); + } + + // SEB Client Logs + if (viewSebClientLogs) { + final TreeItem sebLogs = (monitoring != null) + ? this.widgetFactory.treeItemLocalized( + monitoring, + ActivityDefinition.SEB_CLIENT_LOGS.displayName) + : this.widgetFactory.treeItemLocalized( + navigation, + ActivityDefinition.SEB_CLIENT_LOGS.displayName); + injectActivitySelection( + sebLogs, + actionBuilder + .newAction(ActionDefinition.LOGS_SEB_CLIENT) + .create()); + } + + monitoring.setExpanded(true); } - // User Activity Logs - if (viewUserActivityLogs) { - final TreeItem activityLogs = (logRoot != null) - ? this.widgetFactory.treeItemLocalized( - logRoot, - ActivityDefinition.USER_ACTIVITY_LOGS.displayName) - : this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.USER_ACTIVITY_LOGS.displayName); - injectActivitySelection( - activityLogs, - actionBuilder - .newAction(ActionDefinition.LOGS_USER_ACTIVITY_LIST) - .create()); - } - - // SEB Client Logs - if (viewSebClientLogs) { - final TreeItem sebLogs = (logRoot != null) - ? this.widgetFactory.treeItemLocalized( - logRoot, - ActivityDefinition.SEB_CLIENT_LOGS.displayName) - : this.widgetFactory.treeItemLocalized( - navigation, - ActivityDefinition.SEB_CLIENT_LOGS.displayName); - injectActivitySelection( - sebLogs, - actionBuilder - .newAction(ActionDefinition.LOGS_SEB_CLIENT) - .create()); - } - - // TODO other activities + // ---- MONITORING --------------------------------------------------------------------- + //-------------------------------------------------------------------------------------- // register page listener and initialize navigation data navigation.addListener(SWT.Selection, event -> handleSelection(pageContext, event)); navigation.addListener(SWT.Expand, event -> { + final TreeItem item = (TreeItem) event.item; + selectCurrentItem(navigation, item); + }); + navigation.addListener(SWT.Collapse, event -> { + final Tree tree = (Tree) event.widget; + tree.setData(SKIP_EXPAND, true); + }); + navigation.addListener(SWT.MouseUp, event -> { final Tree tree = (Tree) event.widget; - final TreeItem treeItem = (TreeItem) event.item; final TreeItem[] selection = tree.getSelection(); - if (selection != null && selection.length >= 1 && selection[0].getParentItem() == treeItem) { - tree.setSelection(selection[0]); - //tree.select(selection[0]); + if (ArrayUtils.isNotEmpty(selection)) { + final TreeItem item = selection[0]; + final boolean skipExpand = BooleanUtils.isTrue((Boolean) tree.getData(SKIP_EXPAND)); + if (item.getItemCount() > 0 && !item.getExpanded() && !skipExpand) { + item.setExpanded(true); + handleParentSelection(tree, item); + } } + tree.setData(SKIP_EXPAND, false); }); navigation.setData( PageEventListener.LISTENER_ATTRIBUTE_KEY, @@ -300,43 +350,58 @@ public class ActivitiesPane implements TemplateComposer { final PageState state = this.pageService.getCurrentState(); if (state == null) { final TreeItem item = navigation.getItem(0); - final PageAction activityAction = getActivitySelection(item); + final TreeItem actionItem = getActionItem(item); + final PageAction activityAction = getActivitySelection(actionItem); this.pageService.executePageAction(activityAction); } else { - final TreeItem item = findItemByActionDefinition(navigation.getItems(), state); + final TreeItem item = findItemByActionDefinition( + navigation.getItems(), + state.activityAnchor()); if (item != null) { navigation.select(item); } } } + private void selectCurrentItem(final Tree navigation, final TreeItem item) { + final PageState currentState = this.pageService.getCurrentState(); + final TreeItem currentItem = findItemByActionDefinition( + item.getItems(), + currentState.activityAnchor()); + if (currentItem != null) { + navigation.select(currentItem); + } + } + private void handleSelection(final PageContext composerCtx, final Event event) { final Tree tree = (Tree) event.widget; final TreeItem treeItem = (TreeItem) event.item; + + if (treeItem.getItemCount() > 0 && !treeItem.getExpanded()) { + return; + } + final PageAction action = getActivitySelection(treeItem); // if there is no form action associated with the treeItem and the treeItem has sub items, toggle the item state if (action == null) { - if (treeItem.getItemCount() > 0) { - treeItem.setExpanded(true); - final PageState currentState = this.pageService.getCurrentState(); - final TreeItem currentSelection = findItemByActionDefinition(tree.getItems(), currentState); - if (currentSelection != null) { - tree.select(currentSelection); - } else { - tree.deselectAll(); - } - } - tree.layout(); + handleParentSelection(tree, treeItem); return; } + + final PageState currentState = this.pageService.getCurrentState(); + if (currentState == action.definition.targetState) { + return; + } + this.pageService.executePageAction( action, result -> { if (result.hasError()) { tree.deselect(treeItem); - final PageState currentState = this.pageService.getCurrentState(); if (currentState != null) { - final TreeItem item = findItemByActionDefinition(tree.getItems(), currentState); + final TreeItem item = findItemByActionDefinition( + tree.getItems(), + currentState.activityAnchor()); if (item != null) { tree.select(item); } @@ -345,10 +410,58 @@ public class ActivitiesPane implements TemplateComposer { }); } + private void handleParentSelection(final Tree tree, final TreeItem treeItem) { + if (treeItem.getItemCount() > 0) { + final PageState currentState = this.pageService.getCurrentState(); + final TreeItem currentSelection = findItemByActionDefinition( + tree.getItems(), + currentState.activityAnchor()); + if (currentSelection != null) { + if (isInSubTree(treeItem, currentSelection)) { + tree.setSelection(currentSelection); + } else { + selectFirstChild(tree, treeItem); + } + } else { + tree.deselectAll(); + } + } + + tree.layout(); + } + + private void selectFirstChild(final Tree tree, final TreeItem treeItem) { + final TreeItem actionItem = ActivitiesPane.getActionItem(treeItem); + final PageAction activitySelection = getActivitySelection(actionItem); + this.pageService.executePageAction(activitySelection, result -> { + if (!result.hasError()) { + tree.setSelection(actionItem); + } + }); + } + + private static final boolean isInSubTree(final TreeItem treeItem, final TreeItem currentSelection) { + if (treeItem == null) { + return false; + } + + final TreeItem[] items = treeItem.getItems(); + if (ArrayUtils.isEmpty(items)) { + return false; + } + + for (final TreeItem item : items) { + if (item == currentSelection) { + return true; + } + } + + return false; + } + private static final TreeItem findItemByActionDefinition( final TreeItem[] items, - final Activity activity, - final String modelId) { + final Activity activity) { if (items == null) { return null; @@ -358,7 +471,7 @@ public class ActivitiesPane implements TemplateComposer { final PageAction action = getActivitySelection(item); if (action == null) { if (item.getItemCount() > 0) { - final TreeItem found = findItemByActionDefinition(item.getItems(), activity, modelId); + final TreeItem found = findItemByActionDefinition(item.getItems(), activity); if (found != null) { return found; } @@ -367,13 +480,11 @@ public class ActivitiesPane implements TemplateComposer { } final Activity activityAnchor = action.definition.targetState.activityAnchor(); - final EntityKey entityKey = action.getEntityKey(); - if (activityAnchor.name().equals(activity.name()) && - (entityKey == null || (modelId != null && modelId.equals(entityKey.modelId)))) { + if (activityAnchor.name().equals(activity.name())) { return item; } - final TreeItem _item = findItemByActionDefinition(item.getItems(), activity, modelId); + final TreeItem _item = findItemByActionDefinition(item.getItems(), activity); if (_item != null) { return _item; } @@ -382,27 +493,23 @@ public class ActivitiesPane implements TemplateComposer { return null; } - static final TreeItem findItemByActionDefinition(final TreeItem[] items, final PageState pageState) { - if (pageState == null) { - return null; - } - return findItemByActionDefinition(items, pageState.activityAnchor(), null); - } - - static final void expand(final TreeItem item) { - if (item == null) { - return; + private static final TreeItem getActionItem(final TreeItem item) { + final PageAction action = (PageAction) item.getData(ATTR_ACTIVITY_SELECTION); + if (action == null && item.getItemCount() > 0) { + final TreeItem firstChild = item.getItem(0); + if (firstChild != null) { + return firstChild; + } } - item.setExpanded(true); - expand(item.getParentItem()); + return item; } - public static PageAction getActivitySelection(final TreeItem item) { + private static final PageAction getActivitySelection(final TreeItem item) { return (PageAction) item.getData(ATTR_ACTIVITY_SELECTION); } - public static void injectActivitySelection(final TreeItem item, final PageAction action) { + private final static void injectActivitySelection(final TreeItem item, final PageAction action) { item.setData(ATTR_ACTIVITY_SELECTION, action); } @@ -415,12 +522,9 @@ public class ActivitiesPane implements TemplateComposer { @Override public void notify(final ActionEvent event) { - final EntityKey entityKey = event.action.getEntityKey(); - final String modelId = (entityKey != null) ? entityKey.modelId : null; final TreeItem item = findItemByActionDefinition( this.navigation.getItems(), - event.action.definition.targetState.activityAnchor(), - modelId); + event.action.definition.targetState.activityAnchor()); if (item != null) { this.navigation.select(item); } diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivityDefinition.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivityDefinition.java index d2f4a8a6..ea29fe86 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivityDefinition.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/activity/ActivityDefinition.java @@ -12,17 +12,19 @@ import ch.ethz.seb.sebserver.gui.service.i18n.LocTextKey; import ch.ethz.seb.sebserver.gui.service.page.Activity; public enum ActivityDefinition implements Activity { + SEB_ADMINISTRATION(new LocTextKey("sebserver.overall.activity.title.serveradmin")), INSTITUTION(new LocTextKey("sebserver.institution.action.list")), USER_ACCOUNT(new LocTextKey("sebserver.useraccount.action.list")), + USER_ACTIVITY_LOGS(new LocTextKey("sebserver.logs.activity.userlogs")), LMS_SETUP(new LocTextKey("sebserver.lmssetup.action.list")), QUIZ_DISCOVERY(new LocTextKey("sebserver.quizdiscovery.action.list")), + EXAM_ADMINISTRATION(new LocTextKey("sebserver.overall.activity.title.examadmin")), EXAM(new LocTextKey("sebserver.exam.action.list")), - SEB_CONFIGURATION(new LocTextKey("sebserver.sebconfig.activity.name")), + SEB_CONFIGURATION(new LocTextKey("sebserver.overall.activity.title.sebconfig")), SEB_CLIENT_CONFIG(new LocTextKey("sebserver.clientconfig.action.list")), SEB_EXAM_CONFIG(new LocTextKey("sebserver.examconfig.action.list")), + MONITORING(new LocTextKey("sebserver.overall.activity.title.monitoring")), MONITORING_EXAMS(new LocTextKey("sebserver.monitoring.action.list")), - LOGS(new LocTextKey("sebserver.logs.activity.main")), - USER_ACTIVITY_LOGS(new LocTextKey("sebserver.logs.activity.userlogs")), SEB_CLIENT_LOGS(new LocTextKey("sebserver.logs.activity.seblogs")); public final LocTextKey displayName; diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/TODOTemplate.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/TODOTemplate.java deleted file mode 100644 index 6605a392..00000000 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/page/impl/TODOTemplate.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2018 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.impl; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Label; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Component; - -import ch.ethz.seb.sebserver.gui.service.page.PageContext; -import ch.ethz.seb.sebserver.gui.service.page.TemplateComposer; - -@Lazy -@Component -public class TODOTemplate implements TemplateComposer { - - @Override - public void compose(final PageContext composerCtx) { - - final Label tree = new Label(composerCtx.getParent(), SWT.NONE); - tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); - tree.setText("[TODO]"); - - } - -} diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index b55b1671..544faed8 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -52,6 +52,11 @@ sebserver.overall.types.entityType.SEB_CLIENT_CONFIGURATION=Client Configuration sebserver.overall.types.entityType.LMS_SETUP=LMS Setup sebserver.overall.types.entityType.USER=User Account +sebserver.overall.activity.title.serveradmin=SEB Server Administration +sebserver.overall.activity.title.sebconfig=SEB Configuration +sebserver.overall.activity.title.examadmin=Exam Administration +sebserver.overall.activity.title.monitoring=Monitoring + ################################ # Form validation and messages ################################ @@ -274,7 +279,7 @@ sebserver.exam.list.column.starttime=Start Time {0} sebserver.exam.list.column.type=Type sebserver.exam.list.empty=No Exams has been found. Please adapt the filter or import one from Quiz -sebserver.exam.list.modify.out.dated=Running or finished exams cannot be modified. +sebserver.exam.list.modify.out.dated=Finished exams cannot be modified. sebserver.exam.list.action.no.modify.privilege=No Access: An Exam from other institution cannot be modified. sebserver.exam.action.list=Exam @@ -915,7 +920,7 @@ sebserver.examconfig.props.validation.WindowsSizeValidator=Invalid number # Monitoring ################################ -sebserver.monitoring.action.list=Monitoring +sebserver.monitoring.action.list=Running Exams sebserver.monitoring.exam.list.title=Running Exams sebserver.monitoring.exam.list.actions=Selected Exam sebserver.monitoring.exam.action.detail.view=Back To Overview