diff --git a/src/main/java/ch/ethz/seb/sebserver/gbl/util/Utils.java b/src/main/java/ch/ethz/seb/sebserver/gbl/util/Utils.java index 4232834d..b2aeab9c 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gbl/util/Utils.java +++ b/src/main/java/ch/ethz/seb/sebserver/gbl/util/Utils.java @@ -59,6 +59,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import ch.ethz.seb.sebserver.gbl.Constants; import ch.ethz.seb.sebserver.gbl.api.JSONMapper; +import ch.ethz.seb.sebserver.gui.service.i18n.LocTextKey; public final class Utils { @@ -853,4 +854,8 @@ public final class Utils { return enumInst.name(); } + public static LocTextKey createFilterTooltipKey(final LocTextKey key) { + return new LocTextKey(key.name + ".filter" + Constants.TOOLTIP_TEXT_KEY_SUFFIX); + } + } diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/InstitutionList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/InstitutionList.java index 24f3053e..ef355cf4 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/InstitutionList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/InstitutionList.java @@ -19,6 +19,7 @@ import ch.ethz.seb.sebserver.gbl.model.Domain; import ch.ethz.seb.sebserver.gbl.model.Entity; import ch.ethz.seb.sebserver.gbl.model.institution.Institution; 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.i18n.LocTextKey; import ch.ethz.seb.sebserver.gui.service.page.PageContext; @@ -53,10 +54,14 @@ public class InstitutionList implements TemplateComposer { private static final LocTextKey EMPTY_SELECTION_TEXT_KEY = new LocTextKey("sebserver.institution.info.pleaseSelect"); - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, Entity.FILTER_ATTR_NAME); - private final TableFilterAttribute urlSuffixFilter = - new TableFilterAttribute(CriteriaType.TEXT, Institution.FILTER_ATTR_URL_SUFFIX); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Entity.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(NAME_TEXT_KEY)); + private final TableFilterAttribute urlSuffixFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Institution.FILTER_ATTR_URL_SUFFIX, + Utils.createFilterTooltipKey(URL_TEXT_KEY)); private final TableFilterAttribute activityFilter; private final PageService pageService; @@ -77,7 +82,8 @@ public class InstitutionList implements TemplateComposer { CriteriaType.SINGLE_SELECTION, Institution.FILTER_ATTR_ACTIVE, StringUtils.EMPTY, - this.pageService.getResourceService()::activityResources); + this.pageService.getResourceService()::activityResources, + Utils.createFilterTooltipKey(ACTIVE_TEXT_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserAccountList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserAccountList.java index c6032e0b..f466f86f 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserAccountList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserAccountList.java @@ -26,6 +26,7 @@ import ch.ethz.seb.sebserver.gbl.model.Entity; import ch.ethz.seb.sebserver.gbl.model.user.UserInfo; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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.LocTextKey; @@ -77,14 +78,22 @@ public class UserAccountList implements TemplateComposer { // filter attribute models private final TableFilterAttribute institutionFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, Entity.FILTER_ATTR_NAME); - private final TableFilterAttribute surnameFilter = - new TableFilterAttribute(CriteriaType.TEXT, UserInfo.FILTER_ATTR_SURNAME); - private final TableFilterAttribute usernameFilter = - new TableFilterAttribute(CriteriaType.TEXT, UserInfo.FILTER_ATTR_USER_NAME); - private final TableFilterAttribute mailFilter = - new TableFilterAttribute(CriteriaType.TEXT, UserInfo.FILTER_ATTR_EMAIL); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Entity.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(NAME_TEXT_KEY)); + private final TableFilterAttribute surnameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + UserInfo.FILTER_ATTR_SURNAME, + Utils.createFilterTooltipKey(SURNAME_TEXT_KEY)); + private final TableFilterAttribute usernameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + UserInfo.FILTER_ATTR_USER_NAME, + Utils.createFilterTooltipKey(USER_NAME_TEXT_KEY)); + private final TableFilterAttribute mailFilter = new TableFilterAttribute( + CriteriaType.TEXT, + UserInfo.FILTER_ATTR_EMAIL, + Utils.createFilterTooltipKey(MAIL_TEXT_KEY)); private final TableFilterAttribute languageFilter; private final TableFilterAttribute activityFilter; @@ -107,17 +116,20 @@ public class UserAccountList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(INSTITUTION_TEXT_KEY)); this.languageFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, UserInfo.FILTER_ATTR_LANGUAGE, - this.resourceService::languageResources); + this.resourceService::languageResources, + Utils.createFilterTooltipKey(LANG_TEXT_KEY)); this.activityFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, UserInfo.FILTER_ATTR_ACTIVE, - this.resourceService::activityResources); + this.resourceService::activityResources, + Utils.createFilterTooltipKey(ACTIVE_TEXT_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java index cfd870d9..f8b8e259 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/admin/UserActivityLogs.java @@ -97,7 +97,10 @@ public class UserActivityLogs implements TemplateComposer { private final TableFilterAttribute institutionFilter; private final TableFilterAttribute userNameFilter = - new TableFilterAttribute(CriteriaType.TEXT, UserActivityLog.FILTER_ATTR_USER_NAME); + new TableFilterAttribute( + CriteriaType.TEXT, + UserActivityLog.FILTER_ATTR_USER_NAME, + Utils.createFilterTooltipKey(USER_TEXT_KEY)); private final TableFilterAttribute activityFilter; private final TableFilterAttribute entityFilter; @@ -123,17 +126,20 @@ public class UserActivityLogs implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(INSTITUTION_TEXT_KEY)); this.activityFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, UserActivityLog.FILTER_ATTR_ACTIVITY_TYPES, - this.resourceService::userActivityTypeResources); + this.resourceService::userActivityTypeResources, + Utils.createFilterTooltipKey(ACTIVITY_TEXT_KEY)); this.entityFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, UserActivityLog.FILTER_ATTR_ENTITY_TYPES, - this.resourceService::entityTypeResources); + this.resourceService::entityTypeResources, + Utils.createFilterTooltipKey(ENTITY_TYPE_TEXT_KEY)); } @Override @@ -223,9 +229,8 @@ public class UserActivityLogs implements TemplateComposer { .withFilter(new TableFilterAttribute( CriteriaType.DATE_RANGE, UserActivityLog.FILTER_ATTR_FROM_TO, - Utils.toDateTimeUTC(Utils.getMillisecondsNow()) - .minusYears(1) - .toString())) + Utils.toDateTimeUTC(Utils.getMillisecondsNow()).minusYears(1).toString(), + Utils.createFilterTooltipKey(DATE_TEXT_KEY))) .sortable()) .withDefaultAction(t -> actionBuilder diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/CertificateList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/CertificateList.java index cc508c0a..66b35417 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/CertificateList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/CertificateList.java @@ -23,6 +23,7 @@ import ch.ethz.seb.sebserver.gbl.api.EntityType; import ch.ethz.seb.sebserver.gbl.model.EntityKey; import ch.ethz.seb.sebserver.gbl.model.sebconfig.CertificateInfo; 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.i18n.I18nSupport; import ch.ethz.seb.sebserver.gui.service.i18n.LocTextKey; @@ -80,7 +81,8 @@ public class CertificateList implements TemplateComposer { private final TableFilterAttribute aliasFilter = new TableFilterAttribute( CriteriaType.TEXT, - CertificateInfo.FILTER_ATTR_ALIAS); + CertificateInfo.FILTER_ATTR_ALIAS, + Utils.createFilterTooltipKey(ALIAS_TEXT_KEY)); private final PageService pageService; private final RestService restService; diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateForm.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateForm.java index df2c10a7..f7b9f88e 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateForm.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateForm.java @@ -109,10 +109,14 @@ public class ConfigTemplateForm implements TemplateComposer { private final ResourceService resourceService; private final ExamConfigurationService examConfigurationService; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, TemplateAttribute.FILTER_ATTR_NAME); - private final TableFilterAttribute groupFilter = - new TableFilterAttribute(CriteriaType.TEXT, TemplateAttribute.FILTER_ATTR_GROUP); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + TemplateAttribute.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(ATTRIBUTES_LIST_NAME_TEXT_KEY)); + private final TableFilterAttribute groupFilter = new TableFilterAttribute( + CriteriaType.TEXT, + TemplateAttribute.FILTER_ATTR_GROUP, + Utils.createFilterTooltipKey(ATTRIBUTES_LIST_GROUP_TEXT_KEY)); protected ConfigTemplateForm( final PageService pageService, @@ -210,11 +214,13 @@ public class ConfigTemplateForm implements TemplateComposer { final TableFilterAttribute viewFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, TemplateAttribute.FILTER_ATTR_VIEW, - () -> this.resourceService.getViewResources(entityKey.modelId)); + () -> this.resourceService.getViewResources(entityKey.modelId), + Utils.createFilterTooltipKey(ATTRIBUTES_LIST_VIEW_TEXT_KEY)); final TableFilterAttribute typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, TemplateAttribute.FILTER_ATTR_TYPE, - this.resourceService::getAttributeTypeResources); + this.resourceService::getAttributeTypeResources, + Utils.createFilterTooltipKey(ATTRIBUTES_LIST_TYPE_TEXT_KEY)); // TODO move this to an supplier that also can be updated // the follow-up configuration diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateList.java index 1286fa34..f606c64f 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/ConfigTemplateList.java @@ -20,6 +20,7 @@ import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationNode; import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationNode.ConfigurationType; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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.LocTextKey; @@ -65,10 +66,14 @@ public class ConfigTemplateList implements TemplateComposer { private final int pageSize; private final TableFilterAttribute institutionFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, Entity.FILTER_ATTR_NAME); - private final TableFilterAttribute descFilter = - new TableFilterAttribute(CriteriaType.TEXT, ConfigurationNode.FILTER_ATTR_DESCRIPTION); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Entity.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(NAME_TEXT_KEY)); + private final TableFilterAttribute descFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ConfigurationNode.FILTER_ATTR_DESCRIPTION, + Utils.createFilterTooltipKey(DESCRIPTION_TEXT_KEY)); protected ConfigTemplateList( final PageService pageService, @@ -83,7 +88,8 @@ public class ConfigTemplateList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(INSTITUTION_TEXT_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBClientConfigList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBClientConfigList.java index 4c170341..97f22e98 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBClientConfigList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBClientConfigList.java @@ -25,6 +25,7 @@ import ch.ethz.seb.sebserver.gbl.model.sebconfig.SEBClientConfig; import ch.ethz.seb.sebserver.gbl.model.user.UserInfo; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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; @@ -64,15 +65,17 @@ public class SEBClientConfigList implements TemplateComposer { new LocTextKey("sebserver.clientconfig.info.pleaseSelect"); private final TableFilterAttribute institutionFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, Entity.FILTER_ATTR_NAME); - private final TableFilterAttribute dateFilter = - new TableFilterAttribute( - CriteriaType.DATE, - SEBClientConfig.FILTER_ATTR_CREATION_DATE, - DateTime.now(DateTimeZone.UTC) - .minusYears(1) - .toString(Constants.DEFAULT_DATE_TIME_FORMAT)); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Entity.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(NAME_TEXT_KEY)); + private final TableFilterAttribute dateFilter = new TableFilterAttribute( + CriteriaType.DATE, + SEBClientConfig.FILTER_ATTR_CREATION_DATE, + DateTime.now(DateTimeZone.UTC) + .minusYears(1) + .toString(Constants.DEFAULT_DATE_TIME_FORMAT), + new LocTextKey("sebserver.clientconfig.list.column.date.filter.tooltip")); private final TableFilterAttribute activityFilter; private final PageService pageService; @@ -94,12 +97,14 @@ public class SEBClientConfigList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(INSTITUTION_TEXT_KEY)); this.activityFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, UserInfo.FILTER_ATTR_ACTIVE, - this.resourceService::activityResources); + this.resourceService::activityResources, + Utils.createFilterTooltipKey(ACTIVE_TEXT_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBExamConfigList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBExamConfigList.java index 984bc580..6652fac5 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBExamConfigList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/configs/SEBExamConfigList.java @@ -21,6 +21,7 @@ import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationNode; import ch.ethz.seb.sebserver.gbl.model.sebconfig.ConfigurationNode.ConfigurationType; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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.LocTextKey; @@ -63,10 +64,14 @@ public class SEBExamConfigList implements TemplateComposer { new LocTextKey("sebserver.examconfig.info.pleaseSelect"); private final TableFilterAttribute institutionFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, Entity.FILTER_ATTR_NAME); - private final TableFilterAttribute descFilter = - new TableFilterAttribute(CriteriaType.TEXT, ConfigurationNode.FILTER_ATTR_DESCRIPTION); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Entity.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(NAME_TEXT_KEY)); + private final TableFilterAttribute descFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ConfigurationNode.FILTER_ATTR_DESCRIPTION, + Utils.createFilterTooltipKey(DESCRIPTION_TEXT_KEY)); private final TableFilterAttribute statusFilter; private final TableFilterAttribute templateFilter; @@ -99,17 +104,20 @@ public class SEBExamConfigList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(INSTITUTION_TEXT_KEY)); this.statusFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, ConfigurationNode.FILTER_ATTR_STATUS, - this.resourceService::examConfigStatusFilterResources); + this.resourceService::examConfigStatusFilterResources, + Utils.createFilterTooltipKey(STATUS_TEXT_KEY)); this.templateFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, ConfigurationNode.FILTER_ATTR_TEMPLATE_ID, - this.resourceService::getExamConfigTemplateResourcesSelection); + this.resourceService::getExamConfigTemplateResourcesSelection, + Utils.createFilterTooltipKey(TEMPLATE_TEXT_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamList.java index e36488bf..cb6f6512 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamList.java @@ -87,8 +87,10 @@ public class ExamList implements TemplateComposer { private final TableFilterAttribute institutionFilter; private final TableFilterAttribute lmsFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, Domain.EXAM.ATTR_QUIZ_NAME); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Domain.EXAM.ATTR_QUIZ_NAME, + Utils.createFilterTooltipKey(COLUMN_TITLE_NAME_KEY)); private final TableFilterAttribute stateFilter; private final TableFilterAttribute typeFilter; @@ -107,22 +109,26 @@ public class ExamList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(COLUMN_TITLE_INSTITUTION_KEY)); this.lmsFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, LmsSetup.FILTER_ATTR_LMS_SETUP, - this.resourceService::lmsSetupResource); + this.resourceService::lmsSetupResource, + Utils.createFilterTooltipKey(COLUMN_TITLE_LMS_KEY)); this.stateFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Exam.FILTER_ATTR_STATUS, - this.resourceService::localizedExamStatusSelection); + this.resourceService::localizedExamStatusSelection, + Utils.createFilterTooltipKey(COLUMN_TITLE_STATE_KEY)); this.typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Exam.FILTER_ATTR_TYPE, - this.resourceService::examTypeResources); + this.resourceService::examTypeResources, + Utils.createFilterTooltipKey(COLUMN_TITLE_TYPE_KEY)); } @Override @@ -193,7 +199,8 @@ public class ExamList implements TemplateComposer { Domain.EXAM.ATTR_QUIZ_START_TIME, Utils.toDateTimeUTC(Utils.getMillisecondsNow()) .minusYears(1) - .toString())) + .toString(), + new LocTextKey("sebserver.exam.list.column.starttime.filter.tooltip"))) .sortable()) .withColumn(new ColumnDefinition<>( diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamTemplateList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamTemplateList.java index 112f3edc..0ffaddc6 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamTemplateList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/ExamTemplateList.java @@ -22,6 +22,7 @@ import ch.ethz.seb.sebserver.gbl.model.Entity; import ch.ethz.seb.sebserver.gbl.model.exam.ExamTemplate; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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; @@ -74,8 +75,10 @@ public class ExamTemplateList implements TemplateComposer { private final int pageSize; private final TableFilterAttribute institutionFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, ExamTemplate.FILTER_ATTR_NAME); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ExamTemplate.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(COLUMN_TITLE_NAME_KEY)); private final TableFilterAttribute typeFilter; protected ExamTemplateList( @@ -89,12 +92,14 @@ public class ExamTemplateList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(COLUMN_TITLE_INSTITUTION_KEY)); this.typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, ExamTemplate.FILTER_ATTR_EXAM_TYPE, - this.resourceService::examTypeResources); + this.resourceService::examTypeResources, + Utils.createFilterTooltipKey(COLUMN_TITLE_EXAM_TYPE_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/LmsSetupList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/LmsSetupList.java index 0f3c0742..f33866b2 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/LmsSetupList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/LmsSetupList.java @@ -23,6 +23,7 @@ import ch.ethz.seb.sebserver.gbl.model.institution.LmsSetup; import ch.ethz.seb.sebserver.gbl.model.user.UserInfo; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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.LocTextKey; @@ -64,8 +65,10 @@ public class LmsSetupList implements TemplateComposer { new LocTextKey("sebserver.lmssetup.list.title"); private final TableFilterAttribute institutionFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, Entity.FILTER_ATTR_NAME); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + Entity.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(NAME_TEXT_KEY)); private final TableFilterAttribute typeFilter; private final TableFilterAttribute activityFilter; @@ -84,17 +87,20 @@ public class LmsSetupList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(INSTITUTION_TEXT_KEY)); this.typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, LmsSetup.FILTER_ATTR_LMS_TYPE, - this.resourceService::lmsTypeResources); + this.resourceService::lmsTypeResources, + Utils.createFilterTooltipKey(TYPE_TEXT_KEY)); this.activityFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, UserInfo.FILTER_ATTR_ACTIVE, - this.resourceService::activityResources); + this.resourceService::activityResources, + Utils.createFilterTooltipKey(ACTIVITY_TEXT_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/QuizLookupList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/QuizLookupList.java index abcb58d7..e007cf31 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/QuizLookupList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/exam/QuizLookupList.java @@ -110,8 +110,10 @@ public class QuizLookupList implements TemplateComposer { // filter attribute models private final TableFilterAttribute institutionFilter; private final TableFilterAttribute lmsFilter; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, QuizData.FILTER_ATTR_NAME); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + QuizData.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(NAME_TEXT_KEY)); // dependencies private final WidgetFactory widgetFactory; @@ -137,12 +139,14 @@ public class QuizLookupList implements TemplateComposer { this.institutionFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Entity.FILTER_ATTR_INSTITUTION, - this.resourceService::institutionResource); + this.resourceService::institutionResource, + Utils.createFilterTooltipKey(INSTITUTION_TEXT_KEY)); this.lmsFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, LmsSetup.FILTER_ATTR_LMS_SETUP, - this.resourceService::lmsSetupResource); + this.resourceService::lmsSetupResource, + Utils.createFilterTooltipKey(LMS_TEXT_KEY)); } @Override @@ -204,7 +208,8 @@ public class QuizLookupList implements TemplateComposer { .withFilter(new TableFilterAttribute( CriteriaType.DATE, QuizData.FILTER_ATTR_START_TIME, - this.filterStartDate.toString())) + this.filterStartDate.toString(), + Utils.createFilterTooltipKey(START_TIME_TEXT_KEY))) .sortable()) .withColumn(new ColumnDefinition<>( diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExam.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExam.java index 90f56f21..c75675eb 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExam.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExam.java @@ -79,10 +79,14 @@ public class FinishedExam implements TemplateComposer { private static final LocTextKey TABLE_COLUMN_STATUS = new LocTextKey("sebserver.finished.exam.connections.status"); - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, ClientConnection.FILTER_ATTR_SESSION_ID); - private final TableFilterAttribute infoFilter = - new TableFilterAttribute(CriteriaType.TEXT, ClientConnection.ATTR_INFO); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ClientConnection.FILTER_ATTR_SESSION_ID, + Utils.createFilterTooltipKey(TABLE_COLUMN_NAME)); + private final TableFilterAttribute infoFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ClientConnection.ATTR_INFO, + Utils.createFilterTooltipKey(TABLE_COLUMN_INFO)); private final TableFilterAttribute statusFilter; private final PageService pageService; @@ -110,7 +114,8 @@ public class FinishedExam implements TemplateComposer { this.statusFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, ClientConnection.FILTER_ATTR_STATUS, - pageService.getResourceService()::localizedClientConnectionStatusResources); + pageService.getResourceService()::localizedClientConnectionStatusResources, + Utils.createFilterTooltipKey(TABLE_COLUMN_STATUS)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamClientConnection.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamClientConnection.java index 3dadf1cf..f8ab3b9f 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamClientConnection.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamClientConnection.java @@ -109,8 +109,10 @@ public class FinishedExamClientConnection implements TemplateComposer { private final int pageSize; private final TableFilterAttribute typeFilter; - private final TableFilterAttribute textFilter = - new TableFilterAttribute(CriteriaType.TEXT, ClientEvent.FILTER_ATTR_TEXT); + private final TableFilterAttribute textFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ClientEvent.FILTER_ATTR_TEXT, + Utils.createFilterTooltipKey(LIST_COLUMN_TEXT_KEY)); protected FinishedExamClientConnection( final PageService pageService, @@ -130,7 +132,8 @@ public class FinishedExamClientConnection implements TemplateComposer { this.typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Domain.CLIENT_EVENT.ATTR_TYPE, - this.resourceService::clientEventTypeResources); + this.resourceService::clientEventTypeResources, + Utils.createFilterTooltipKey(LIST_COLUMN_TYPE_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamList.java index 976ecf3d..ccf64d96 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/FinishedExamList.java @@ -18,6 +18,7 @@ import ch.ethz.seb.sebserver.gbl.model.exam.Exam; import ch.ethz.seb.sebserver.gbl.model.exam.QuizData; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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.content.exam.ExamList; import ch.ethz.seb.sebserver.gui.service.ResourceService; @@ -55,8 +56,10 @@ public class FinishedExamList implements TemplateComposer { private final static LocTextKey EMPTY_LIST_TEXT_KEY = new LocTextKey("sebserver.finished.exam.list.empty"); - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, QuizData.FILTER_ATTR_NAME); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + QuizData.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(COLUMN_TITLE_NAME_KEY)); private final TableFilterAttribute typeFilter; private final TableFilterAttribute stateFilter; @@ -75,12 +78,14 @@ public class FinishedExamList implements TemplateComposer { this.typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Exam.FILTER_ATTR_TYPE, - this.resourceService::examTypeResources); + this.resourceService::examTypeResources, + Utils.createFilterTooltipKey(COLUMN_TITLE_TYPE_KEY)); this.stateFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Exam.FILTER_ATTR_STATUS, - this.resourceService::localizedFinishedExamStatusSelection); + this.resourceService::localizedFinishedExamStatusSelection, + Utils.createFilterTooltipKey(COLUMN_TITLE_STATE_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringClientConnection.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringClientConnection.java index b0e26b86..9f066cdc 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringClientConnection.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringClientConnection.java @@ -132,8 +132,10 @@ public class MonitoringClientConnection implements TemplateComposer { private final int pageSize; private final TableFilterAttribute typeFilter; - private final TableFilterAttribute textFilter = - new TableFilterAttribute(CriteriaType.TEXT, ClientEvent.FILTER_ATTR_TEXT); + private final TableFilterAttribute textFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ClientEvent.FILTER_ATTR_TEXT, + Utils.createFilterTooltipKey(LIST_COLUMN_TEXT_KEY)); protected MonitoringClientConnection( final ServerPushService serverPushService, @@ -161,7 +163,8 @@ public class MonitoringClientConnection implements TemplateComposer { this.typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Domain.CLIENT_EVENT.ATTR_TYPE, - this.resourceService::clientEventTypeResources); + this.resourceService::clientEventTypeResources, + Utils.createFilterTooltipKey(LIST_COLUMN_TYPE_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringExamSearchPopup.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringExamSearchPopup.java index 30098e10..611245f8 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringExamSearchPopup.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringExamSearchPopup.java @@ -17,6 +17,7 @@ import ch.ethz.seb.sebserver.gbl.model.EntityKey; import ch.ethz.seb.sebserver.gbl.model.session.ClientConnection; import ch.ethz.seb.sebserver.gbl.model.session.ClientConnection.ConnectionStatus; 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.i18n.LocTextKey; import ch.ethz.seb.sebserver.gui.service.page.PageContext; @@ -49,10 +50,14 @@ public class MonitoringExamSearchPopup { private final PageService pageService; - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, ClientConnection.FILTER_ATTR_SESSION_ID); - private final TableFilterAttribute infoFilter = - new TableFilterAttribute(CriteriaType.TEXT, ClientConnection.ATTR_INFO); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ClientConnection.FILTER_ATTR_SESSION_ID, + Utils.createFilterTooltipKey(TABLE_COLUMN_NAME)); + private final TableFilterAttribute infoFilter = new TableFilterAttribute( + CriteriaType.TEXT, + ClientConnection.ATTR_INFO, + Utils.createFilterTooltipKey(TABLE_COLUMN_INFO)); private final TableFilterAttribute statusFilter; protected MonitoringExamSearchPopup(final PageService pageService) { @@ -62,7 +67,8 @@ public class MonitoringExamSearchPopup { CriteriaType.SINGLE_SELECTION, ClientConnection.FILTER_ATTR_STATUS, ConnectionStatus.ACTIVE.name(), - pageService.getResourceService()::localizedClientConnectionStatusResources); + pageService.getResourceService()::localizedClientConnectionStatusResources, + Utils.createFilterTooltipKey(TABLE_COLUMN_STATUS)); } public void show(final PageContext pageContext) { diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringRunningExamList.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringRunningExamList.java index 5ebdcef8..1e752399 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringRunningExamList.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/MonitoringRunningExamList.java @@ -18,6 +18,7 @@ import ch.ethz.seb.sebserver.gbl.model.exam.Exam; import ch.ethz.seb.sebserver.gbl.model.exam.QuizData; import ch.ethz.seb.sebserver.gbl.model.user.UserRole; 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.content.exam.ExamList; import ch.ethz.seb.sebserver.gui.service.ResourceService; @@ -53,8 +54,10 @@ public class MonitoringRunningExamList implements TemplateComposer { private final static LocTextKey EMPTY_LIST_TEXT_KEY = new LocTextKey("sebserver.monitoring.exam.list.empty"); - private final TableFilterAttribute nameFilter = - new TableFilterAttribute(CriteriaType.TEXT, QuizData.FILTER_ATTR_NAME); + private final TableFilterAttribute nameFilter = new TableFilterAttribute( + CriteriaType.TEXT, + QuizData.FILTER_ATTR_NAME, + Utils.createFilterTooltipKey(COLUMN_TITLE_NAME_KEY)); private final TableFilterAttribute typeFilter; private final PageService pageService; @@ -72,7 +75,8 @@ public class MonitoringRunningExamList implements TemplateComposer { this.typeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, Exam.FILTER_ATTR_TYPE, - this.resourceService::examTypeResources); + this.resourceService::examTypeResources, + Utils.createFilterTooltipKey(COLUMN_TITLE_TYPE_KEY)); } @Override diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java index 083dec9d..d9a3d329 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/content/monitoring/SEBClientEvents.java @@ -119,16 +119,19 @@ public class SEBClientEvents implements TemplateComposer { this.examFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, ExtendedClientEvent.FILTER_ATTRIBUTE_EXAM, - this.resourceService::getExamLogSelectionResources); + this.resourceService::getExamLogSelectionResources, + Utils.createFilterTooltipKey(EXAM_TEXT_KEY)); this.clientSessionFilter = new TableFilterAttribute( CriteriaType.TEXT, - ClientConnection.FILTER_ATTR_SESSION_ID); + ClientConnection.FILTER_ATTR_SESSION_ID, + Utils.createFilterTooltipKey(CLIENT_SESSION_TEXT_KEY)); this.eventTypeFilter = new TableFilterAttribute( CriteriaType.SINGLE_SELECTION, ClientEvent.FILTER_ATTR_TYPE, - this.resourceService::clientEventTypeResources); + this.resourceService::clientEventTypeResources, + Utils.createFilterTooltipKey(TYPE_TEXT_KEY)); } @Override @@ -199,7 +202,8 @@ public class SEBClientEvents implements TemplateComposer { ClientEvent.FILTER_ATTR_SERVER_TIME_FROM_TO, Utils.toDateTimeUTC(Utils.getMillisecondsNow()) .minusYears(1) - .toString())) + .toString(), + Utils.createFilterTooltipKey(TIME_TEXT_KEY))) .sortable() .widthProportion(2)) diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/PolyglotPageService.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/PolyglotPageService.java index cdafe5d9..07be5172 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/PolyglotPageService.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/PolyglotPageService.java @@ -13,6 +13,7 @@ import java.util.Locale; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.DateTime; import org.eclipse.swt.widgets.ExpandBar; import org.eclipse.swt.widgets.ExpandItem; import org.eclipse.swt.widgets.Group; @@ -21,11 +22,13 @@ import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; +import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import ch.ethz.seb.sebserver.gui.service.page.PageContext; import ch.ethz.seb.sebserver.gui.widget.ImageUploadSelection; +import ch.ethz.seb.sebserver.gui.widget.Selection; public interface PolyglotPageService { @@ -151,6 +154,12 @@ public interface PolyglotPageService { * @param locTooltipKey the localized text key for the tool-tip to inject */ void injectI18n(TabItem tabItem, LocTextKey locTextKey, LocTextKey locTooltipKey); + void injectI18n(Text textInput, LocTextKey locTextKey, LocTextKey tooltip); + + void injectTooltip(DateTime selector, LocTextKey tooltip); + + void injectTooltip(Selection selector, LocTextKey tooltip); + /** Used to inject a localized tool-tip text within the given Control (Widget) that automatically gets changed on * language change. * diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/impl/PolyglotPageServiceImpl.java b/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/impl/PolyglotPageServiceImpl.java index 5adb881e..1ddf4989 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/impl/PolyglotPageServiceImpl.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/service/i18n/impl/PolyglotPageServiceImpl.java @@ -17,6 +17,7 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.DateTime; import org.eclipse.swt.widgets.ExpandBar; import org.eclipse.swt.widgets.ExpandItem; import org.eclipse.swt.widgets.Group; @@ -26,6 +27,7 @@ import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; +import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.springframework.context.annotation.Lazy; @@ -39,6 +41,7 @@ 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.PageContext; import ch.ethz.seb.sebserver.gui.widget.ImageUploadSelection; +import ch.ethz.seb.sebserver.gui.widget.Selection; /** Service that supports page language change on the fly */ @Lazy @@ -121,8 +124,10 @@ public final class PolyglotPageServiceImpl implements PolyglotPageService { @Override public void injectI18n(final ExpandItem expandItem, final LocTextKey locTextKey) { - expandItem.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); - expandItem.setText(this.i18nSupport.getText(locTextKey)); + if (locTextKey != null) { + expandItem.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); + expandItem.setText(this.i18nSupport.getText(locTextKey)); + } } @Override @@ -153,8 +158,10 @@ public final class PolyglotPageServiceImpl implements PolyglotPageService { @Override public void injectI18n(final TreeItem treeItem, final LocTextKey locTextKey) { - treeItem.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); - treeItem.setText(this.i18nSupport.getText(locTextKey)); + if (locTextKey != null) { + treeItem.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); + treeItem.setText(this.i18nSupport.getText(locTextKey)); + } } @Override @@ -176,8 +183,10 @@ public final class PolyglotPageServiceImpl implements PolyglotPageService { @Override public void injectI18n(final TableColumn tableColumn, final LocTextKey locTextKey, final LocTextKey locTooltipKey) { - tableColumn.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); - tableColumn.setText(this.i18nSupport.getText(locTextKey)); + if (locTextKey != null) { + tableColumn.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); + tableColumn.setText(this.i18nSupport.getText(locTextKey)); + } if (this.i18nSupport.hasText(locTooltipKey)) { tableColumn.setData(POLYGLOT_ITEM_TOOLTIP_DATA_KEY, locTooltipKey); @@ -185,10 +194,39 @@ public final class PolyglotPageServiceImpl implements PolyglotPageService { } } + @Override + public void injectTooltip(final DateTime selector, final LocTextKey locTooltipKey) { + if (this.i18nSupport.hasText(locTooltipKey)) { + selector.setData(POLYGLOT_ITEM_TOOLTIP_DATA_KEY, locTooltipKey); + selector.setToolTipText(Utils.formatLineBreaks(this.i18nSupport.getText(locTooltipKey))); + } + } + + @Override + public void injectTooltip(final Selection selection, final LocTextKey locTooltipKey) { + if (this.i18nSupport.hasText(locTooltipKey)) { + selection.setToolTipText(Utils.formatLineBreaks(this.i18nSupport.getText(locTooltipKey))); + } + } + + @Override + public void injectI18n(final Text textInput, final LocTextKey locTextKey, final LocTextKey locTooltipKey) { + if (locTextKey != null) { + textInput.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); + textInput.setText(this.i18nSupport.getText(locTextKey)); + } + if (this.i18nSupport.hasText(locTooltipKey)) { + textInput.setData(POLYGLOT_ITEM_TOOLTIP_DATA_KEY, locTooltipKey); + textInput.setToolTipText(Utils.formatLineBreaks(this.i18nSupport.getText(locTooltipKey))); + } + } + @Override public void injectI18n(final TabItem tabItem, final LocTextKey locTextKey, final LocTextKey locTooltipKey) { - tabItem.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); - tabItem.setText(this.i18nSupport.getText(locTextKey)); + if (locTextKey != null) { + tabItem.setData(POLYGLOT_ITEM_TEXT_DATA_KEY, locTextKey); + tabItem.setText(this.i18nSupport.getText(locTextKey)); + } if (this.i18nSupport.hasText(locTooltipKey)) { tabItem.setData(POLYGLOT_ITEM_TOOLTIP_DATA_KEY, locTooltipKey); diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/table/ColumnDefinition.java b/src/main/java/ch/ethz/seb/sebserver/gui/table/ColumnDefinition.java index 90275f35..c305513d 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/table/ColumnDefinition.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/table/ColumnDefinition.java @@ -134,51 +134,61 @@ public final class ColumnDefinition { public final String initValue; public final Supplier>> resourceSupplier; public final Function, List>> resourceFunction; + public final LocTextKey tooltip; - public TableFilterAttribute(final CriteriaType type, final String columnName) { - this(type, columnName, "", (Supplier>>) null); + public TableFilterAttribute( + final CriteriaType type, + final String columnName, + final LocTextKey tooltip) { + this(type, columnName, "", (Supplier>>) null, tooltip); } public TableFilterAttribute( final CriteriaType type, final String columnName, - final Supplier>> resourceSupplier) { + final Supplier>> resourceSupplier, + final LocTextKey tooltip) { - this(type, columnName, "", resourceSupplier); - } - - public TableFilterAttribute( - final CriteriaType type, - final String columnName, - final String initValue) { - - this(type, columnName, initValue, (Supplier>>) null); + this(type, columnName, "", resourceSupplier, tooltip); } public TableFilterAttribute( final CriteriaType type, final String columnName, final String initValue, - final Supplier>> resourceSupplier) { + final LocTextKey tooltip) { + + this(type, columnName, initValue, (Supplier>>) null, tooltip); + } + + public TableFilterAttribute( + final CriteriaType type, + final String columnName, + final String initValue, + final Supplier>> resourceSupplier, + final LocTextKey tooltip) { this.type = type; this.columnName = columnName; this.initValue = initValue; this.resourceSupplier = resourceSupplier; this.resourceFunction = null; + this.tooltip = tooltip; } public TableFilterAttribute( final CriteriaType type, final String columnName, final String initValue, - final Function, List>> resourceFunction) { + final Function, List>> resourceFunction, + final LocTextKey tooltip) { this.type = type; this.columnName = columnName; this.initValue = initValue; this.resourceSupplier = null; this.resourceFunction = resourceFunction; + this.tooltip = tooltip; } } diff --git a/src/main/java/ch/ethz/seb/sebserver/gui/table/TableFilter.java b/src/main/java/ch/ethz/seb/sebserver/gui/table/TableFilter.java index 6a9646c5..a7be81f3 100644 --- a/src/main/java/ch/ethz/seb/sebserver/gui/table/TableFilter.java +++ b/src/main/java/ch/ethz/seb/sebserver/gui/table/TableFilter.java @@ -332,6 +332,13 @@ public class TableFilter { TableFilter.this.entityTable.getName() + "_" + this.attribute.columnName, getAriaLabel()); + if (this.attribute.tooltip != null) { + TableFilter.this.entityTable.pageService.getPolyglotPageService().injectI18n( + this.textInput, + null, + this.attribute.tooltip); + } + this.textInput.setLayoutData(gridData); this.textInput.addListener(SWT.KeyUp, event -> { if (event.keyCode == Constants.ENTER.hashCode()) { @@ -395,6 +402,12 @@ public class TableFilter { TableFilter.this.entityTable.getName() + "_" + this.attribute.columnName, TableFilter.this.entityTable.widgetFactory.getI18nSupport().getText(getAriaLabel())); + if (this.attribute.tooltip != null) { + TableFilter.this.entityTable.pageService.getPolyglotPageService().injectTooltip( + this.selector, + this.attribute.tooltip); + } + this.selector .adaptToControl() .setLayoutData(gridData); @@ -454,6 +467,11 @@ public class TableFilter { innerComposite, getAriaLabel(), TableFilter.this.entityTable.getName() + "_" + this.attribute.columnName); + if (this.attribute.tooltip != null) { + TableFilter.this.entityTable.pageService.getPolyglotPageService().injectTooltip( + this.selector, + this.attribute.tooltip); + } this.selector.addListener(SWT.Selection, event -> { TableFilter.this.entityTable.applyFilter(); }); @@ -551,6 +569,11 @@ public class TableFilter { final WidgetFactory wf = TableFilter.this.entityTable.widgetFactory; wf.labelLocalized(this.innerComposite, DATE_FROM_TEXT); this.fromDateSelector = wf.dateSelector(this.innerComposite, getAriaLabel(), testKey); + if (this.attribute.tooltip != null) { + TableFilter.this.entityTable.pageService.getPolyglotPageService().injectTooltip( + this.fromDateSelector, + this.attribute.tooltip); + } this.fromDateSelector.addListener(SWT.Selection, event -> { TableFilter.this.entityTable.applyFilter(); }); @@ -563,6 +586,11 @@ public class TableFilter { wf.labelLocalized(this.innerComposite, DATE_TO_TEXT); this.toDateSelector = wf.dateSelector(this.innerComposite, getAriaLabel(), testKey); + if (this.attribute.tooltip != null) { + TableFilter.this.entityTable.pageService.getPolyglotPageService().injectTooltip( + this.toDateSelector, + this.attribute.tooltip); + } this.toDateSelector.addListener(SWT.Selection, event -> { TableFilter.this.entityTable.applyFilter(); }); diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 8180d282..f8dadeb0 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -173,10 +173,13 @@ sebserver.institution.list.title=Institutions sebserver.institution.list.title.subtitle= sebserver.institution.list.column.name=Name sebserver.institution.list.column.name.tooltip=The name of the institution

Use the filter above to narrow down to a specific name
{0} +sebserver.institution.list.column.name.filter.tooltip=Use the filter to narrow down to a specific name sebserver.institution.list.column.urlSuffix=URL Suffix sebserver.institution.list.column.urlSuffix.tooltip=The URL suffix to the institutional login page

Use the filter above to narrow down to a specific URL suffix
{0} +sebserver.institution.list.column.urlSuffix.filter.tooltip=Use the filter to narrow down to a specific URL suffix sebserver.institution.list.column.active=Status sebserver.institution.list.column.active.tooltip=The activity of the institution

Use the filter above to specify the activity
{0} +sebserver.institution.list.column.active.filter.tooltip=Use the filter to specify the activity sebserver.institution.action.list=Institution sebserver.institution.action.form=Institution @@ -235,17 +238,23 @@ sebserver.useraccount.list.title=User Accounts sebserver.useraccount.list.title.subtitle= sebserver.useraccount.list.column.institution=Institution sebserver.useraccount.list.column.institution.tooltip=The institution of the user account

Use the filter above to specify the institution
{0} +sebserver.useraccount.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.useraccount.list.column.name=First Name sebserver.useraccount.list.column.name.tooltip=The first name of the user

Use the filter above to narrow down to a specific first name
{0} +sebserver.useraccount.list.column.name.filter.tooltip=Use the filter to narrow down to a specific first name sebserver.useraccount.list.column.surname=Surname sebserver.useraccount.list.column.surname.tooltip=The surname of the user

Use the filter above to narrow down to a specific surname
{0} +sebserver.useraccount.list.column.surname.filter.tooltip=Use the filter to narrow down to a specific surname sebserver.useraccount.list.column.username=User Name sebserver.useraccount.list.column.username.tooltip=The internal user name of the user

Use the filter above to narrow down to a specific user name
{0} +sebserver.useraccount.list.column.username.filter.tooltip=Use the filter to narrow down to a specific user name sebserver.useraccount.list.column.email=Mail sebserver.useraccount.list.column.email.tooltip=The e-mail address of the user

Use the filter above to narrow down to a specific e-mail address
{0} +sebserver.useraccount.list.column.email.filter.tooltip=Use the filter to narrow down to a specific e-mail address sebserver.useraccount.list.column.language=Language sebserver.useraccount.list.column.active=Status sebserver.useraccount.list.column.active.tooltip=The status of the user

Use the filter above to specify the status
{0} +sebserver.useraccount.list.column.active.filter.tooltip=Use the filter to specify the status sebserver.useraccount.action.list=User Account sebserver.useraccount.action.form=User Account of {0} @@ -330,12 +339,16 @@ sebserver.lmssetup.list.title=Learning Management System Setups sebserver.lmssetup.list.title.subtitle=List of connection settings to the LMS. sebserver.lmssetup.list.column.institution=Institution sebserver.lmssetup.list.column.institution.tooltip=The institution of the LMS setup

Use the filter above to specify the institution
{0} +sebserver.lmssetup.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.lmssetup.list.column.name=Name sebserver.lmssetup.list.column.name.tooltip=The name of the LMS setup

Use the filter above to narrow down to a specific LMS by name
{0} +sebserver.lmssetup.list.column.name.filter.tooltip=Use the filter to narrow down to a specific LMS by name sebserver.lmssetup.list.column.type=LMS Type sebserver.lmssetup.list.column.type.tooltip=The type of the LMS

Use the filter above to specify the LMS type
{0} +sebserver.lmssetup.list.column.type.filter.tooltip=Use the filter to specify the LMS type sebserver.lmssetup.list.column.active=Status sebserver.lmssetup.list.column.active.tooltip=The status of the LMS Setup

Use the filter above to specify the status
{0} +sebserver.lmssetup.list.column.active.filter.tooltip=Use the filter above to specify the status sebserver.lmssetup.action.list=LMS Setup sebserver.lmssetup.action.form=LMS Setup @@ -411,12 +424,16 @@ sebserver.quizdiscovery.list.title.subtitle=List of exams found in connected LMS sebserver.quizdiscovery.list.empty=No LMS exam can be found. Please adapt the filter or create a new LMS Setup sebserver.quizdiscovery.list.column.institution=Institution sebserver.quizdiscovery.list.column.institution.tooltip=The institution filter

Use the filter above to specify the institution
{0} +sebserver.quizdiscovery.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.quizdiscovery.list.column.lmssetup=LMS sebserver.quizdiscovery.list.column.lmssetup.tooltip=The LMS setup filter

Use the filter above to find all LMS exams of a specific LMS setup
{0} +sebserver.quizdiscovery.list.column.lmssetup.filter.tooltip=Use the filter to find all LMS exams of a specific LMS setup sebserver.quizdiscovery.list.column.name=Name sebserver.quizdiscovery.list.column.name.tooltip=The name of the LMS exam

Use the filter above to narrow down to a specific name
{0} +sebserver.quizdiscovery.list.column.name.filter.tooltip=Use the filter to narrow down to a specific name sebserver.quizdiscovery.list.column.starttime=Start Time {0} sebserver.quizdiscovery.list.column.starttime.tooltip=The start time of the LMS exam

Use the filter above to set a specific from date
{0} +sebserver.quizdiscovery.list.column.starttime.filter.tooltip=Use the filter to set a specific from date sebserver.quizdiscovery.list.column.endtime=End Time {0} sebserver.quizdiscovery.list.column.endtime.tooltip=The end time of the LMS exam

{0} sebserver.quizdiscovery.info.pleaseSelect=At first please select an LMS exam from the list @@ -466,16 +483,22 @@ sebserver.exam.list.title=Exam sebserver.exam.list.title.subtitle= sebserver.exam.list.column.institution=Institution sebserver.exam.list.column.institution.tooltip=The institution of the LMS setup that defines the LMS of the exam

Use the filter above to specify the institution
{0} +sebserver.exam.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.exam.list.column.lmssetup=LMS sebserver.exam.list.column.lmssetup.tooltip=The LMS setup that defines the LMS of the exam

Use the filter above to specify the LMS setup
{0} +sebserver.exam.list.column.lmssetup.filter.tooltip=Use the filter to specify the LMS setup sebserver.exam.list.column.name=Name sebserver.exam.list.column.name.tooltip=The name of the exam

Use the filter above to narrow down to a specific exam name
{0} +sebserver.exam.list.column.name.filter.tooltip=Use the filter to narrow down to a specific exam name sebserver.exam.list.column.starttime=Start Time {0} sebserver.exam.list.column.starttime.tooltip=The start time of the exam

Use the filter above to set a specific from date
{0} +sebserver.exam.list.column.starttime.filter.tooltip=Use the filter to set a specific from date sebserver.exam.list.column.type=Type sebserver.exam.list.column.type.tooltip=The type of the exam

Use the filter above to set a specific exam type
{0} +sebserver.exam.list.column.type.filter.tooltip=Use the filter to set a specific exam type sebserver.exam.list.column.state=Status sebserver.exam.list.column.state.tooltip=The current status of the exam

Use the filter above to set a specific exam status
{0} +sebserver.exam.list.column.state.filter.tooltip=Use the filter to set a specific exam status sebserver.exam.list.empty=No Exam can be found. Please adapt the filter or import one from LMS sebserver.exam.list.modify.out.dated=Finished exams cannot be modified. @@ -841,7 +864,7 @@ sebserver.exam.signaturekey.grantlist.tag.tooltip=The tag name if the security k sebserver.exam.signaturekey.grantlist.pleaseSelect=Please select a security key grant from the list. sebserver.exam.signaturekey.grantlist.delete.confirm=Are you sure to delete this security key grant -sebserver.exam.signaturekey.grant.title=Security Key Grant +sebserver.exam.signaturekey.grant.title=Granted sebserver.exam.signaturekey.grant.key=Granted Key Hash sebserver.exam.signaturekey.grant.tag=Tag Name sebserver.exam.signaturekey.grant.type=Key Type @@ -856,12 +879,16 @@ sebserver.clientconfig.list.title.subtitle= sebserver.clientconfig.list.actions= sebserver.clientconfig.list.column.institution=Institution sebserver.clientconfig.list.column.institution.tooltip=The institution of the connection configuration

Use the filter above to specify the institution
{0} +sebserver.clientconfig.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.clientconfig.list.column.name=Name sebserver.clientconfig.list.column.name.tooltip=The name of the connection configuration

Use the filter above to narrow down to a specific name
{0} +sebserver.clientconfig.list.column.name.filter.tooltip=Use the filter to narrow down to a specific name sebserver.clientconfig.list.column.date=Creation Date {0} sebserver.clientconfig.list.column.date.tooltip=The date when the connection configuration was first created

Use the filter above to specify a from-date
{0} +sebserver.clientconfig.list.column.date.filter.tooltip=Use the filter to specify a from-date sebserver.clientconfig.list.column.active=Status sebserver.clientconfig.list.column.active.tooltip=The status of connection configuration

Use the filter above to specify the status
{0} +sebserver.clientconfig.list.column.active.filter.tooltip=Use the filter to specify the status sebserver.clientconfig.info.pleaseSelect=At first please select a Connection Configuration from the list sebserver.clientconfig.list.action.no.modify.privilege=No Access: A connection configuration from other institution cannot be modified. @@ -948,14 +975,19 @@ sebserver.examconfig.list.title=Exam Configurations sebserver.examconfig.list.title.subtitle= sebserver.examconfig.list.column.institution=Institution sebserver.examconfig.list.column.institution.tooltip=The institution of the SEB exam configuration

Use the filter above to specify the institution
{0} +sebserver.examconfig.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.examconfig.list.column.name=Name sebserver.examconfig.list.column.name.tooltip=The name of the SEB exam configuration

Use the filter above to narrow down to a specific name
{0} +sebserver.examconfig.list.column.name.filter.tooltip=Use the filter to narrow down to a specific name sebserver.examconfig.list.column.description=Description sebserver.examconfig.list.column.description.tooltip=The description of the SEB exam configuration

Use the filter above to find configurations that contain specific words or phrases within the description.
{0} +sebserver.examconfig.list.column.description.filter.tooltip=Use the filter to find configurations that contain specific words or phrases within the description sebserver.examconfig.list.column.status=Status sebserver.examconfig.list.column.status.tooltip=The status of the SEB exam configuration

Use the filter above to specify a status
{0} +sebserver.examconfig.list.column.status.filter.tooltip=Use the filter to specify a status sebserver.examconfig.list.column.template=Template sebserver.examconfig.list.column.template.tooltip=The origin template of the SEB exam configuration

Use the filter above to specify a template
{0} +sebserver.examconfig.list.column.template.filter.tooltip=Use the filter to specify a template sebserver.examconfig.list.actions= @@ -1823,10 +1855,13 @@ sebserver.examtemplate.action.list.new=Add Exam Template sebserver.examtemplate.list.column.institution=Institution sebserver.examtemplate.list.column.institution.tooltip=The institution of the exam template

Use the filter above to specify the institution
{0} +sebserver.examtemplate.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.examtemplate.list.column.name=Name sebserver.examtemplate.list.column.name.tooltip=The name of the exam template

Use the filter above to narrow down to a specific name
{0} +sebserver.examtemplate.list.column.name.filter.tooltip=Use the filter to narrow down to a specific name sebserver.examtemplate.list.column.examType=Exam Type sebserver.examtemplate.list.column.examType.tooltip=The exam type defined by the exam template

Use the filter above to select a specific exam type
{0} +sebserver.examtemplate.list.column.examType.filter.tooltip=Use the filter to select a specific exam type sebserver.examtemplate.list.column.default=Default Template sebserver.examtemplate.list.column.default.tooltip=Indicates the current default exam template for the institution
{0} sebserver.examtemplate.list.column.default.true=Yes @@ -1904,6 +1939,8 @@ sebserver.certificate.info.pleaseSelect=At first please select at least one cert sebserver.certificate.list.empty=There are currently no certificates available sebserver.certificate.list.title=Certificates sebserver.certificate.list.column.alias=Alias +sebserver.certificate.list.column.alias.tooltip=The alias name of the certificate

Use the filter above to narrow down to a alias name
{0} +sebserver.certificate.list.column.alias.filter.tooltip=Use the filter to narrow down to a alias name sebserver.certificate.list.column.validFrom=Valid From sebserver.certificate.list.column.validTo=Valid To sebserver.certificate.list.column.type=Types @@ -1959,8 +1996,10 @@ sebserver.monitoring.exam.list.empty=There are currently no running exams sebserver.monitoring.exam.list.column.name=Name sebserver.monitoring.exam.list.column.name.tooltip=The name of the exam

Use the filter above to narrow down to a specific exam name
{0} +sebserver.monitoring.exam.list.column.name.filter.tooltip=Use the filter to narrow down to a specific exam name sebserver.monitoring.exam.list.column.type=Type sebserver.monitoring.exam.list.column.type.tooltip=The type of the exam

Use the filter above to set a specific exam type
{0} +sebserver.monitoring.exam.list.column.type.filter.tooltip=Use the filter to set a specific exam type sebserver.monitoring.exam.list.column.startTime=Start Time {0} sebserver.monitoring.exam.list.column.startTime.tooltip=The start date and time of the exam

{0} sebserver.monitoring.exam.list.column.endTime=End Time {0} @@ -2046,6 +2085,7 @@ sebserver.monitoring.exam.connection.eventlist.title.tooltip=All events and logs sebserver.monitoring.exam.connection.eventlist.empty=No event found sebserver.monitoring.exam.connection.eventlist.type=Event Type sebserver.monitoring.exam.connection.eventlist.type.tooltip=The type of the log event

Use the filter above to set a specific event type
{0} +sebserver.monitoring.exam.connection.eventlist.type.filter.tooltip=Use the filter to set a specific event type sebserver.monitoring.exam.connection.eventlist.clienttime=Client Time {0} sebserver.monitoring.exam.connection.eventlist.clienttime.tooltip=The time the SEB client has sent within the log event

{0} sebserver.monitoring.exam.connection.eventlist.servertime=Server Time {0} @@ -2053,7 +2093,8 @@ sebserver.monitoring.exam.connection.eventlist.servertime.tooltip=The exact time sebserver.monitoring.exam.connection.eventlist.value=Value sebserver.monitoring.exam.connection.eventlist.value.tooltip=The value of the log event

{0} sebserver.monitoring.exam.connection.eventlist.text=Text -sebserver.monitoring.exam.connection.eventlist.text.tooltip=The text of the log event

{0} +sebserver.monitoring.exam.connection.eventlist.text.tooltip=The text of the log event

Use the filter above to find a specific log message
{0} +sebserver.monitoring.exam.connection.eventlist.text.filter.tooltip=Use the filter to find a specific log message sebserver.monitoring.exam.connection.event.type.UNKNOWN=Unknown sebserver.monitoring.exam.connection.event.type.DEBUG_LOG=Debug Log @@ -2108,10 +2149,13 @@ sebserver.finished.exam.list.empty=There are currently no finished exams sebserver.finished.exam.list.column.name=Name sebserver.finished.exam.list.column.name.tooltip=The name of the exam

Use the filter above to narrow down to a specific exam name
{0} +sebserver.finished.exam.list.column.name.filter.tooltip=Use the filter to narrow down to a specific exam name sebserver.finished.exam.list.column.state=State -sebserver.finished.exam.list.column.state.tooltip=The state of the finished exam

Use the filter above to see only archived or finished exams +sebserver.finished.exam.list.column.state.tooltip=The state of the finished exam

Use the filter above to see only archived or finished exams{0} +sebserver.finished.exam.list.column.state.filter.tooltip=Use the filter to see only archived or finished exams sebserver.finished.exam.list.column.type=Type sebserver.finished.exam.list.column.type.tooltip=The type of the exam

Use the filter above to set a specific exam type
{0} +sebserver.finished.exam.list.column.type.filter.tooltip=Use the filter to set a specific exam type sebserver.finished.exam.list.column.startTime=Start Time {0} sebserver.finished.exam.list.column.startTime.tooltip=The start date and time of the exam

{0} sebserver.finished.exam.list.column.endTime=End Time {0} @@ -2142,6 +2186,7 @@ sebserver.finished.exam.connection.eventlist.title.tooltip=All events and logs s sebserver.finished.exam.connection.eventlist.empty=No event found sebserver.finished.exam.connection.eventlist.type=Event Type sebserver.finished.exam.connection.eventlist.type.tooltip=The type of the log event

Use the filter above to set a specific event type
{0} +sebserver.finished.exam.connection.eventlist.type.filter.tooltip=Use the filter to set a specific event type sebserver.finished.exam.connection.eventlist.clienttime=Client Time {0} sebserver.finished.exam.connection.eventlist.clienttime.tooltip=The time the SEB client has sent within the log event

{0} sebserver.finished.exam.connection.eventlist.servertime=Server Time {0} @@ -2166,14 +2211,19 @@ sebserver.logs.activity.seblogs.details=Show Details sebserver.userlogs.list.title=User Activity Logs sebserver.userlogs.list.column.institution=Institution sebserver.userlogs.list.column.institution.tooltip=The institution of the user activity log

Use the filter above to specify the institution
{0} +sebserver.userlogs.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.userlogs.list.column.user=User sebserver.userlogs.list.column.user.tooltip=The user account of the user activity log

Use the filter above to specify a user account
{0} +sebserver.userlogs.list.column.user.filter.tooltip=Use the filter to specify a user account sebserver.userlogs.list.column.dateTime=Date {0} sebserver.userlogs.list.column.dateTime.tooltip=The date when the user activity log happened

Use the filter above to specify a from- and to-date range
{0} +sebserver.userlogs.list.column.dateTime.filter.tooltip=>Use the filter to specify a from- and to-date range sebserver.userlogs.list.column.activityType=User Activity sebserver.userlogs.list.column.activityType.tooltip=The type of the user activity

Use the filter above to specify an activity type
{0} +sebserver.userlogs.list.column.activityType.filter.tooltip=Use the filter to specify an activity type sebserver.userlogs.list.column.entityType=Domain Type sebserver.userlogs.list.column.entityType.tooltip=The domain type of the user activity

Use the filter above to specify a domain type
{0} +sebserver.userlogs.list.column.entityType.filter.tooltip=Use the filter to specify a domain type sebserver.userlogs.form.user=User sebserver.userlogs.form.user.tooltip=The user account of the user activity log @@ -2207,14 +2257,19 @@ sebserver.seblogs.list.empty=No SEB client logs available. Please adapt or clear sebserver.seblogs.info.pleaseSelect=At first please select a SEB client Log from the list sebserver.seblogs.list.column.institution=Institution sebserver.seblogs.list.column.institution.tooltip=The institution where the exam belongs to

Use the filter above to specify the institution
{0} +sebserver.seblogs.list.column.institution.filter.tooltip=Use the filter to specify the institution sebserver.seblogs.list.column.exam=Exam sebserver.seblogs.list.column.exam.tooltip=The exam of the SEB client logs

Use the filter above to specify an exam
{0} +sebserver.seblogs.list.column.exam.filter.tooltip=Use the filter to specify an exam sebserver.seblogs.list.column.client-session=User Session-ID sebserver.seblogs.list.column.client-session.tooltip=The user or user-session identifier

Use the filter above to narrow down to a user identifier name
{0} +sebserver.seblogs.list.column.client-session.filter.tooltip=Use the filter to narrow down to a user identifier name sebserver.seblogs.list.column.type=Event Type sebserver.seblogs.list.column.type.tooltip=The SEB client log event type

Use the filter above to specify log type
{0} +sebserver.seblogs.list.column.type.filter.tooltip=Use the filter to specify log type sebserver.seblogs.list.column.time=Event Time {0} sebserver.seblogs.list.column.time.tooltip=The SEB client log time

Use the filter above to specify from- and to-date and time
{0} +sebserver.seblogs.list.column.time.filter.tooltip=Use the filter to specify from- and to-date and time sebserver.seblogs.list.column.value=Value sebserver.seblogs.list.column.value.tooltip=The SEB client log value

{0}