Merge branch 'patch-1.0.2' into development
Conflicts: src/main/java/ch/ethz/seb/sebserver/gui/content/SEBClientLogs.java src/main/java/ch/ethz/seb/sebserver/gui/content/UserActivityLogs.java
This commit is contained in:
commit
376c3dd8c8
11 changed files with 230 additions and 25 deletions
|
@ -252,7 +252,7 @@ public class ConfigTemplateForm implements TemplateComposer {
|
||||||
attrTable::getSelection,
|
attrTable::getSelection,
|
||||||
PageAction::applySingleSelectionAsEntityKey,
|
PageAction::applySingleSelectionAsEntityKey,
|
||||||
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> attrTable.hasAnyContent() && modifyGrant, false)
|
.publishIf(() -> modifyGrant, false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_SET_DEFAULT)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_SET_DEFAULT)
|
||||||
.withParentEntityKey(entityKey)
|
.withParentEntityKey(entityKey)
|
||||||
|
@ -261,7 +261,7 @@ public class ConfigTemplateForm implements TemplateComposer {
|
||||||
action -> this.resetToDefaults(action, attrTable),
|
action -> this.resetToDefaults(action, attrTable),
|
||||||
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
||||||
.noEventPropagation()
|
.noEventPropagation()
|
||||||
.publishIf(() -> attrTable.hasAnyContent() && modifyGrant, false)
|
.publishIf(() -> modifyGrant, false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_LIST_REMOVE_VIEW)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_LIST_REMOVE_VIEW)
|
||||||
.withParentEntityKey(entityKey)
|
.withParentEntityKey(entityKey)
|
||||||
|
@ -270,7 +270,7 @@ public class ConfigTemplateForm implements TemplateComposer {
|
||||||
action -> this.removeFormView(action, attrTable),
|
action -> this.removeFormView(action, attrTable),
|
||||||
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
||||||
.noEventPropagation()
|
.noEventPropagation()
|
||||||
.publishIf(() -> attrTable.hasAnyContent() && modifyGrant, false)
|
.publishIf(() -> modifyGrant, false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_LIST_ATTACH_DEFAULT_VIEW)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_ATTR_LIST_ATTACH_DEFAULT_VIEW)
|
||||||
.withParentEntityKey(entityKey)
|
.withParentEntityKey(entityKey)
|
||||||
|
@ -279,7 +279,7 @@ public class ConfigTemplateForm implements TemplateComposer {
|
||||||
action -> this.attachView(action, attrTable),
|
action -> this.attachView(action, attrTable),
|
||||||
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
EMPTY_ATTRIBUTE_SELECTION_TEXT_KEY)
|
||||||
.noEventPropagation()
|
.noEventPropagation()
|
||||||
.publishIf(() -> attrTable.hasAnyContent() && modifyGrant, false);
|
.publishIf(() -> modifyGrant, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
pageActionBuilder
|
pageActionBuilder
|
||||||
|
|
|
@ -146,12 +146,12 @@ public class ConfigTemplateList implements TemplateComposer {
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_VIEW_FROM_LIST)
|
||||||
.withSelect(templateTable::getSelection, PageAction::applySingleSelectionAsEntityKey,
|
.withSelect(templateTable::getSelection, PageAction::applySingleSelectionAsEntityKey,
|
||||||
EMPTY_TEMPLATE_SELECTION_TEXT_KEY)
|
EMPTY_TEMPLATE_SELECTION_TEXT_KEY)
|
||||||
.publishIf(templateTable::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_MODIFY_FROM_LIST)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_TEMPLATE_MODIFY_FROM_LIST)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
templateTable.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
templateTable.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
||||||
PageAction::applySingleSelectionAsEntityKey, EMPTY_TEMPLATE_SELECTION_TEXT_KEY)
|
PageAction::applySingleSelectionAsEntityKey, EMPTY_TEMPLATE_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> examConfigGrant.im() && templateTable.hasAnyContent(), false);
|
.publishIf(() -> examConfigGrant.im(), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -208,14 +208,14 @@ public class ExamList implements TemplateComposer {
|
||||||
actionBuilder
|
actionBuilder
|
||||||
.newAction(ActionDefinition.EXAM_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.EXAM_VIEW_FROM_LIST)
|
||||||
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(table::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.EXAM_MODIFY_FROM_LIST)
|
.newAction(ActionDefinition.EXAM_MODIFY_FROM_LIST)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
table.getGrantedSelection(currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
table.getGrantedSelection(currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
||||||
action -> modifyExam(action, table),
|
action -> modifyExam(action, table),
|
||||||
EMPTY_SELECTION_TEXT_KEY)
|
EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> userGrant.im() && table.hasAnyContent(), false);
|
.publishIf(() -> userGrant.im(), false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,19 +140,19 @@ public class InstitutionList implements TemplateComposer {
|
||||||
table::getSelection,
|
table::getSelection,
|
||||||
PageAction::applySingleSelectionAsEntityKey,
|
PageAction::applySingleSelectionAsEntityKey,
|
||||||
EMPTY_SELECTION_TEXT_KEY)
|
EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(table::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.INSTITUTION_MODIFY_FROM_LIST)
|
.newAction(ActionDefinition.INSTITUTION_MODIFY_FROM_LIST)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
table::getSelection,
|
table::getSelection,
|
||||||
PageAction::applySingleSelectionAsEntityKey,
|
PageAction::applySingleSelectionAsEntityKey,
|
||||||
EMPTY_SELECTION_TEXT_KEY)
|
EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> instGrant.m() && table.hasAnyContent(), false)
|
.publishIf(() -> instGrant.m(), false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.INSTITUTION_TOGGLE_ACTIVITY)
|
.newAction(ActionDefinition.INSTITUTION_TOGGLE_ACTIVITY)
|
||||||
.withExec(this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY))
|
.withExec(this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY))
|
||||||
.withConfirm(this.pageService.confirmDeactivation(table))
|
.withConfirm(this.pageService.confirmDeactivation(table))
|
||||||
.publishIf(() -> instGrant.m() && table.hasAnyContent(), false);
|
.publishIf(() -> instGrant.m(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,13 +168,13 @@ public class LmsSetupList implements TemplateComposer {
|
||||||
|
|
||||||
.newAction(ActionDefinition.LMS_SETUP_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.LMS_SETUP_VIEW_FROM_LIST)
|
||||||
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(table::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.LMS_SETUP_MODIFY_FROM_LIST)
|
.newAction(ActionDefinition.LMS_SETUP_MODIFY_FROM_LIST)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
table.getGrantedSelection(currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
table.getGrantedSelection(currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
||||||
PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> userGrant.im() && table.hasAnyContent(), false)
|
.publishIf(() -> userGrant.im(), false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.LMS_SETUP_TOGGLE_ACTIVITY)
|
.newAction(ActionDefinition.LMS_SETUP_TOGGLE_ACTIVITY)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
|
@ -185,7 +185,7 @@ public class LmsSetupList implements TemplateComposer {
|
||||||
action -> LmsSetupForm.testLmsSetup(action, null, restService)),
|
action -> LmsSetupForm.testLmsSetup(action, null, restService)),
|
||||||
EMPTY_SELECTION_TEXT_KEY)
|
EMPTY_SELECTION_TEXT_KEY)
|
||||||
.withConfirm(this.pageService.confirmDeactivation(table))
|
.withConfirm(this.pageService.confirmDeactivation(table))
|
||||||
.publishIf(() -> userGrant.iw() && table.hasAnyContent(), false);
|
.publishIf(() -> userGrant.iw(), false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -234,7 +234,7 @@ public class QuizLookupList implements TemplateComposer {
|
||||||
institutionNameFunction),
|
institutionNameFunction),
|
||||||
EMPTY_SELECTION_TEXT)
|
EMPTY_SELECTION_TEXT)
|
||||||
.noEventPropagation()
|
.noEventPropagation()
|
||||||
.publishIf(table::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.QUIZ_DISCOVERY_EXAM_IMPORT)
|
.newAction(ActionDefinition.QUIZ_DISCOVERY_EXAM_IMPORT)
|
||||||
.withConfirm(importQuizConfirm(table, restService))
|
.withConfirm(importQuizConfirm(table, restService))
|
||||||
|
@ -242,7 +242,7 @@ public class QuizLookupList implements TemplateComposer {
|
||||||
table.getGrantedSelection(currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
table.getGrantedSelection(currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
||||||
action -> this.importQuizData(action, table),
|
action -> this.importQuizData(action, table),
|
||||||
EMPTY_SELECTION_TEXT)
|
EMPTY_SELECTION_TEXT)
|
||||||
.publishIf(() -> examGrant.im() && table.hasAnyContent(), false);
|
.publishIf(() -> examGrant.im(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Function<QuizData, String> quizDataLmsSetupNameFunction(final ResourceService resourceService) {
|
private static Function<QuizData, String> quizDataLmsSetupNameFunction(final ResourceService resourceService) {
|
||||||
|
|
|
@ -170,13 +170,13 @@ public class SEBClientConfigList implements TemplateComposer {
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_VIEW_FROM_LIST)
|
||||||
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(table::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_MODIFY_FROM_LIST)
|
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_MODIFY_FROM_LIST)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
table.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
table.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
||||||
PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> clientConfigGrant.im() && table.hasAnyContent(), false)
|
.publishIf(() -> clientConfigGrant.im(), false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_TOGGLE_ACTIVITY)
|
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_TOGGLE_ACTIVITY)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
|
@ -184,7 +184,7 @@ public class SEBClientConfigList implements TemplateComposer {
|
||||||
this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY),
|
this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY),
|
||||||
EMPTY_SELECTION_TEXT_KEY)
|
EMPTY_SELECTION_TEXT_KEY)
|
||||||
.withConfirm(this.pageService.confirmDeactivation(table))
|
.withConfirm(this.pageService.confirmDeactivation(table))
|
||||||
.publishIf(() -> clientConfigGrant.im() && table.hasAnyContent(), false);
|
.publishIf(() -> clientConfigGrant.im(), false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,205 @@
|
||||||
|
/*
|
||||||
|
* 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.content;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
import org.eclipse.swt.widgets.Composite;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import ch.ethz.seb.sebserver.gbl.Constants;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.Domain;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.session.ClientConnection;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.session.ClientEvent;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.session.ExtendedClientEvent;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.util.Utils;
|
||||||
|
import ch.ethz.seb.sebserver.gui.content.action.ActionDefinition;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.ResourceService;
|
||||||
|
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;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.page.PageService.PageActionBuilder;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.page.TemplateComposer;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestService;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.logs.GetExtendedClientEventPage;
|
||||||
|
import ch.ethz.seb.sebserver.gui.table.ColumnDefinition;
|
||||||
|
import ch.ethz.seb.sebserver.gui.table.ColumnDefinition.TableFilterAttribute;
|
||||||
|
import ch.ethz.seb.sebserver.gui.table.EntityTable;
|
||||||
|
import ch.ethz.seb.sebserver.gui.table.TableFilter.CriteriaType;
|
||||||
|
import ch.ethz.seb.sebserver.gui.widget.WidgetFactory;
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
@Component
|
||||||
|
@GuiProfile
|
||||||
|
public class SEBClientLogs implements TemplateComposer {
|
||||||
|
|
||||||
|
private static final LocTextKey TITLE_TEXT_KEY =
|
||||||
|
new LocTextKey("sebserver.seblogs.list.title");
|
||||||
|
private static final LocTextKey EMPTY_TEXT_KEY =
|
||||||
|
new LocTextKey("sebserver.seblogs.list.empty");
|
||||||
|
|
||||||
|
private static final LocTextKey EXAM_TEXT_KEY =
|
||||||
|
new LocTextKey("sebserver.seblogs.list.column.exam");
|
||||||
|
private static final LocTextKey CLIENT_SESSION_TEXT_KEY =
|
||||||
|
new LocTextKey("sebserver.seblogs.list.column.client-session");
|
||||||
|
private static final LocTextKey TYPE_TEXT_KEY =
|
||||||
|
new LocTextKey("sebserver.seblogs.list.column.type");
|
||||||
|
private static final LocTextKey TIME_TEXT_KEY =
|
||||||
|
new LocTextKey("sebserver.seblogs.list.column.time");
|
||||||
|
private static final LocTextKey VALUE_TEXT_KEY =
|
||||||
|
new LocTextKey("sebserver.seblogs.list.column.value");
|
||||||
|
private final static LocTextKey EMPTY_SELECTION_TEXT =
|
||||||
|
new LocTextKey("sebserver.seblogs.info.pleaseSelect");
|
||||||
|
|
||||||
|
private final TableFilterAttribute examFilter;
|
||||||
|
private final TableFilterAttribute clientSessionFilter;
|
||||||
|
private final TableFilterAttribute eventTypeFilter;
|
||||||
|
|
||||||
|
private final PageService pageService;
|
||||||
|
private final ResourceService resourceService;
|
||||||
|
private final RestService restService;
|
||||||
|
private final I18nSupport i18nSupport;
|
||||||
|
private final SEBClientLogDetailsPopup sebClientLogDetailsPopup;
|
||||||
|
private final int pageSize;
|
||||||
|
|
||||||
|
public SEBClientLogs(
|
||||||
|
final PageService pageService,
|
||||||
|
final SEBClientLogDetailsPopup sebClientLogDetailsPopup,
|
||||||
|
@Value("${sebserver.gui.list.page.size:20}") final Integer pageSize) {
|
||||||
|
|
||||||
|
this.pageService = pageService;
|
||||||
|
this.resourceService = pageService.getResourceService();
|
||||||
|
this.restService = this.resourceService.getRestService();
|
||||||
|
this.i18nSupport = this.resourceService.getI18nSupport();
|
||||||
|
this.sebClientLogDetailsPopup = sebClientLogDetailsPopup;
|
||||||
|
this.pageSize = pageSize;
|
||||||
|
|
||||||
|
this.examFilter = new TableFilterAttribute(
|
||||||
|
CriteriaType.SINGLE_SELECTION,
|
||||||
|
ExtendedClientEvent.FILTER_ATTRIBUTE_EXAM,
|
||||||
|
this.resourceService::getExamLogSelectionResources);
|
||||||
|
|
||||||
|
this.clientSessionFilter = new TableFilterAttribute(
|
||||||
|
CriteriaType.TEXT,
|
||||||
|
ClientConnection.FILTER_ATTR_SESSION_ID);
|
||||||
|
|
||||||
|
this.eventTypeFilter = new TableFilterAttribute(
|
||||||
|
CriteriaType.SINGLE_SELECTION,
|
||||||
|
ClientEvent.FILTER_ATTR_TYPE,
|
||||||
|
this.resourceService::clientEventTypeResources);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void compose(final PageContext pageContext) {
|
||||||
|
final WidgetFactory widgetFactory = this.pageService.getWidgetFactory();
|
||||||
|
// content page layout with title
|
||||||
|
final Composite content = widgetFactory.defaultPageLayout(
|
||||||
|
pageContext.getParent(),
|
||||||
|
TITLE_TEXT_KEY);
|
||||||
|
|
||||||
|
final PageActionBuilder actionBuilder = this.pageService.pageActionBuilder(
|
||||||
|
pageContext
|
||||||
|
.clearEntityKeys()
|
||||||
|
.clearAttributes());
|
||||||
|
|
||||||
|
// table
|
||||||
|
final EntityTable<ExtendedClientEvent> table = this.pageService.entityTableBuilder(
|
||||||
|
this.restService.getRestCall(GetExtendedClientEventPage.class))
|
||||||
|
.withEmptyMessage(EMPTY_TEXT_KEY)
|
||||||
|
.withPaging(this.pageSize)
|
||||||
|
|
||||||
|
.withColumn(new ColumnDefinition<>(
|
||||||
|
Domain.CLIENT_CONNECTION.ATTR_EXAM_ID,
|
||||||
|
EXAM_TEXT_KEY,
|
||||||
|
examNameFunction())
|
||||||
|
.withFilter(this.examFilter)
|
||||||
|
.widthProportion(2))
|
||||||
|
|
||||||
|
.withColumn(new ColumnDefinition<>(
|
||||||
|
Domain.CLIENT_CONNECTION.ATTR_EXAM_USER_SESSION_ID,
|
||||||
|
CLIENT_SESSION_TEXT_KEY,
|
||||||
|
ExtendedClientEvent::getUserSessionId)
|
||||||
|
.withFilter(this.clientSessionFilter)
|
||||||
|
.sortable()
|
||||||
|
.widthProportion(2))
|
||||||
|
|
||||||
|
.withColumn(new ColumnDefinition<ExtendedClientEvent>(
|
||||||
|
Domain.CLIENT_EVENT.ATTR_TYPE,
|
||||||
|
TYPE_TEXT_KEY,
|
||||||
|
this.resourceService::getEventTypeName)
|
||||||
|
.withFilter(this.eventTypeFilter)
|
||||||
|
.sortable()
|
||||||
|
.widthProportion(1))
|
||||||
|
|
||||||
|
.withColumn(new ColumnDefinition<>(
|
||||||
|
Domain.CLIENT_EVENT.ATTR_SERVER_TIME,
|
||||||
|
new LocTextKey(
|
||||||
|
TIME_TEXT_KEY.name,
|
||||||
|
this.i18nSupport.getUsersTimeZoneTitleSuffix()),
|
||||||
|
this::getEventTime)
|
||||||
|
.withFilter(new TableFilterAttribute(
|
||||||
|
CriteriaType.DATE_TIME_RANGE,
|
||||||
|
ClientEvent.FILTER_ATTR_SERVER_TIME_FROM_TO,
|
||||||
|
Utils.toDateTimeUTC(Utils.getMillisecondsNow())
|
||||||
|
.minusYears(1)
|
||||||
|
.toString()))
|
||||||
|
.sortable()
|
||||||
|
.widthProportion(2))
|
||||||
|
|
||||||
|
.withColumn(new ColumnDefinition<ExtendedClientEvent>(
|
||||||
|
Domain.CLIENT_EVENT.ATTR_NUMERIC_VALUE,
|
||||||
|
VALUE_TEXT_KEY,
|
||||||
|
clientEvent -> (clientEvent.numValue != null)
|
||||||
|
? String.valueOf(clientEvent.numValue)
|
||||||
|
: Constants.EMPTY_NOTE)
|
||||||
|
.widthProportion(1))
|
||||||
|
|
||||||
|
.withDefaultAction(t -> actionBuilder
|
||||||
|
.newAction(ActionDefinition.LOGS_SEB_CLIENT_SHOW_DETAILS)
|
||||||
|
.withExec(action -> this.sebClientLogDetailsPopup.showDetails(action,
|
||||||
|
t.getSingleSelectedROWData()))
|
||||||
|
.noEventPropagation()
|
||||||
|
.create())
|
||||||
|
|
||||||
|
.withSelectionListener(this.pageService.getSelectionPublisher(
|
||||||
|
pageContext,
|
||||||
|
ActionDefinition.LOGS_SEB_CLIENT_SHOW_DETAILS))
|
||||||
|
|
||||||
|
.compose(pageContext.copyOf(content));
|
||||||
|
|
||||||
|
actionBuilder
|
||||||
|
.newAction(ActionDefinition.LOGS_SEB_CLIENT_SHOW_DETAILS)
|
||||||
|
.withSelect(
|
||||||
|
table::getSelection,
|
||||||
|
action -> this.sebClientLogDetailsPopup.showDetails(action, table.getSingleSelectedROWData()),
|
||||||
|
EMPTY_SELECTION_TEXT)
|
||||||
|
.noEventPropagation()
|
||||||
|
.publish(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Function<ExtendedClientEvent, String> examNameFunction() {
|
||||||
|
final Map<Long, String> examNameMapping = this.resourceService.getExamNameMapping();
|
||||||
|
return event -> examNameMapping.get(event.examId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getEventTime(final ExtendedClientEvent event) {
|
||||||
|
if (event == null || event.serverTime == null) {
|
||||||
|
return Constants.EMPTY_NOTE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.i18nSupport
|
||||||
|
.formatDisplayDateTime(Utils.toDateTimeUTC(event.serverTime));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -339,7 +339,7 @@ public class SEBExamConfigForm implements TemplateComposer {
|
||||||
return pageAction.withEntityKey(
|
return pageAction.withEntityKey(
|
||||||
new EntityKey(selectedExamMapping.examId, EntityType.EXAM));
|
new EntityKey(selectedExamMapping.examId, EntityType.EXAM));
|
||||||
})
|
})
|
||||||
.publishIf(table::hasAnyContent, false);
|
.publish(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -159,13 +159,13 @@ public class SEBExamConfigList implements TemplateComposer {
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_VIEW_PROP_FROM_LIST)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_VIEW_PROP_FROM_LIST)
|
||||||
.withSelect(configTable::getSelection, PageAction::applySingleSelectionAsEntityKey,
|
.withSelect(configTable::getSelection, PageAction::applySingleSelectionAsEntityKey,
|
||||||
EMPTY_SELECTION_TEXT_KEY)
|
EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(configTable::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_MODIFY_PROP_FROM_LIST)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_MODIFY_PROP_FROM_LIST)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
configTable.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
configTable.getGrantedSelection(this.currentUser, NO_MODIFY_PRIVILEGE_ON_OTHER_INSTITUTION),
|
||||||
PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> examConfigGrant.im() && configTable.hasAnyContent(), false)
|
.publishIf(() -> examConfigGrant.im(), false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_IMPORT_TO_NEW_CONFIG)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_IMPORT_TO_NEW_CONFIG)
|
||||||
.withSelect(
|
.withSelect(
|
||||||
|
|
|
@ -222,16 +222,16 @@ public class UserAccountList implements TemplateComposer {
|
||||||
|
|
||||||
.newAction(ActionDefinition.USER_ACCOUNT_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.USER_ACCOUNT_VIEW_FROM_LIST)
|
||||||
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
.withSelect(table::getSelection, PageAction::applySingleSelectionAsEntityKey, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(table::hasAnyContent, false)
|
.publish(false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.USER_ACCOUNT_MODIFY_FROM_LIST)
|
.newAction(ActionDefinition.USER_ACCOUNT_MODIFY_FROM_LIST)
|
||||||
.withSelect(table::getSelection, this::editAction, EMPTY_SELECTION_TEXT_KEY)
|
.withSelect(table::getSelection, this::editAction, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> userGrant.im() && table.hasAnyContent(), false)
|
.publishIf(() -> userGrant.im(), false)
|
||||||
|
|
||||||
.newAction(ActionDefinition.USER_ACCOUNT_TOGGLE_ACTIVITY)
|
.newAction(ActionDefinition.USER_ACCOUNT_TOGGLE_ACTIVITY)
|
||||||
.withExec(this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY))
|
.withExec(this.pageService.activationToggleActionFunction(table, EMPTY_SELECTION_TEXT_KEY))
|
||||||
.withConfirm(this.pageService.confirmDeactivation(table))
|
.withConfirm(this.pageService.confirmDeactivation(table))
|
||||||
.publishIf(() -> userGrant.m() && table.hasAnyContent(), false);
|
.publishIf(() -> userGrant.m(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private PageAction editAction(final PageAction pageAction) {
|
private PageAction editAction(final PageAction pageAction) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue