minor fixes and tables
This commit is contained in:
parent
bbb15bba40
commit
652de887a5
93 changed files with 407 additions and 323 deletions
|
@ -12,6 +12,7 @@ import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
public final class ExamAPIDiscovery {
|
public final class ExamAPIDiscovery {
|
||||||
|
@ -28,11 +29,12 @@ public final class ExamAPIDiscovery {
|
||||||
@JsonProperty("api-versions")
|
@JsonProperty("api-versions")
|
||||||
public final Collection<ExamAPIVersion> versions;
|
public final Collection<ExamAPIVersion> versions;
|
||||||
|
|
||||||
|
@JsonCreator
|
||||||
public ExamAPIDiscovery(
|
public ExamAPIDiscovery(
|
||||||
final String title,
|
@JsonProperty("title") final String title,
|
||||||
final String description,
|
@JsonProperty("description") final String description,
|
||||||
final String serverLocation,
|
@JsonProperty("server-location") final String serverLocation,
|
||||||
final Collection<ExamAPIVersion> versions) {
|
@JsonProperty("api-versions") final Collection<ExamAPIVersion> versions) {
|
||||||
|
|
||||||
this.title = title;
|
this.title = title;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
|
@ -61,9 +63,10 @@ public final class ExamAPIDiscovery {
|
||||||
@JsonProperty("endpoints")
|
@JsonProperty("endpoints")
|
||||||
public final Collection<Endpoint> endpoints;
|
public final Collection<Endpoint> endpoints;
|
||||||
|
|
||||||
|
@JsonCreator
|
||||||
public ExamAPIVersion(
|
public ExamAPIVersion(
|
||||||
final String name,
|
@JsonProperty("name") final String name,
|
||||||
final Collection<Endpoint> endpoints) {
|
@JsonProperty("endpoints") final Collection<Endpoint> endpoints) {
|
||||||
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.endpoints = endpoints;
|
this.endpoints = endpoints;
|
||||||
|
@ -92,9 +95,13 @@ public final class ExamAPIDiscovery {
|
||||||
@JsonProperty("authorization")
|
@JsonProperty("authorization")
|
||||||
public final String authorization;
|
public final String authorization;
|
||||||
|
|
||||||
public Endpoint(final String name, final String descripiton, final String location,
|
@JsonCreator
|
||||||
final String authorization) {
|
public Endpoint(
|
||||||
super();
|
@JsonProperty("name") final String name,
|
||||||
|
@JsonProperty("descripiton") final String descripiton,
|
||||||
|
@JsonProperty("location") final String location,
|
||||||
|
@JsonProperty("authorization") final String authorization) {
|
||||||
|
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.descripiton = descripiton;
|
this.descripiton = descripiton;
|
||||||
this.location = location;
|
this.location = location;
|
||||||
|
|
|
@ -26,8 +26,8 @@ import ch.ethz.seb.sebserver.gbl.api.API;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.Domain;
|
import ch.ethz.seb.sebserver.gbl.model.Domain;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.EntityKey;
|
import ch.ethz.seb.sebserver.gbl.model.EntityKey;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.Exam;
|
import ch.ethz.seb.sebserver.gbl.model.exam.Exam;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.ExamConfigurationMap;
|
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.Exam.ExamStatus;
|
import ch.ethz.seb.sebserver.gbl.model.exam.Exam.ExamStatus;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.exam.ExamConfigurationMap;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator;
|
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.exam.QuizData;
|
import ch.ethz.seb.sebserver.gbl.model.exam.QuizData;
|
||||||
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
import ch.ethz.seb.sebserver.gbl.profile.GuiProfile;
|
||||||
|
@ -283,18 +283,15 @@ public class ExamForm implements TemplateComposer {
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.CONFIGURATION_NODE.ATTR_NAME,
|
Domain.CONFIGURATION_NODE.ATTR_NAME,
|
||||||
CONFIG_NAME_COLUMN_KEY,
|
CONFIG_NAME_COLUMN_KEY,
|
||||||
ExamConfigurationMap::getConfigName,
|
ExamConfigurationMap::getConfigName))
|
||||||
false))
|
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.CONFIGURATION_NODE.ATTR_DESCRIPTION,
|
Domain.CONFIGURATION_NODE.ATTR_DESCRIPTION,
|
||||||
CONFIG_DESCRIPTION_COLUMN_KEY,
|
CONFIG_DESCRIPTION_COLUMN_KEY,
|
||||||
ExamConfigurationMap::getConfigDescription,
|
ExamConfigurationMap::getConfigDescription))
|
||||||
false))
|
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.CONFIGURATION_NODE.ATTR_STATUS,
|
Domain.CONFIGURATION_NODE.ATTR_STATUS,
|
||||||
CONFIG_STATUS_COLUMN_KEY,
|
CONFIG_STATUS_COLUMN_KEY,
|
||||||
this.resourceService::localizedExamConfigStatusName,
|
this.resourceService::localizedExamConfigStatusName))
|
||||||
false))
|
|
||||||
.withDefaultActionIf(
|
.withDefaultActionIf(
|
||||||
() -> editable,
|
() -> editable,
|
||||||
() -> actionBuilder
|
() -> actionBuilder
|
||||||
|
@ -350,18 +347,15 @@ public class ExamForm implements TemplateComposer {
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.INDICATOR.ATTR_NAME,
|
Domain.INDICATOR.ATTR_NAME,
|
||||||
INDICATOR_NAME_COLUMN_KEY,
|
INDICATOR_NAME_COLUMN_KEY,
|
||||||
Indicator::getName,
|
Indicator::getName))
|
||||||
false))
|
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.INDICATOR.ATTR_TYPE,
|
Domain.INDICATOR.ATTR_TYPE,
|
||||||
INDICATOR_TYPE_COLUMN_KEY,
|
INDICATOR_TYPE_COLUMN_KEY,
|
||||||
this::indicatorTypeName,
|
this::indicatorTypeName))
|
||||||
false))
|
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.THRESHOLD.REFERENCE_NAME,
|
Domain.THRESHOLD.REFERENCE_NAME,
|
||||||
INDICATOR_THRESHOLD_COLUMN_KEY,
|
INDICATOR_THRESHOLD_COLUMN_KEY,
|
||||||
ExamForm::thresholdsValue,
|
ExamForm::thresholdsValue))
|
||||||
false))
|
|
||||||
.withDefaultActionIf(
|
.withDefaultActionIf(
|
||||||
() -> editable,
|
() -> editable,
|
||||||
() -> actionBuilder
|
() -> actionBuilder
|
||||||
|
|
|
@ -110,28 +110,28 @@ public class ExamList implements TemplateComposer {
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.EXAM.ATTR_LMS_SETUP_ID,
|
Domain.EXAM.ATTR_LMS_SETUP_ID,
|
||||||
columnTitleLmsSetupKey,
|
columnTitleLmsSetupKey,
|
||||||
examLmsSetupNameFunction(this.resourceService),
|
examLmsSetupNameFunction(this.resourceService))
|
||||||
this.lmsFilter,
|
.withFilter(this.lmsFilter)
|
||||||
false))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
QuizData.QUIZ_ATTR_NAME,
|
QuizData.QUIZ_ATTR_NAME,
|
||||||
columnTitleNameKey,
|
columnTitleNameKey,
|
||||||
Exam::getName,
|
Exam::getName)
|
||||||
this.nameFilter,
|
.withFilter(this.nameFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
QuizData.QUIZ_ATTR_START_TIME,
|
QuizData.QUIZ_ATTR_START_TIME,
|
||||||
new LocTextKey(
|
new LocTextKey(
|
||||||
"sebserver.exam.list.column.starttime",
|
"sebserver.exam.list.column.starttime",
|
||||||
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
||||||
Exam::getStartTime,
|
Exam::getStartTime)
|
||||||
this.startTimeFilter,
|
.withFilter(this.startTimeFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.EXAM.ATTR_TYPE,
|
Domain.EXAM.ATTR_TYPE,
|
||||||
columnTitleTypeKey,
|
columnTitleTypeKey,
|
||||||
this::examTypeName,
|
this::examTypeName)
|
||||||
true))
|
.sortable())
|
||||||
.withDefaultAction(actionBuilder
|
.withDefaultAction(actionBuilder
|
||||||
.newAction(ActionDefinition.EXAM_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.EXAM_VIEW_FROM_LIST)
|
||||||
.create())
|
.create())
|
||||||
|
|
|
@ -79,20 +79,20 @@ public class InstitutionList implements TemplateComposer {
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.INSTITUTION.ATTR_NAME,
|
Domain.INSTITUTION.ATTR_NAME,
|
||||||
NAME_TEXT_KEY,
|
NAME_TEXT_KEY,
|
||||||
entity -> entity.name,
|
Institution::getName)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.INSTITUTION.ATTR_URL_SUFFIX,
|
Domain.INSTITUTION.ATTR_URL_SUFFIX,
|
||||||
URL_TEXT_KEY,
|
URL_TEXT_KEY,
|
||||||
entity -> entity.urlSuffix,
|
Institution::getUrlSuffix)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<Institution>(
|
||||||
Domain.INSTITUTION.ATTR_ACTIVE,
|
Domain.INSTITUTION.ATTR_ACTIVE,
|
||||||
ACTIVE_TEXT_KEY,
|
ACTIVE_TEXT_KEY,
|
||||||
entity -> this.pageService
|
entity -> this.pageService
|
||||||
.getResourceService()
|
.getResourceService()
|
||||||
.localizedActivityResource().apply(entity.active),
|
.localizedActivityResource().apply(entity.active))
|
||||||
true))
|
.sortable())
|
||||||
.withDefaultAction(pageActionBuilder
|
.withDefaultAction(pageActionBuilder
|
||||||
.newAction(ActionDefinition.INSTITUTION_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.INSTITUTION_VIEW_FROM_LIST)
|
||||||
.create())
|
.create())
|
||||||
|
@ -118,7 +118,6 @@ public class InstitutionList implements TemplateComposer {
|
||||||
.withSelect(table::getSelection, PageAction::applySingleSelection, EMPTY_SELECTION_TEXT_KEY)
|
.withSelect(table::getSelection, PageAction::applySingleSelection, EMPTY_SELECTION_TEXT_KEY)
|
||||||
.publishIf(() -> instGrant.m() && table.hasAnyContent());
|
.publishIf(() -> instGrant.m() && table.hasAnyContent());
|
||||||
;
|
;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -113,26 +113,27 @@ public class LmsSetupList implements TemplateComposer {
|
||||||
() -> new ColumnDefinition<>(
|
() -> new ColumnDefinition<>(
|
||||||
Domain.LMS_SETUP.ATTR_INSTITUTION_ID,
|
Domain.LMS_SETUP.ATTR_INSTITUTION_ID,
|
||||||
INSTITUTION_TEXT_KEY,
|
INSTITUTION_TEXT_KEY,
|
||||||
lmsSetupInstitutionNameFunction(this.resourceService),
|
lmsSetupInstitutionNameFunction(this.resourceService))
|
||||||
this.institutionFilter,
|
.withFilter(this.institutionFilter))
|
||||||
false))
|
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.LMS_SETUP.ATTR_NAME,
|
Domain.LMS_SETUP.ATTR_NAME,
|
||||||
NAME_TEXT_KEY,
|
NAME_TEXT_KEY,
|
||||||
entity -> entity.name,
|
LmsSetup::getName)
|
||||||
(isSEBAdmin) ? this.nameFilter : null,
|
.withFilter((isSEBAdmin) ? this.nameFilter : null)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.LMS_SETUP.ATTR_LMS_TYPE,
|
Domain.LMS_SETUP.ATTR_LMS_TYPE,
|
||||||
TYPE_TEXT_KEY,
|
TYPE_TEXT_KEY,
|
||||||
this::lmsSetupTypeName,
|
this::lmsSetupTypeName)
|
||||||
(isSEBAdmin) ? this.typeFilter : null,
|
.withFilter((isSEBAdmin) ? this.typeFilter : null)
|
||||||
false, true))
|
.localized()
|
||||||
|
.sortable())
|
||||||
|
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.LMS_SETUP.ATTR_ACTIVE,
|
Domain.LMS_SETUP.ATTR_ACTIVE,
|
||||||
ACTIVITY_TEXT_KEY,
|
ACTIVITY_TEXT_KEY,
|
||||||
entity -> entity.active,
|
LmsSetup::getActive)
|
||||||
true))
|
.sortable())
|
||||||
.withDefaultAction(actionBuilder
|
.withDefaultAction(actionBuilder
|
||||||
.newAction(ActionDefinition.LMS_SETUP_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.LMS_SETUP_VIEW_FROM_LIST)
|
||||||
.create())
|
.create())
|
||||||
|
|
|
@ -128,30 +128,30 @@ public class QuizDiscoveryList implements TemplateComposer {
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
QuizData.QUIZ_ATTR_LMS_SETUP_ID,
|
QuizData.QUIZ_ATTR_LMS_SETUP_ID,
|
||||||
LMS_TEXT_KEY,
|
LMS_TEXT_KEY,
|
||||||
quizDataLmsSetupNameFunction(this.resourceService),
|
quizDataLmsSetupNameFunction(this.resourceService))
|
||||||
this.lmsFilter,
|
.withFilter(this.lmsFilter)
|
||||||
false))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
QuizData.QUIZ_ATTR_NAME,
|
QuizData.QUIZ_ATTR_NAME,
|
||||||
NAME_TEXT_KEY,
|
NAME_TEXT_KEY,
|
||||||
quizData -> quizData.name,
|
QuizData::getName)
|
||||||
this.nameFilter,
|
.withFilter(this.nameFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
QuizData.QUIZ_ATTR_START_TIME,
|
QuizData.QUIZ_ATTR_START_TIME,
|
||||||
new LocTextKey(
|
new LocTextKey(
|
||||||
"sebserver.quizdiscovery.list.column.starttime",
|
"sebserver.quizdiscovery.list.column.starttime",
|
||||||
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
||||||
quizData -> quizData.startTime,
|
QuizData::getStartTime)
|
||||||
this.startTimeFilter,
|
.withFilter(this.startTimeFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
QuizData.QUIZ_ATTR_END_TIME,
|
QuizData.QUIZ_ATTR_END_TIME,
|
||||||
new LocTextKey(
|
new LocTextKey(
|
||||||
"sebserver.quizdiscovery.list.column.endtime",
|
"sebserver.quizdiscovery.list.column.endtime",
|
||||||
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
||||||
quizData -> quizData.endTime,
|
QuizData::getEndTime)
|
||||||
true))
|
.sortable())
|
||||||
.withDefaultAction(t -> actionBuilder
|
.withDefaultAction(t -> actionBuilder
|
||||||
.newAction(ActionDefinition.QUIZ_DISCOVERY_SHOW_DETAILS)
|
.newAction(ActionDefinition.QUIZ_DISCOVERY_SHOW_DETAILS)
|
||||||
.withExec(action -> this.showDetails(action, t.getSelectedROWData()))
|
.withExec(action -> this.showDetails(action, t.getSelectedROWData()))
|
||||||
|
|
|
@ -117,28 +117,27 @@ public class SebClientConfigList implements TemplateComposer {
|
||||||
() -> new ColumnDefinition<>(
|
() -> new ColumnDefinition<>(
|
||||||
Domain.LMS_SETUP.ATTR_INSTITUTION_ID,
|
Domain.LMS_SETUP.ATTR_INSTITUTION_ID,
|
||||||
INSTITUTION_TEXT_KEY,
|
INSTITUTION_TEXT_KEY,
|
||||||
clientConfigInstitutionNameFunction(this.resourceService),
|
clientConfigInstitutionNameFunction(this.resourceService))
|
||||||
this.institutionFilter,
|
.withFilter(this.institutionFilter))
|
||||||
false))
|
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.SEB_CLIENT_CONFIGURATION.ATTR_NAME,
|
Domain.SEB_CLIENT_CONFIGURATION.ATTR_NAME,
|
||||||
NAME_TEXT_KEY,
|
NAME_TEXT_KEY,
|
||||||
entity -> entity.name,
|
SebClientConfig::getName)
|
||||||
this.nameFilter,
|
.withFilter(this.nameFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.SEB_CLIENT_CONFIGURATION.ATTR_DATE,
|
Domain.SEB_CLIENT_CONFIGURATION.ATTR_DATE,
|
||||||
new LocTextKey(
|
new LocTextKey(
|
||||||
"sebserver.clientconfig.list.column.date",
|
"sebserver.clientconfig.list.column.date",
|
||||||
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
i18nSupport.getUsersTimeZoneTitleSuffix()),
|
||||||
entity -> entity.date,
|
SebClientConfig::getDate)
|
||||||
this.dateFilter,
|
.withFilter(this.dateFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.SEB_CLIENT_CONFIGURATION.ATTR_ACTIVE,
|
Domain.SEB_CLIENT_CONFIGURATION.ATTR_ACTIVE,
|
||||||
ACTIVE_TEXT_KEY,
|
ACTIVE_TEXT_KEY,
|
||||||
entity -> entity.active,
|
SebClientConfig::getActive)
|
||||||
true))
|
.sortable())
|
||||||
.withDefaultAction(pageActionBuilder
|
.withDefaultAction(pageActionBuilder
|
||||||
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.SEB_CLIENT_CONFIG_VIEW_FROM_LIST)
|
||||||
.create())
|
.create())
|
||||||
|
|
|
@ -111,27 +111,27 @@ public class SebExamConfigList implements TemplateComposer {
|
||||||
() -> new ColumnDefinition<>(
|
() -> new ColumnDefinition<>(
|
||||||
Domain.LMS_SETUP.ATTR_INSTITUTION_ID,
|
Domain.LMS_SETUP.ATTR_INSTITUTION_ID,
|
||||||
INSTITUTION_TEXT_KEY,
|
INSTITUTION_TEXT_KEY,
|
||||||
this.resourceService::localizedExamConfigInstitutionName,
|
this.resourceService::localizedExamConfigInstitutionName)
|
||||||
this.institutionFilter,
|
.withFilter(this.institutionFilter)
|
||||||
false))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.CONFIGURATION_NODE.ATTR_NAME,
|
Domain.CONFIGURATION_NODE.ATTR_NAME,
|
||||||
NAME_TEXT_KEY,
|
NAME_TEXT_KEY,
|
||||||
entity -> entity.name,
|
ConfigurationNode::getName)
|
||||||
this.nameFilter,
|
.withFilter(this.nameFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.CONFIGURATION_NODE.ATTR_DESCRIPTION,
|
Domain.CONFIGURATION_NODE.ATTR_DESCRIPTION,
|
||||||
DESCRIPTION_TEXT_KEY,
|
DESCRIPTION_TEXT_KEY,
|
||||||
entity -> entity.description,
|
ConfigurationNode::getDescription)
|
||||||
this.nameFilter,
|
.withFilter(this.nameFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<ConfigurationNode>(
|
||||||
Domain.CONFIGURATION_NODE.ATTR_STATUS,
|
Domain.CONFIGURATION_NODE.ATTR_STATUS,
|
||||||
STATUS_TEXT_KEY,
|
STATUS_TEXT_KEY,
|
||||||
this.resourceService::localizedExamConfigStatusName,
|
this.resourceService::localizedExamConfigStatusName)
|
||||||
this.statusFilter,
|
.withFilter(this.statusFilter)
|
||||||
true))
|
.sortable())
|
||||||
.withDefaultAction(pageActionBuilder
|
.withDefaultAction(pageActionBuilder
|
||||||
.newAction(ActionDefinition.SEB_EXAM_CONFIG_VIEW_PROP_FROM_LIST)
|
.newAction(ActionDefinition.SEB_EXAM_CONFIG_VIEW_PROP_FROM_LIST)
|
||||||
.create())
|
.create())
|
||||||
|
|
|
@ -123,38 +123,44 @@ public class UserAccountList implements TemplateComposer {
|
||||||
() -> new ColumnDefinition<>(
|
() -> new ColumnDefinition<>(
|
||||||
Domain.USER.ATTR_INSTITUTION_ID,
|
Domain.USER.ATTR_INSTITUTION_ID,
|
||||||
INSTITUTION_TEXT_KEY,
|
INSTITUTION_TEXT_KEY,
|
||||||
userInstitutionNameFunction(this.resourceService),
|
userInstitutionNameFunction(this.resourceService))
|
||||||
this.institutionFilter,
|
.withFilter(this.institutionFilter)
|
||||||
false))
|
.widthProportion(2))
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.USER.ATTR_NAME,
|
Domain.USER.ATTR_NAME,
|
||||||
NAME_TEXT_KEY,
|
NAME_TEXT_KEY,
|
||||||
entity -> entity.name,
|
UserInfo::getName)
|
||||||
this.nameFilter,
|
.withFilter(this.nameFilter)
|
||||||
true))
|
.sortable()
|
||||||
|
.widthProportion(2))
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.USER.ATTR_USERNAME,
|
Domain.USER.ATTR_USERNAME,
|
||||||
USER_NAME_TEXT_KEY,
|
USER_NAME_TEXT_KEY,
|
||||||
entity -> entity.username,
|
UserInfo::getUsername)
|
||||||
this.usernameFilter,
|
.withFilter(this.usernameFilter)
|
||||||
true))
|
.sortable()
|
||||||
|
.widthProportion(2))
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.USER.ATTR_EMAIL,
|
Domain.USER.ATTR_EMAIL,
|
||||||
MAIL_TEXT_KEY,
|
MAIL_TEXT_KEY,
|
||||||
entity -> entity.email,
|
UserInfo::getEmail)
|
||||||
this.mailFilter,
|
.withFilter(this.mailFilter)
|
||||||
true))
|
.sortable()
|
||||||
|
.widthProportion(3))
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.USER.ATTR_LANGUAGE,
|
Domain.USER.ATTR_LANGUAGE,
|
||||||
LANG_TEXT_KEY,
|
LANG_TEXT_KEY,
|
||||||
this::getLocaleDisplayText,
|
this::getLocaleDisplayText)
|
||||||
this.languageFilter,
|
.withFilter(this.languageFilter)
|
||||||
true, true))
|
.localized()
|
||||||
|
.sortable()
|
||||||
|
.widthProportion(2))
|
||||||
.withColumn(new ColumnDefinition<>(
|
.withColumn(new ColumnDefinition<>(
|
||||||
Domain.USER.ATTR_ACTIVE,
|
Domain.USER.ATTR_ACTIVE,
|
||||||
ACTIVE_TEXT_KEY,
|
ACTIVE_TEXT_KEY,
|
||||||
entity -> entity.active,
|
UserInfo::getActive)
|
||||||
true))
|
.sortable()
|
||||||
|
.widthProportion(1))
|
||||||
.withDefaultAction(actionBuilder
|
.withDefaultAction(actionBuilder
|
||||||
.newAction(ActionDefinition.USER_ACCOUNT_VIEW_FROM_LIST)
|
.newAction(ActionDefinition.USER_ACCOUNT_VIEW_FROM_LIST)
|
||||||
.create())
|
.create())
|
||||||
|
|
|
@ -69,7 +69,9 @@ public abstract class AbstractTableFieldBuilder implements InputFieldBuilder {
|
||||||
true, false,
|
true, false,
|
||||||
(tableContext.orientation != null) ? tableContext.orientation.width() : 1,
|
(tableContext.orientation != null) ? tableContext.orientation.width() : 1,
|
||||||
(tableContext.orientation != null) ? tableContext.orientation.height() : 1);
|
(tableContext.orientation != null) ? tableContext.orientation.height() : 1);
|
||||||
gridData.heightHint = tableContext.orientation.height * 20 + 40;
|
if (tableContext.orientation.height != null) {
|
||||||
|
gridData.heightHint = tableContext.orientation.height * 20 + 40;
|
||||||
|
}
|
||||||
table.setLayoutData(gridData);
|
table.setLayoutData(gridData);
|
||||||
table.setHeaderVisible(true);
|
table.setHeaderVisible(true);
|
||||||
table.addListener(SWT.Resize, event -> adaptColumnWidth(table, tableContext));
|
table.addListener(SWT.Resize, event -> adaptColumnWidth(table, tableContext));
|
||||||
|
@ -267,7 +269,7 @@ public abstract class AbstractTableFieldBuilder implements InputFieldBuilder {
|
||||||
final Map<Long, TableValue> rowValues,
|
final Map<Long, TableValue> rowValues,
|
||||||
final int index) {
|
final int index) {
|
||||||
|
|
||||||
if (values != null && !values.isEmpty()) {
|
if (!values.isEmpty()) {
|
||||||
values.remove(index);
|
values.remove(index);
|
||||||
values.add(index, rowValues);
|
values.add(index, rowValues);
|
||||||
applyTableRowValues(index);
|
applyTableRowValues(index);
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ActivateExam extends RestCall<EntityProcessingReport> {
|
public class ActivateExam extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected ActivateExam() {
|
public ActivateExam() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_ACTIVATE,
|
CallType.ACTIVATION_ACTIVATE,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeactivateExam extends RestCall<EntityProcessingReport> {
|
public class DeactivateExam extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeactivateExam() {
|
public DeactivateExam() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_DEACTIVATE,
|
CallType.ACTIVATION_DEACTIVATE,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeleteExamConfigMapping extends RestCall<EntityProcessingReport> {
|
public class DeleteExamConfigMapping extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeleteExamConfigMapping() {
|
public DeleteExamConfigMapping() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.DELETE,
|
CallType.DELETE,
|
||||||
EntityType.EXAM_CONFIGURATION_MAP,
|
EntityType.EXAM_CONFIGURATION_MAP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeleteIndicator extends RestCall<EntityProcessingReport> {
|
public class DeleteIndicator extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeleteIndicator() {
|
public DeleteIndicator() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.DELETE,
|
CallType.DELETE,
|
||||||
EntityType.INDICATOR,
|
EntityType.INDICATOR,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExam extends RestCall<Exam> {
|
public class GetExam extends RestCall<Exam> {
|
||||||
|
|
||||||
protected GetExam() {
|
public GetExam() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamConfigMapping extends RestCall<ExamConfigurationMap> {
|
public class GetExamConfigMapping extends RestCall<ExamConfigurationMap> {
|
||||||
|
|
||||||
protected GetExamConfigMapping() {
|
public GetExamConfigMapping() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.EXAM_CONFIGURATION_MAP,
|
EntityType.EXAM_CONFIGURATION_MAP,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamConfigMappingNames extends RestCall<List<EntityName>> {
|
public class GetExamConfigMappingNames extends RestCall<List<EntityName>> {
|
||||||
|
|
||||||
protected GetExamConfigMappingNames() {
|
public GetExamConfigMappingNames() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_NAMES,
|
CallType.GET_NAMES,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamConfigMappingsPage extends RestCall<Page<ExamConfigurationMap>> {
|
public class GetExamConfigMappingsPage extends RestCall<Page<ExamConfigurationMap>> {
|
||||||
|
|
||||||
protected GetExamConfigMappingsPage() {
|
public GetExamConfigMappingsPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.EXAM_CONFIGURATION_MAP,
|
EntityType.EXAM_CONFIGURATION_MAP,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamDependencies extends RestCall<Set<EntityKey>> {
|
public class GetExamDependencies extends RestCall<Set<EntityKey>> {
|
||||||
|
|
||||||
protected GetExamDependencies() {
|
public GetExamDependencies() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_DEPENDENCIES,
|
CallType.GET_DEPENDENCIES,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamNames extends RestCall<List<EntityName>> {
|
public class GetExamNames extends RestCall<List<EntityName>> {
|
||||||
|
|
||||||
protected GetExamNames() {
|
public GetExamNames() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_NAMES,
|
CallType.GET_NAMES,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamPage extends RestCall<Page<Exam>> {
|
public class GetExamPage extends RestCall<Page<Exam>> {
|
||||||
|
|
||||||
protected GetExamPage() {
|
public GetExamPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetIndicator extends RestCall<Indicator> {
|
public class GetIndicator extends RestCall<Indicator> {
|
||||||
|
|
||||||
protected GetIndicator() {
|
public GetIndicator() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.INDICATOR,
|
EntityType.INDICATOR,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetIndicators extends RestCall<Page<Indicator>> {
|
public class GetIndicators extends RestCall<Page<Indicator>> {
|
||||||
|
|
||||||
protected GetIndicators() {
|
public GetIndicators() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.INDICATOR,
|
EntityType.INDICATOR,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class NewExamConfigMapping extends RestCall<ExamConfigurationMap> {
|
public class NewExamConfigMapping extends RestCall<ExamConfigurationMap> {
|
||||||
|
|
||||||
protected NewExamConfigMapping() {
|
public NewExamConfigMapping() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.EXAM_CONFIGURATION_MAP,
|
EntityType.EXAM_CONFIGURATION_MAP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class NewIndicator extends RestCall<Indicator> {
|
public class NewIndicator extends RestCall<Indicator> {
|
||||||
|
|
||||||
protected NewIndicator() {
|
public NewIndicator() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.INDICATOR,
|
EntityType.INDICATOR,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveExam extends RestCall<Exam> {
|
public class SaveExam extends RestCall<Exam> {
|
||||||
|
|
||||||
protected SaveExam() {
|
public SaveExam() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveExamConfigMapping extends RestCall<ExamConfigurationMap> {
|
public class SaveExamConfigMapping extends RestCall<ExamConfigurationMap> {
|
||||||
|
|
||||||
protected SaveExamConfigMapping() {
|
public SaveExamConfigMapping() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.EXAM_CONFIGURATION_MAP,
|
EntityType.EXAM_CONFIGURATION_MAP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveIndicator extends RestCall<Indicator> {
|
public class SaveIndicator extends RestCall<Indicator> {
|
||||||
|
|
||||||
protected SaveIndicator() {
|
public SaveIndicator() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.INDICATOR,
|
EntityType.INDICATOR,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ActivateInstitution extends RestCall<EntityProcessingReport> {
|
public class ActivateInstitution extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected ActivateInstitution() {
|
public ActivateInstitution() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_ACTIVATE,
|
CallType.ACTIVATION_ACTIVATE,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeactivateInstitution extends RestCall<EntityProcessingReport> {
|
public class DeactivateInstitution extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeactivateInstitution() {
|
public DeactivateInstitution() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_DEACTIVATE,
|
CallType.ACTIVATION_DEACTIVATE,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetInstitution extends RestCall<Institution> {
|
public class GetInstitution extends RestCall<Institution> {
|
||||||
|
|
||||||
protected GetInstitution() {
|
public GetInstitution() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetInstitutionDependency extends RestCall<Set<EntityKey>> {
|
public class GetInstitutionDependency extends RestCall<Set<EntityKey>> {
|
||||||
|
|
||||||
protected GetInstitutionDependency() {
|
public GetInstitutionDependency() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_DEPENDENCIES,
|
CallType.GET_DEPENDENCIES,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetInstitutionNames extends RestCall<List<EntityName>> {
|
public class GetInstitutionNames extends RestCall<List<EntityName>> {
|
||||||
|
|
||||||
protected GetInstitutionNames() {
|
public GetInstitutionNames() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_NAMES,
|
CallType.GET_NAMES,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetInstitutionPage extends RestCall<Page<Institution>> {
|
public class GetInstitutionPage extends RestCall<Page<Institution>> {
|
||||||
|
|
||||||
protected GetInstitutionPage() {
|
public GetInstitutionPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class NewInstitution extends RestCall<Institution> {
|
public class NewInstitution extends RestCall<Institution> {
|
||||||
|
|
||||||
protected NewInstitution() {
|
public NewInstitution() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveInstitution extends RestCall<Institution> {
|
public class SaveInstitution extends RestCall<Institution> {
|
||||||
|
|
||||||
protected SaveInstitution() {
|
public SaveInstitution() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.INSTITUTION,
|
EntityType.INSTITUTION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ActivateLmsSetup extends RestCall<EntityProcessingReport> {
|
public class ActivateLmsSetup extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected ActivateLmsSetup() {
|
public ActivateLmsSetup() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_ACTIVATE,
|
CallType.ACTIVATION_ACTIVATE,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeactivateLmsSetup extends RestCall<EntityProcessingReport> {
|
public class DeactivateLmsSetup extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeactivateLmsSetup() {
|
public DeactivateLmsSetup() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_DEACTIVATE,
|
CallType.ACTIVATION_DEACTIVATE,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetLmsSetup extends RestCall<LmsSetup> {
|
public class GetLmsSetup extends RestCall<LmsSetup> {
|
||||||
|
|
||||||
protected GetLmsSetup() {
|
public GetLmsSetup() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetLmsSetupDependencies extends RestCall<Set<EntityKey>> {
|
public class GetLmsSetupDependencies extends RestCall<Set<EntityKey>> {
|
||||||
|
|
||||||
protected GetLmsSetupDependencies() {
|
public GetLmsSetupDependencies() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_DEPENDENCIES,
|
CallType.GET_DEPENDENCIES,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetLmsSetupNames extends RestCall<List<EntityName>> {
|
public class GetLmsSetupNames extends RestCall<List<EntityName>> {
|
||||||
|
|
||||||
protected GetLmsSetupNames() {
|
public GetLmsSetupNames() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_NAMES,
|
CallType.GET_NAMES,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetLmsSetupPage extends RestCall<Page<LmsSetup>> {
|
public class GetLmsSetupPage extends RestCall<Page<LmsSetup>> {
|
||||||
|
|
||||||
protected GetLmsSetupPage() {
|
public GetLmsSetupPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class NewLmsSetup extends RestCall<LmsSetup> {
|
public class NewLmsSetup extends RestCall<LmsSetup> {
|
||||||
|
|
||||||
protected NewLmsSetup() {
|
public NewLmsSetup() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveLmsSetup extends RestCall<LmsSetup> {
|
public class SaveLmsSetup extends RestCall<LmsSetup> {
|
||||||
|
|
||||||
protected SaveLmsSetup() {
|
public SaveLmsSetup() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class TestLmsSetup extends RestCall<LmsSetupTestResult> {
|
public class TestLmsSetup extends RestCall<LmsSetupTestResult> {
|
||||||
|
|
||||||
protected TestLmsSetup() {
|
public TestLmsSetup() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.UNDEFINED,
|
CallType.UNDEFINED,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class TestLmsSetupAdHoc extends RestCall<LmsSetupTestResult> {
|
public class TestLmsSetupAdHoc extends RestCall<LmsSetupTestResult> {
|
||||||
|
|
||||||
protected TestLmsSetupAdHoc() {
|
public TestLmsSetupAdHoc() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.UNDEFINED,
|
CallType.UNDEFINED,
|
||||||
EntityType.LMS_SETUP,
|
EntityType.LMS_SETUP,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetQuizData extends RestCall<QuizData> {
|
public class GetQuizData extends RestCall<QuizData> {
|
||||||
|
|
||||||
protected GetQuizData() {
|
public GetQuizData() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetQuizPage extends RestCall<Page<QuizData>> {
|
public class GetQuizPage extends RestCall<Page<QuizData>> {
|
||||||
|
|
||||||
protected GetQuizPage() {
|
public GetQuizPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ImportAsExam extends RestCall<Exam> {
|
public class ImportAsExam extends RestCall<Exam> {
|
||||||
|
|
||||||
protected ImportAsExam() {
|
public ImportAsExam() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.EXAM,
|
EntityType.EXAM,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ActivateClientConfig extends RestCall<EntityProcessingReport> {
|
public class ActivateClientConfig extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected ActivateClientConfig() {
|
public ActivateClientConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_ACTIVATE,
|
CallType.ACTIVATION_ACTIVATE,
|
||||||
EntityType.SEB_CLIENT_CONFIGURATION,
|
EntityType.SEB_CLIENT_CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeactivateClientConfig extends RestCall<EntityProcessingReport> {
|
public class DeactivateClientConfig extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeactivateClientConfig() {
|
public DeactivateClientConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_DEACTIVATE,
|
CallType.ACTIVATION_DEACTIVATE,
|
||||||
EntityType.SEB_CLIENT_CONFIGURATION,
|
EntityType.SEB_CLIENT_CONFIGURATION,
|
||||||
|
|
|
@ -25,7 +25,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.AbstractExportCal
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ExportClientConfig extends AbstractExportCall {
|
public class ExportClientConfig extends AbstractExportCall {
|
||||||
|
|
||||||
protected ExportClientConfig() {
|
public ExportClientConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.UNDEFINED,
|
CallType.UNDEFINED,
|
||||||
EntityType.SEB_CLIENT_CONFIGURATION,
|
EntityType.SEB_CLIENT_CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetClientConfig extends RestCall<SebClientConfig> {
|
public class GetClientConfig extends RestCall<SebClientConfig> {
|
||||||
|
|
||||||
protected GetClientConfig() {
|
public GetClientConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.SEB_CLIENT_CONFIGURATION,
|
EntityType.SEB_CLIENT_CONFIGURATION,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetClientConfigPage extends RestCall<Page<SebClientConfig>> {
|
public class GetClientConfigPage extends RestCall<Page<SebClientConfig>> {
|
||||||
|
|
||||||
protected GetClientConfigPage() {
|
public GetClientConfigPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.SEB_CLIENT_CONFIGURATION,
|
EntityType.SEB_CLIENT_CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class NewClientConfig extends RestCall<SebClientConfig> {
|
public class NewClientConfig extends RestCall<SebClientConfig> {
|
||||||
|
|
||||||
protected NewClientConfig() {
|
public NewClientConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.SEB_CLIENT_CONFIGURATION,
|
EntityType.SEB_CLIENT_CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveClientConfig extends RestCall<SebClientConfig> {
|
public class SaveClientConfig extends RestCall<SebClientConfig> {
|
||||||
|
|
||||||
protected SaveClientConfig() {
|
public SaveClientConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.SEB_CLIENT_CONFIGURATION,
|
EntityType.SEB_CLIENT_CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ActivateExamConfig extends RestCall<EntityProcessingReport> {
|
public class ActivateExamConfig extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected ActivateExamConfig() {
|
public ActivateExamConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_ACTIVATE,
|
CallType.ACTIVATION_ACTIVATE,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeactivateExamConfig extends RestCall<EntityProcessingReport> {
|
public class DeactivateExamConfig extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeactivateExamConfig() {
|
public DeactivateExamConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_DEACTIVATE,
|
CallType.ACTIVATION_DEACTIVATE,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -25,7 +25,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.AbstractExportCal
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ExportPlainXML extends AbstractExportCall {
|
public class ExportPlainXML extends AbstractExportCall {
|
||||||
|
|
||||||
protected ExportPlainXML() {
|
public ExportPlainXML() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.UNDEFINED,
|
CallType.UNDEFINED,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetConfiguration extends RestCall<Configuration> {
|
public class GetConfiguration extends RestCall<Configuration> {
|
||||||
|
|
||||||
protected GetConfiguration() {
|
public GetConfiguration() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.CONFIGURATION,
|
EntityType.CONFIGURATION,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetConfigurationPage extends RestCall<Page<Configuration>> {
|
public class GetConfigurationPage extends RestCall<Page<Configuration>> {
|
||||||
|
|
||||||
protected GetConfigurationPage() {
|
public GetConfigurationPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.CONFIGURATION,
|
EntityType.CONFIGURATION,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetConfigurationValuePage extends RestCall<Page<ConfigurationValue>> {
|
public class GetConfigurationValuePage extends RestCall<Page<ConfigurationValue>> {
|
||||||
|
|
||||||
protected GetConfigurationValuePage() {
|
public GetConfigurationValuePage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.CONFIGURATION_VALUE,
|
EntityType.CONFIGURATION_VALUE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.PageToListCallAda
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetConfigurationValues extends PageToListCallAdapter<ConfigurationValue> {
|
public class GetConfigurationValues extends PageToListCallAdapter<ConfigurationValue> {
|
||||||
|
|
||||||
protected GetConfigurationValues() {
|
public GetConfigurationValues() {
|
||||||
super(
|
super(
|
||||||
GetConfigurationValuePage.class,
|
GetConfigurationValuePage.class,
|
||||||
EntityType.CONFIGURATION_VALUE,
|
EntityType.CONFIGURATION_VALUE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.PageToListCallAda
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetConfigurations extends PageToListCallAdapter<Configuration> {
|
public class GetConfigurations extends PageToListCallAdapter<Configuration> {
|
||||||
|
|
||||||
protected GetConfigurations() {
|
public GetConfigurations() {
|
||||||
super(
|
super(
|
||||||
GetConfigurationPage.class,
|
GetConfigurationPage.class,
|
||||||
EntityType.CONFIGURATION,
|
EntityType.CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamConfigNode extends RestCall<ConfigurationNode> {
|
public class GetExamConfigNode extends RestCall<ConfigurationNode> {
|
||||||
|
|
||||||
protected GetExamConfigNode() {
|
public GetExamConfigNode() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetExamConfigNodePage extends RestCall<Page<ConfigurationNode>> {
|
public class GetExamConfigNodePage extends RestCall<Page<ConfigurationNode>> {
|
||||||
|
|
||||||
protected GetExamConfigNodePage() {
|
public GetExamConfigNodePage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetOrientationPage extends RestCall<Page<Orientation>> {
|
public class GetOrientationPage extends RestCall<Page<Orientation>> {
|
||||||
|
|
||||||
protected GetOrientationPage() {
|
public GetOrientationPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.ORIENTATION,
|
EntityType.ORIENTATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.PageToListCallAda
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetOrientations extends PageToListCallAdapter<Orientation> {
|
public class GetOrientations extends PageToListCallAdapter<Orientation> {
|
||||||
|
|
||||||
protected GetOrientations() {
|
public GetOrientations() {
|
||||||
super(
|
super(
|
||||||
GetOrientationPage.class,
|
GetOrientationPage.class,
|
||||||
EntityType.ORIENTATION,
|
EntityType.ORIENTATION,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetViewList extends RestCall<List<View>> {
|
public class GetViewList extends RestCall<List<View>> {
|
||||||
|
|
||||||
protected GetViewList() {
|
public GetViewList() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_LIST,
|
CallType.GET_LIST,
|
||||||
EntityType.VIEW,
|
EntityType.VIEW,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class NewExamConfig extends RestCall<ConfigurationNode> {
|
public class NewExamConfig extends RestCall<ConfigurationNode> {
|
||||||
|
|
||||||
protected NewExamConfig() {
|
public NewExamConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveExamConfig extends RestCall<ConfigurationNode> {
|
public class SaveExamConfig extends RestCall<ConfigurationNode> {
|
||||||
|
|
||||||
protected SaveExamConfig() {
|
public SaveExamConfig() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.CONFIGURATION_NODE,
|
EntityType.CONFIGURATION_NODE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveExamConfigHistory extends RestCall<Configuration> {
|
public class SaveExamConfigHistory extends RestCall<Configuration> {
|
||||||
|
|
||||||
protected SaveExamConfigHistory() {
|
public SaveExamConfigHistory() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.CONFIGURATION,
|
EntityType.CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveExamConfigTableValues extends RestCall<ConfigurationTableValues> {
|
public class SaveExamConfigTableValues extends RestCall<ConfigurationTableValues> {
|
||||||
|
|
||||||
protected SaveExamConfigTableValues() {
|
public SaveExamConfigTableValues() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.CONFIGURATION_VALUE,
|
EntityType.CONFIGURATION_VALUE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveExamConfigValue extends RestCall<ConfigurationValue> {
|
public class SaveExamConfigValue extends RestCall<ConfigurationValue> {
|
||||||
|
|
||||||
protected SaveExamConfigValue() {
|
public SaveExamConfigValue() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.CONFIGURATION_VALUE,
|
EntityType.CONFIGURATION_VALUE,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SebExamConfigUndo extends RestCall<Configuration> {
|
public class SebExamConfigUndo extends RestCall<Configuration> {
|
||||||
|
|
||||||
protected SebExamConfigUndo() {
|
public SebExamConfigUndo() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.CONFIGURATION,
|
EntityType.CONFIGURATION,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ActivateUserAccount extends RestCall<EntityProcessingReport> {
|
public class ActivateUserAccount extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected ActivateUserAccount() {
|
public ActivateUserAccount() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_ACTIVATE,
|
CallType.ACTIVATION_ACTIVATE,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class ChangePassword extends RestCall<UserInfo> {
|
public class ChangePassword extends RestCall<UserInfo> {
|
||||||
|
|
||||||
protected ChangePassword() {
|
public ChangePassword() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.UNDEFINED,
|
CallType.UNDEFINED,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class DeactivateUserAccount extends RestCall<EntityProcessingReport> {
|
public class DeactivateUserAccount extends RestCall<EntityProcessingReport> {
|
||||||
|
|
||||||
protected DeactivateUserAccount() {
|
public DeactivateUserAccount() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.ACTIVATION_DEACTIVATE,
|
CallType.ACTIVATION_DEACTIVATE,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetUserAccount extends RestCall<UserInfo> {
|
public class GetUserAccount extends RestCall<UserInfo> {
|
||||||
|
|
||||||
protected GetUserAccount() {
|
public GetUserAccount() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_SINGLE,
|
CallType.GET_SINGLE,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -28,7 +28,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetUserAccountNames extends RestCall<List<EntityName>> {
|
public class GetUserAccountNames extends RestCall<List<EntityName>> {
|
||||||
|
|
||||||
protected GetUserAccountNames() {
|
public GetUserAccountNames() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_NAMES,
|
CallType.GET_NAMES,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -27,7 +27,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class GetUserAccountPage extends RestCall<Page<UserInfo>> {
|
public class GetUserAccountPage extends RestCall<Page<UserInfo>> {
|
||||||
|
|
||||||
protected GetUserAccountPage() {
|
public GetUserAccountPage() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.GET_PAGE,
|
CallType.GET_PAGE,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class NewUserAccount extends RestCall<UserInfo> {
|
public class NewUserAccount extends RestCall<UserInfo> {
|
||||||
|
|
||||||
protected NewUserAccount() {
|
public NewUserAccount() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.NEW,
|
CallType.NEW,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -26,7 +26,7 @@ import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
@GuiProfile
|
@GuiProfile
|
||||||
public class SaveUserAccount extends RestCall<UserInfo> {
|
public class SaveUserAccount extends RestCall<UserInfo> {
|
||||||
|
|
||||||
protected SaveUserAccount() {
|
public SaveUserAccount() {
|
||||||
super(new TypeKey<>(
|
super(new TypeKey<>(
|
||||||
CallType.SAVE,
|
CallType.SAVE,
|
||||||
EntityType.USER,
|
EntityType.USER,
|
||||||
|
|
|
@ -21,79 +21,31 @@ public final class ColumnDefinition<ROW extends Entity> {
|
||||||
|
|
||||||
final String columnName;
|
final String columnName;
|
||||||
final LocTextKey displayName;
|
final LocTextKey displayName;
|
||||||
final LocTextKey tooltip;
|
|
||||||
final int widthPercent;
|
|
||||||
final Function<ROW, ?> valueSupplier;
|
final Function<ROW, ?> valueSupplier;
|
||||||
final boolean sortable;
|
|
||||||
final TableFilterAttribute filterAttribute;
|
private LocTextKey tooltip;
|
||||||
final boolean localized;
|
private int widthProportion;
|
||||||
|
private boolean sortable;
|
||||||
|
private TableFilterAttribute filterAttribute;
|
||||||
|
private boolean localized;
|
||||||
|
|
||||||
public ColumnDefinition(final String columnName, final LocTextKey displayName) {
|
public ColumnDefinition(final String columnName, final LocTextKey displayName) {
|
||||||
this(columnName, displayName, null, -1);
|
this(columnName, displayName, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ColumnDefinition(
|
public ColumnDefinition(
|
||||||
|
final String columnName,
|
||||||
|
final LocTextKey displayName,
|
||||||
|
final Function<ROW, ?> valueSupplier) {
|
||||||
|
|
||||||
|
this(columnName, displayName, null, -1, valueSupplier, null, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private ColumnDefinition(
|
||||||
final String columnName,
|
final String columnName,
|
||||||
final LocTextKey displayName,
|
final LocTextKey displayName,
|
||||||
final LocTextKey tooltip,
|
final LocTextKey tooltip,
|
||||||
final int widthPercent) {
|
final int widthProportion,
|
||||||
|
|
||||||
this(columnName, displayName, tooltip, widthPercent, null, null, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColumnDefinition(
|
|
||||||
final String columnName,
|
|
||||||
final LocTextKey displayName,
|
|
||||||
final int widthPercent) {
|
|
||||||
|
|
||||||
this(columnName, displayName, null, widthPercent, null, null, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColumnDefinition(
|
|
||||||
final String columnName,
|
|
||||||
final LocTextKey displayName,
|
|
||||||
final Function<ROW, ?> valueSupplier,
|
|
||||||
final boolean sortable) {
|
|
||||||
|
|
||||||
this(columnName, displayName, null, -1, valueSupplier, null, sortable, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColumnDefinition(
|
|
||||||
final String columnName,
|
|
||||||
final LocTextKey displayName,
|
|
||||||
final Function<ROW, ?> valueSupplier,
|
|
||||||
final boolean sortable,
|
|
||||||
final boolean localized) {
|
|
||||||
|
|
||||||
this(columnName, displayName, null, -1, valueSupplier, null, sortable, localized);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColumnDefinition(
|
|
||||||
final String columnName,
|
|
||||||
final LocTextKey displayName,
|
|
||||||
final Function<ROW, ?> valueSupplier,
|
|
||||||
final TableFilterAttribute tableFilterAttribute,
|
|
||||||
final boolean sortable) {
|
|
||||||
|
|
||||||
this(columnName, displayName, null, -1, valueSupplier, tableFilterAttribute, sortable, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColumnDefinition(
|
|
||||||
final String columnName,
|
|
||||||
final LocTextKey displayName,
|
|
||||||
final Function<ROW, ?> valueSupplier,
|
|
||||||
final TableFilterAttribute tableFilterAttribute,
|
|
||||||
final boolean sortable,
|
|
||||||
final boolean localized) {
|
|
||||||
|
|
||||||
this(columnName, displayName, null, -1, valueSupplier, tableFilterAttribute, sortable, localized);
|
|
||||||
}
|
|
||||||
|
|
||||||
public ColumnDefinition(
|
|
||||||
final String columnName,
|
|
||||||
final LocTextKey displayName,
|
|
||||||
final LocTextKey tooltip,
|
|
||||||
final int widthPercent,
|
|
||||||
final Function<ROW, ?> valueSupplier,
|
final Function<ROW, ?> valueSupplier,
|
||||||
final TableFilterAttribute filterAttribute,
|
final TableFilterAttribute filterAttribute,
|
||||||
final boolean sortable,
|
final boolean sortable,
|
||||||
|
@ -102,13 +54,58 @@ public final class ColumnDefinition<ROW extends Entity> {
|
||||||
this.columnName = columnName;
|
this.columnName = columnName;
|
||||||
this.displayName = displayName;
|
this.displayName = displayName;
|
||||||
this.tooltip = tooltip;
|
this.tooltip = tooltip;
|
||||||
this.widthPercent = widthPercent;
|
this.widthProportion = widthProportion;
|
||||||
this.valueSupplier = valueSupplier;
|
this.valueSupplier = valueSupplier;
|
||||||
this.filterAttribute = filterAttribute;
|
this.filterAttribute = filterAttribute;
|
||||||
this.sortable = sortable;
|
this.sortable = sortable;
|
||||||
this.localized = localized;
|
this.localized = localized;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ColumnDefinition<ROW> withFilter(final TableFilterAttribute filterAttribute) {
|
||||||
|
this.filterAttribute = filterAttribute;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColumnDefinition<ROW> withTooltip(final LocTextKey tooltip) {
|
||||||
|
this.tooltip = tooltip;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColumnDefinition<ROW> localized() {
|
||||||
|
this.localized = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColumnDefinition<ROW> sortable() {
|
||||||
|
this.sortable = true;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ColumnDefinition<ROW> widthProportion(final int widthProportion) {
|
||||||
|
this.widthProportion = widthProportion;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocTextKey getTooltip() {
|
||||||
|
return this.tooltip;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getWidthProportion() {
|
||||||
|
return this.widthProportion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSortable() {
|
||||||
|
return this.sortable;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TableFilterAttribute getFilterAttribute() {
|
||||||
|
return this.filterAttribute;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isLocalized() {
|
||||||
|
return this.localized;
|
||||||
|
}
|
||||||
|
|
||||||
public static final class TableFilterAttribute {
|
public static final class TableFilterAttribute {
|
||||||
|
|
||||||
public final CriteriaType type;
|
public final CriteriaType type;
|
||||||
|
|
|
@ -110,7 +110,7 @@ public class EntityTable<ROW extends Entity> {
|
||||||
this.filter =
|
this.filter =
|
||||||
columns
|
columns
|
||||||
.stream()
|
.stream()
|
||||||
.map(column -> column.filterAttribute)
|
.map(column -> column.getFilterAttribute())
|
||||||
.filter(Objects::nonNull)
|
.filter(Objects::nonNull)
|
||||||
.findFirst()
|
.findFirst()
|
||||||
.isPresent() ? new TableFilter<>(this) : null;
|
.isPresent() ? new TableFilter<>(this) : null;
|
||||||
|
@ -273,12 +273,12 @@ public class EntityTable<ROW extends Entity> {
|
||||||
final TableColumn tableColumn = this.widgetFactory.tableColumnLocalized(
|
final TableColumn tableColumn = this.widgetFactory.tableColumnLocalized(
|
||||||
this.table,
|
this.table,
|
||||||
column.displayName,
|
column.displayName,
|
||||||
column.tooltip);
|
column.getTooltip());
|
||||||
|
|
||||||
tableColumn.addListener(SWT.Resize, this::adaptColumnWidthChange);
|
tableColumn.addListener(SWT.Resize, this::adaptColumnWidthChange);
|
||||||
tableColumn.setData(COLUMN_DEFINITION, column);
|
tableColumn.setData(COLUMN_DEFINITION, column);
|
||||||
|
|
||||||
if (column.sortable) {
|
if (column.isSortable()) {
|
||||||
tableColumn.addListener(SWT.Selection, event -> {
|
tableColumn.addListener(SWT.Selection, event -> {
|
||||||
if (!column.columnName.equals(this.sortColumn)) {
|
if (!column.columnName.equals(this.sortColumn)) {
|
||||||
applySort(column.columnName);
|
applySort(column.columnName);
|
||||||
|
@ -292,7 +292,7 @@ public class EntityTable<ROW extends Entity> {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (column.widthPercent > 0) {
|
if (column.getWidthProportion() > 0) {
|
||||||
this.columnsWithSameWidth = false;
|
this.columnsWithSameWidth = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -355,14 +355,22 @@ public class EntityTable<ROW extends Entity> {
|
||||||
try {
|
try {
|
||||||
final int currentTableWidth = this.table.getParent().getClientArea().width;
|
final int currentTableWidth = this.table.getParent().getClientArea().width;
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
|
final int pSize = this.columns
|
||||||
|
.stream()
|
||||||
|
.filter(c -> c.getWidthProportion() > 0)
|
||||||
|
.reduce(0,
|
||||||
|
(acc, c) -> acc + c.getWidthProportion(),
|
||||||
|
(acc1, acc2) -> acc1 + acc2);
|
||||||
|
|
||||||
|
final int columnSize = (pSize > 0)
|
||||||
|
? currentTableWidth / pSize
|
||||||
|
: currentTableWidth / this.columns.size();
|
||||||
|
|
||||||
for (final ColumnDefinition<ROW> column : this.columns) {
|
for (final ColumnDefinition<ROW> column : this.columns) {
|
||||||
|
|
||||||
final int percentage = (this.columnsWithSameWidth)
|
|
||||||
? 100 / this.columns.size()
|
|
||||||
: column.widthPercent;
|
|
||||||
|
|
||||||
final TableColumn tableColumn = this.table.getColumn(index);
|
final TableColumn tableColumn = this.table.getColumn(index);
|
||||||
final int newWidth = currentTableWidth / 100 * percentage;
|
final int newWidth = (pSize > 0) ? columnSize * column.getWidthProportion() : columnSize;
|
||||||
tableColumn.setWidth(newWidth);
|
tableColumn.setWidth(newWidth);
|
||||||
if (this.filter != null) {
|
if (this.filter != null) {
|
||||||
this.filter.adaptColumnWidth(this.table.indexOf(tableColumn), newWidth);
|
this.filter.adaptColumnWidth(this.table.indexOf(tableColumn), newWidth);
|
||||||
|
@ -401,7 +409,7 @@ public class EntityTable<ROW extends Entity> {
|
||||||
final TableColumn[] columns = table.table.getColumns();
|
final TableColumn[] columns = table.table.getColumns();
|
||||||
for (int i = 0; i < columns.length; i++) {
|
for (int i = 0; i < columns.length; i++) {
|
||||||
final ColumnDefinition<ROW> columnDefinition = table.columns.get(i);
|
final ColumnDefinition<ROW> columnDefinition = table.columns.get(i);
|
||||||
if (columnDefinition.localized) {
|
if (columnDefinition.isLocalized()) {
|
||||||
for (int j = 0; j < items.length; j++) {
|
for (int j = 0; j < items.length; j++) {
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
final ROW rowData = (ROW) items[j].getData(TABLE_ROW_DATA);
|
final ROW rowData = (ROW) items[j].getData(TABLE_ROW_DATA);
|
||||||
|
|
|
@ -82,10 +82,10 @@ public class TableFilter<ROW extends Entity> {
|
||||||
this.components.clear();
|
this.components.clear();
|
||||||
this.components.addAll(this.entityTable.columns
|
this.components.addAll(this.entityTable.columns
|
||||||
.stream()
|
.stream()
|
||||||
.map(column -> column.filterAttribute)
|
.map(ColumnDefinition::getFilterAttribute)
|
||||||
.map(this::createFilterComponent)
|
.map(this::createFilterComponent)
|
||||||
.map(comp -> comp.build(this.composite))
|
.map(comp -> comp.build(this.composite))
|
||||||
.map(comp -> comp.reset())
|
.map(FilterComponent::reset)
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
|
|
||||||
final FilterComponent lastComp = this.components.get(this.components.size() - 1);
|
final FilterComponent lastComp = this.components.get(this.components.size() - 1);
|
||||||
|
|
|
@ -20,12 +20,12 @@ import java.util.UUID;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
|
||||||
import org.springframework.context.annotation.Lazy;
|
import org.springframework.context.annotation.Lazy;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.context.request.RequestAttributes;
|
import org.springframework.web.context.request.RequestAttributes;
|
||||||
|
@ -55,41 +55,58 @@ import ch.ethz.seb.sebserver.webservice.servicelayer.sebconfig.impl.SebConfigEnc
|
||||||
@WebServiceProfile
|
@WebServiceProfile
|
||||||
public class SebClientConfigServiceImpl implements SebClientConfigService {
|
public class SebClientConfigServiceImpl implements SebClientConfigService {
|
||||||
|
|
||||||
|
private static final String WEB_SERVICE_SERVER_NAME_KEY = "sebserver.webservice.http.server.name";
|
||||||
|
private static final String WEB_SERVICE_HTTP_SCHEME_KEY = "sebserver.webservice.http.scheme";
|
||||||
|
private static final String WEB_SERVICE_SERVER_ADDRESS_KEY = "server.address";
|
||||||
|
private static final String WEB_SERVICE_SERVER_PORT_KEY = "server.port";
|
||||||
|
private static final String WEB_SERVICE_EXAM_API_DISCOVERY_ENDPOINT_KEY =
|
||||||
|
"sebserver.webservice.api.exam.endpoint.discovery";
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(SebClientConfigServiceImpl.class);
|
private static final Logger log = LoggerFactory.getLogger(SebClientConfigServiceImpl.class);
|
||||||
|
|
||||||
private final InstitutionDAO institutionDAO;
|
private final InstitutionDAO institutionDAO;
|
||||||
private final SebClientConfigDAO sebClientConfigDAO;
|
private final SebClientConfigDAO sebClientConfigDAO;
|
||||||
private final ClientCredentialService clientCredentialService;
|
private final ClientCredentialService clientCredentialService;
|
||||||
private final SebConfigEncryptionService sebConfigEncryptionService;
|
private final SebConfigEncryptionService sebConfigEncryptionService;
|
||||||
@Autowired
|
private final PasswordEncoder clientPasswordEncoder;
|
||||||
@Qualifier(WebSecurityConfig.CLIENT_PASSWORD_ENCODER_BEAN_NAME)
|
|
||||||
private PasswordEncoder clientPasswordEncoder;
|
|
||||||
private final ZipService zipService;
|
private final ZipService zipService;
|
||||||
private final String httpScheme;
|
private final String httpScheme;
|
||||||
private final String serverAddress;
|
private final String serverAddress;
|
||||||
|
private final String serverName;
|
||||||
private final String serverPort;
|
private final String serverPort;
|
||||||
private final String discoveryEndpoint;
|
private final String discoveryEndpoint;
|
||||||
|
|
||||||
|
private final String serverURLPrefix;
|
||||||
|
|
||||||
protected SebClientConfigServiceImpl(
|
protected SebClientConfigServiceImpl(
|
||||||
final InstitutionDAO institutionDAO,
|
final InstitutionDAO institutionDAO,
|
||||||
final SebClientConfigDAO sebClientConfigDAO,
|
final SebClientConfigDAO sebClientConfigDAO,
|
||||||
final ClientCredentialService clientCredentialService,
|
final ClientCredentialService clientCredentialService,
|
||||||
final SebConfigEncryptionService sebConfigEncryptionService,
|
final SebConfigEncryptionService sebConfigEncryptionService,
|
||||||
final ZipService zipService,
|
final ZipService zipService,
|
||||||
@Value("${sebserver.webservice.http.scheme}") final String httpScheme,
|
@Qualifier(WebSecurityConfig.CLIENT_PASSWORD_ENCODER_BEAN_NAME) final PasswordEncoder clientPasswordEncoder,
|
||||||
@Value("${server.address}") final String serverAddress,
|
final Environment environment) {
|
||||||
@Value("${server.port}") final String serverPort,
|
|
||||||
@Value("${sebserver.webservice.api.exam.endpoint.discovery}") final String discoveryEndpoint) {
|
|
||||||
|
|
||||||
this.institutionDAO = institutionDAO;
|
this.institutionDAO = institutionDAO;
|
||||||
this.sebClientConfigDAO = sebClientConfigDAO;
|
this.sebClientConfigDAO = sebClientConfigDAO;
|
||||||
this.clientCredentialService = clientCredentialService;
|
this.clientCredentialService = clientCredentialService;
|
||||||
this.sebConfigEncryptionService = sebConfigEncryptionService;
|
this.sebConfigEncryptionService = sebConfigEncryptionService;
|
||||||
this.zipService = zipService;
|
this.zipService = zipService;
|
||||||
this.httpScheme = httpScheme;
|
this.clientPasswordEncoder = clientPasswordEncoder;
|
||||||
this.serverAddress = serverAddress;
|
|
||||||
this.serverPort = serverPort;
|
this.httpScheme = environment.getRequiredProperty(WEB_SERVICE_HTTP_SCHEME_KEY);
|
||||||
this.discoveryEndpoint = discoveryEndpoint;
|
this.serverAddress = environment.getRequiredProperty(WEB_SERVICE_SERVER_ADDRESS_KEY);
|
||||||
|
this.serverName = environment.getProperty(WEB_SERVICE_SERVER_NAME_KEY, (String) null);
|
||||||
|
this.serverPort = environment.getRequiredProperty(WEB_SERVICE_SERVER_PORT_KEY);
|
||||||
|
this.discoveryEndpoint = environment.getRequiredProperty(WEB_SERVICE_EXAM_API_DISCOVERY_ENDPOINT_KEY);
|
||||||
|
|
||||||
|
this.serverURLPrefix = UriComponentsBuilder.newInstance()
|
||||||
|
.scheme(this.httpScheme)
|
||||||
|
.host((StringUtils.isNoneBlank(this.serverName))
|
||||||
|
? this.serverName
|
||||||
|
: this.serverAddress)
|
||||||
|
.port(this.serverPort)
|
||||||
|
.toUriString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -236,11 +253,7 @@ public class SebClientConfigServiceImpl implements SebClientConfigService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String getServerURL() {
|
public String getServerURL() {
|
||||||
return UriComponentsBuilder.newInstance()
|
return this.serverURLPrefix;
|
||||||
.scheme(this.httpScheme)
|
|
||||||
.host(this.serverAddress)
|
|
||||||
.port(this.serverPort)
|
|
||||||
.toUriString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void passwordEncryption(
|
private void passwordEncryption(
|
||||||
|
|
|
@ -43,37 +43,39 @@ public class ExamAPIDiscoveryController {
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
void init() {
|
void init() {
|
||||||
|
final String serverURL = this.sebClientConfigService.getServerURL();
|
||||||
this.DISCOVERY_INFO = new ExamAPIDiscovery(
|
this.DISCOVERY_INFO = new ExamAPIDiscovery(
|
||||||
"Safe Exam Browser Server / Exam API Description",
|
"Safe Exam Browser Server / Exam API Description",
|
||||||
"This is a description of Safe Exam Browser Server's Exam API",
|
"This is a description of Safe Exam Browser Server's Exam API",
|
||||||
this.sebClientConfigService.getServerURL(),
|
serverURL,
|
||||||
Arrays.asList(new ExamAPIDiscovery.ExamAPIVersion(
|
Arrays.asList(new ExamAPIDiscovery.ExamAPIVersion(
|
||||||
"v1",
|
"v1",
|
||||||
Arrays.asList(
|
Arrays.asList(
|
||||||
new ExamAPIDiscovery.Endpoint(
|
new ExamAPIDiscovery.Endpoint(
|
||||||
"access-token-endpoint",
|
"access-token-endpoint",
|
||||||
"request OAuth2 access token with client credentials grant",
|
"request OAuth2 access token with client credentials grant",
|
||||||
API.OAUTH_TOKEN_ENDPOINT,
|
serverURL + API.OAUTH_TOKEN_ENDPOINT,
|
||||||
"Basic"),
|
"Basic"),
|
||||||
new ExamAPIDiscovery.Endpoint(
|
new ExamAPIDiscovery.Endpoint(
|
||||||
"seb-handshake-endpoint",
|
"seb-handshake-endpoint",
|
||||||
"endpoint to establish SEB - SEB Server connection",
|
"endpoint to establish SEB - SEB Server connection",
|
||||||
this.examAPI_V1_Endpoint + API.EXAM_API_HANDSHAKE_ENDPOINT,
|
serverURL + this.examAPI_V1_Endpoint + API.EXAM_API_HANDSHAKE_ENDPOINT,
|
||||||
"Bearer"),
|
"Bearer"),
|
||||||
new ExamAPIDiscovery.Endpoint(
|
new ExamAPIDiscovery.Endpoint(
|
||||||
"seb-configuration-endpoint",
|
"seb-configuration-endpoint",
|
||||||
"endpoint to get SEB exam configuration in exchange of connection-token and exam identifier",
|
"endpoint to get SEB exam configuration in exchange of connection-token and exam identifier",
|
||||||
this.examAPI_V1_Endpoint + API.EXAM_API_CONFIGURATION_REQUEST_ENDPOINT,
|
serverURL + this.examAPI_V1_Endpoint
|
||||||
|
+ API.EXAM_API_CONFIGURATION_REQUEST_ENDPOINT,
|
||||||
"Bearer"),
|
"Bearer"),
|
||||||
new ExamAPIDiscovery.Endpoint(
|
new ExamAPIDiscovery.Endpoint(
|
||||||
"seb-ping-endpoint",
|
"seb-ping-endpoint",
|
||||||
"endpoint to send pings to while running exam",
|
"endpoint to send pings to while running exam",
|
||||||
this.examAPI_V1_Endpoint + API.EXAM_API_PING_ENDPOINT,
|
serverURL + this.examAPI_V1_Endpoint + API.EXAM_API_PING_ENDPOINT,
|
||||||
"Bearer"),
|
"Bearer"),
|
||||||
new ExamAPIDiscovery.Endpoint(
|
new ExamAPIDiscovery.Endpoint(
|
||||||
"seb-ping-endpoint",
|
"seb-ping-endpoint",
|
||||||
"endpoint to send log events to while running exam",
|
"endpoint to send log events to while running exam",
|
||||||
this.examAPI_V1_Endpoint + API.EXAM_API_EVENT_ENDPOINT,
|
serverURL + this.examAPI_V1_Endpoint + API.EXAM_API_EVENT_ENDPOINT,
|
||||||
"Bearer")))));
|
"Bearer")))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ spring.datasource.platform=dev
|
||||||
spring.datasource.hikari.max-lifetime=600000
|
spring.datasource.hikari.max-lifetime=600000
|
||||||
|
|
||||||
sebserver.webservice.http.scheme=http
|
sebserver.webservice.http.scheme=http
|
||||||
|
sebserver.webservice.http.server.name=localhost
|
||||||
sebserver.webservice.api.admin.endpoint=/admin-api/v1
|
sebserver.webservice.api.admin.endpoint=/admin-api/v1
|
||||||
sebserver.webservice.api.admin.accessTokenValiditySeconds=1800
|
sebserver.webservice.api.admin.accessTokenValiditySeconds=1800
|
||||||
sebserver.webservice.api.admin.refreshTokenValiditySeconds=-1
|
sebserver.webservice.api.admin.refreshTokenValiditySeconds=-1
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig;
|
package ch.ethz.seb.sebserver.gui.integration;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
@ -18,8 +18,12 @@ import ch.ethz.seb.sebserver.gbl.model.Domain;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.EntityProcessingReport;
|
import ch.ethz.seb.sebserver.gbl.model.EntityProcessingReport;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.sebconfig.SebClientConfig;
|
import ch.ethz.seb.sebserver.gbl.model.sebconfig.SebClientConfig;
|
||||||
import ch.ethz.seb.sebserver.gbl.util.Result;
|
import ch.ethz.seb.sebserver.gbl.util.Result;
|
||||||
import ch.ethz.seb.sebserver.gui.integration.GuiIntegrationTest;
|
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestServiceImpl;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestServiceImpl;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.ActivateClientConfig;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.DeactivateClientConfig;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.GetClientConfig;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.NewClientConfig;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.seb.clientconfig.SaveClientConfig;
|
||||||
|
|
||||||
@Sql(scripts = { "classpath:schema-test.sql", "classpath:data-test.sql" })
|
@Sql(scripts = { "classpath:schema-test.sql", "classpath:data-test.sql" })
|
||||||
public class ClientConfigTest extends GuiIntegrationTest {
|
public class ClientConfigTest extends GuiIntegrationTest {
|
|
@ -6,7 +6,7 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package ch.ethz.seb.sebserver.gui.service.remote.webservice.api.institution;
|
package ch.ethz.seb.sebserver.gui.integration;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
@ -14,16 +14,18 @@ import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
import org.springframework.test.context.jdbc.Sql;
|
||||||
|
|
||||||
import ch.ethz.seb.sebserver.gbl.api.API;
|
import ch.ethz.seb.sebserver.gbl.api.API;
|
||||||
import ch.ethz.seb.sebserver.gbl.api.JSONMapper;
|
import ch.ethz.seb.sebserver.gbl.api.JSONMapper;
|
||||||
import ch.ethz.seb.sebserver.gbl.model.institution.Institution;
|
import ch.ethz.seb.sebserver.gbl.model.institution.Institution;
|
||||||
import ch.ethz.seb.sebserver.gbl.util.Result;
|
import ch.ethz.seb.sebserver.gbl.util.Result;
|
||||||
import ch.ethz.seb.sebserver.gui.integration.GuiIntegrationTest;
|
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestCall;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestServiceImpl;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestServiceImpl;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.institution.GetInstitution;
|
||||||
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.OAuth2AuthorizationContextHolder;
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.auth.OAuth2AuthorizationContextHolder;
|
||||||
|
|
||||||
|
@Sql(scripts = { "classpath:schema-test.sql", "classpath:data-test.sql" })
|
||||||
public class GetInstitutionTest extends GuiIntegrationTest {
|
public class GetInstitutionTest extends GuiIntegrationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
|
@ -0,0 +1,77 @@
|
||||||
|
/*
|
||||||
|
* 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.integration;
|
||||||
|
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.springframework.test.context.jdbc.Sql;
|
||||||
|
|
||||||
|
import ch.ethz.seb.sebserver.gbl.api.API;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.Domain;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.EntityProcessingReport;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.model.institution.Institution;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.util.Result;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.RestServiceImpl;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.institution.ActivateInstitution;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.institution.GetInstitution;
|
||||||
|
import ch.ethz.seb.sebserver.gui.service.remote.webservice.api.institution.NewInstitution;
|
||||||
|
|
||||||
|
@Sql(scripts = { "classpath:schema-test.sql", "classpath:data-test.sql" })
|
||||||
|
public class UseCasesIntegrationTest extends GuiIntegrationTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void bigUseCasesTest() {
|
||||||
|
|
||||||
|
// *************************************
|
||||||
|
// Use Case 1: SEB Administrator creates a new institution and activate this new institution
|
||||||
|
final RestServiceImpl restService = createRestServiceForUser(
|
||||||
|
"admin",
|
||||||
|
"admin",
|
||||||
|
new NewInstitution(),
|
||||||
|
new ActivateInstitution(),
|
||||||
|
new GetInstitution());
|
||||||
|
|
||||||
|
final Result<Institution> result = restService.getBuilder(NewInstitution.class)
|
||||||
|
.withQueryParam(Domain.INSTITUTION.ATTR_NAME, "Test Institution")
|
||||||
|
.call();
|
||||||
|
|
||||||
|
assertNotNull(result);
|
||||||
|
assertFalse(result.hasError());
|
||||||
|
Institution institution = result.get();
|
||||||
|
assertEquals("Test Institution", institution.name);
|
||||||
|
assertFalse(institution.active);
|
||||||
|
|
||||||
|
final Result<EntityProcessingReport> resultActivation = restService.getBuilder(ActivateInstitution.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, String.valueOf(institution.id))
|
||||||
|
.call();
|
||||||
|
|
||||||
|
assertNotNull(resultActivation);
|
||||||
|
assertFalse(resultActivation.hasError());
|
||||||
|
|
||||||
|
final Result<Institution> resultGet = restService.getBuilder(GetInstitution.class)
|
||||||
|
.withURIVariable(API.PARAM_MODEL_ID, String.valueOf(institution.id))
|
||||||
|
.call();
|
||||||
|
|
||||||
|
assertNotNull(resultGet);
|
||||||
|
assertFalse(resultGet.hasError());
|
||||||
|
institution = resultGet.get();
|
||||||
|
assertEquals("Test Institution", institution.name);
|
||||||
|
assertTrue(institution.active);
|
||||||
|
|
||||||
|
// *************************************
|
||||||
|
// Use Case 2: SEB Administrator creates a new Institutional Administrator user for the
|
||||||
|
// newly created institution and activate this user
|
||||||
|
|
||||||
|
// TODO do as much use cases as possible within this integration test
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -8,7 +8,7 @@
|
||||||
|
|
||||||
package ch.ethz.seb.sebserver.webservice.integration.api.exam;
|
package ch.ethz.seb.sebserver.webservice.integration.api.exam;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.*;
|
||||||
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@ import org.junit.Test;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
|
|
||||||
|
import ch.ethz.seb.sebserver.gbl.api.ExamAPIDiscovery;
|
||||||
|
import ch.ethz.seb.sebserver.gbl.api.ExamAPIDiscovery.ExamAPIVersion;
|
||||||
import ch.ethz.seb.sebserver.gbl.api.JSONMapper;
|
import ch.ethz.seb.sebserver.gbl.api.JSONMapper;
|
||||||
|
|
||||||
public class ExamDiscoveryEndpointTest extends ExamAPIIntegrationTester {
|
public class ExamDiscoveryEndpointTest extends ExamAPIIntegrationTester {
|
||||||
|
@ -33,44 +35,14 @@ public class ExamDiscoveryEndpointTest extends ExamAPIIntegrationTester {
|
||||||
.andExpect(status().isOk())
|
.andExpect(status().isOk())
|
||||||
.andReturn().getResponse().getContentAsString();
|
.andReturn().getResponse().getContentAsString();
|
||||||
|
|
||||||
final Object json = this.jsonMapper.readValue(contentAsString, Object.class);
|
final ExamAPIDiscovery examAPIDiscovery = this.jsonMapper.readValue(contentAsString, ExamAPIDiscovery.class);
|
||||||
assertEquals(
|
assertNotNull(examAPIDiscovery);
|
||||||
"{\r\n" +
|
assertEquals("Safe Exam Browser Server / Exam API Description", examAPIDiscovery.title);
|
||||||
" \"title\" : \"Safe Exam Browser Server / Exam API Description\",\r\n" +
|
assertEquals("This is a description of Safe Exam Browser Server's Exam API", examAPIDiscovery.description);
|
||||||
" \"description\" : \"This is a description of Safe Exam Browser Server's Exam API\",\r\n" +
|
assertTrue(!examAPIDiscovery.versions.isEmpty());
|
||||||
" \"server-location\" : \"http://localhost:0\",\r\n" +
|
final ExamAPIVersion version1 = examAPIDiscovery.versions.iterator().next();
|
||||||
" \"api-versions\" : [ {\r\n" +
|
assertEquals("v1", version1.name);
|
||||||
" \"name\" : \"v1\",\r\n" +
|
assertTrue(!version1.endpoints.isEmpty());
|
||||||
" \"endpoints\" : [ {\r\n" +
|
|
||||||
" \"name\" : \"access-token-endpoint\",\r\n" +
|
|
||||||
" \"descripiton\" : \"request OAuth2 access token with client credentials grant\",\r\n" +
|
|
||||||
" \"location\" : \"/oauth/token\",\r\n" +
|
|
||||||
" \"authorization\" : \"Basic\"\r\n" +
|
|
||||||
" }, {\r\n" +
|
|
||||||
" \"name\" : \"seb-handshake-endpoint\",\r\n" +
|
|
||||||
" \"descripiton\" : \"endpoint to establish SEB - SEB Server connection\",\r\n" +
|
|
||||||
" \"location\" : \"/exam-api/v1/handshake\",\r\n" +
|
|
||||||
" \"authorization\" : \"Bearer\"\r\n" +
|
|
||||||
" }, {\r\n" +
|
|
||||||
" \"name\" : \"seb-configuration-endpoint\",\r\n" +
|
|
||||||
" \"descripiton\" : \"endpoint to get SEB exam configuration in exchange of connection-token and exam identifier\",\r\n"
|
|
||||||
+
|
|
||||||
" \"location\" : \"/exam-api/v1/examconfig\",\r\n" +
|
|
||||||
" \"authorization\" : \"Bearer\"\r\n" +
|
|
||||||
" }, {\r\n" +
|
|
||||||
" \"name\" : \"seb-ping-endpoint\",\r\n" +
|
|
||||||
" \"descripiton\" : \"endpoint to send pings to while running exam\",\r\n" +
|
|
||||||
" \"location\" : \"/exam-api/v1/sebping\",\r\n" +
|
|
||||||
" \"authorization\" : \"Bearer\"\r\n" +
|
|
||||||
" }, {\r\n" +
|
|
||||||
" \"name\" : \"seb-ping-endpoint\",\r\n" +
|
|
||||||
" \"descripiton\" : \"endpoint to send log events to while running exam\",\r\n" +
|
|
||||||
" \"location\" : \"/exam-api/v1/seblog\",\r\n" +
|
|
||||||
" \"authorization\" : \"Bearer\"\r\n" +
|
|
||||||
" } ]\r\n" +
|
|
||||||
" } ]\r\n" +
|
|
||||||
"}",
|
|
||||||
this.jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(json));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue