SEBSERV-30 minor fixes

This commit is contained in:
anhefti 2019-04-01 13:44:15 +02:00
parent 6c27f2aeeb
commit 7940af0deb
16 changed files with 85 additions and 41 deletions

View file

@ -24,6 +24,7 @@ public final class Constants {
public static final Character LIST_SEPARATOR_CHAR = ',';
public static final String LIST_SEPARATOR = ",";
public static final String EMBEDDED_LIST_SEPARATOR = "|";
public static final String EMPTY_NOTE = "--";
public static final String FORM_URL_ENCODED_SEPARATOR = "&";
public static final String FORM_URL_ENCODED_NAME_VALUE_SEPARATOR = "=";

View file

@ -25,6 +25,9 @@ import org.joda.time.DateTimeZone;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import ch.ethz.seb.sebserver.gbl.Constants;
import ch.ethz.seb.sebserver.gbl.model.Domain;
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator.Threshold;
import ch.ethz.seb.sebserver.gbl.util.Utils;
public class POSTMapper {
@ -151,6 +154,24 @@ public class POSTMapper {
return Utils.toDateTime(value);
}
public List<Threshold> getThresholds() {
final List<String> thresholdStrings = this.params.get(Domain.THRESHOLD.REFERENCE_NAME);
if (thresholdStrings == null || thresholdStrings.isEmpty()) {
return Collections.emptyList();
}
return thresholdStrings.stream()
.map(ts -> {
try {
final String[] split = StringUtils.split(ts, Constants.EMBEDDED_LIST_SEPARATOR);
return new Threshold(Double.parseDouble(split[0]), split[1]);
} catch (final Exception e) {
return null;
}
})
.collect(Collectors.toList());
}
@SuppressWarnings("unchecked")
public <T extends POSTMapper> T putIfAbsent(final String name, final String value) {
this.params.putIfAbsent(name, Arrays.asList(value));

View file

@ -9,7 +9,6 @@
package ch.ethz.seb.sebserver.gbl.model.exam;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import javax.validation.constraints.NotNull;
@ -93,7 +92,7 @@ public final class Indicator implements GrantEntity {
this.name = postParams.getString(Domain.INDICATOR.ATTR_NAME);
this.type = postParams.getEnum(Domain.INDICATOR.ATTR_TYPE, IndicatorType.class);
this.defaultColor = postParams.getString(Domain.INDICATOR.ATTR_COLOR);
this.thresholds = Collections.emptyList();
this.thresholds = postParams.getThresholds();
}
@Override

View file

@ -251,7 +251,8 @@ public class ExamForm implements TemplateComposer {
final EntityTable<Indicator> indicatorTable =
this.pageService.entityTableBuilder(restService.getRestCall(GetIndicators.class))
.withEmptyMessage(new LocTextKey("sebserver.exam.indicator.list.empty"))
.withPaging(3)
.withPaging(5)
.hideNavigation()
.withColumn(new ColumnDefinition<>(
Domain.INDICATOR.ATTR_NAME,
nameColumnKey,
@ -267,6 +268,10 @@ public class ExamForm implements TemplateComposer {
thresholdColumnKey,
ExamForm::thresholdsValue,
false))
.withDefaultAction(actionBuilder
.newAction(ActionDefinition.EXAM_INDICATOR_MODIFY_FROM_LIST)
.withParentEntityKey(entityKey)
.create())
.compose(content);

View file

@ -104,7 +104,7 @@ public class IndicatorForm implements TemplateComposer {
indicator.getModelId())
.putStaticValue(
Domain.EXAM.ATTR_INSTITUTION_ID,
exam.getModelId())
String.valueOf(exam.getInstitutionId()))
.putStaticValue(
Domain.INDICATOR.ATTR_EXAM_ID,
parentEntityKey.getModelId())

View file

@ -270,19 +270,14 @@ public class ActivitiesPane implements TemplateComposer {
@Override
public void notify(final ActionEvent event) {
// TODO
// final MainPageState mainPageState = MainPageState.get();
// mainPageState.action = event.action;
if (!event.activity) {
final EntityKey entityKey = event.action.getEntityKey();
final String modelId = (entityKey != null) ? entityKey.modelId : null;
final TreeItem item = findItemByActionDefinition(
this.navigation.getItems(),
event.action.definition.targetState.activityAnchor(),
modelId);
if (item != null) {
this.navigation.select(item);
}
final EntityKey entityKey = event.action.getEntityKey();
final String modelId = (entityKey != null) ? entityKey.modelId : null;
final TreeItem item = findItemByActionDefinition(
this.navigation.getItems(),
event.action.definition.targetState.activityAnchor(),
modelId);
if (item != null) {
this.navigation.select(item);
}
}
}

View file

@ -65,6 +65,7 @@ public class FormBuilder {
final GridLayout layout = new GridLayout(rows, true);
layout.horizontalSpacing = 10;
layout.verticalSpacing = 10;
layout.marginBottom = 50;
layout.marginLeft = 10;
layout.marginTop = 0;
this.formParent.setLayout(layout);

View file

@ -17,6 +17,7 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Label;
import ch.ethz.seb.sebserver.gbl.Constants;
import ch.ethz.seb.sebserver.gbl.model.Domain;
import ch.ethz.seb.sebserver.gbl.model.exam.Indicator.Threshold;
import ch.ethz.seb.sebserver.gui.widget.ThresholdList;
@ -34,7 +35,8 @@ public class ThresholdListBuilder extends FieldBuilder<Collection<Threshold>> {
void build(final FormBuilder builder) {
final Label lab = builder.labelLocalized(builder.formParent, this.label, this.spanLabel);
if (builder.readonly || this.readonly) {
// TODO do we need a read-only view for this?
return;
} else {
final ThresholdList thresholdList = builder.widgetFactory.thresholdList(
builder.formParent,
@ -53,8 +55,13 @@ public class ThresholdListBuilder extends FieldBuilder<Collection<Threshold>> {
return null;
}
// thresholds={value}|{color},thresholds={value}|{color}...
return StringUtils.join(thresholds.stream()
.map(t -> String.valueOf(t.getValue()) + Constants.FORM_URL_ENCODED_NAME_VALUE_SEPARATOR + t.getColor())
.map(t -> Domain.THRESHOLD.REFERENCE_NAME
+ Constants.FORM_URL_ENCODED_NAME_VALUE_SEPARATOR
+ String.valueOf(t.getValue())
+ Constants.EMBEDDED_LIST_SEPARATOR
+ t.getColor())
.collect(Collectors.toList()),
Constants.LIST_SEPARATOR);
}

View file

@ -180,9 +180,9 @@ public interface PageService {
return this;
}
public PageActionBuilder withSimpleRestCall(
public <T> PageActionBuilder withSimpleRestCall(
final RestService restService,
final Class<? extends RestCall<?>> restCallType) {
final Class<? extends RestCall<T>> restCallType) {
this.exec = action -> {
restService.getBuilder(restCallType)

View file

@ -15,20 +15,10 @@ import ch.ethz.seb.sebserver.gui.service.page.impl.PageAction;
public final class ActionEvent implements PageEvent {
public final PageAction action;
@Deprecated // use the ActionDefinition
public final boolean activity;
public ActionEvent(final PageAction action) {
super();
this.action = action;
this.activity = false;
}
@Deprecated
public ActionEvent(final PageAction action, final boolean activity) {
super();
this.action = action;
this.activity = activity;
}
}

View file

@ -205,8 +205,8 @@ public class OAuth2AuthorizationContextHolder implements AuthorizationContextHol
log.debug("Trying to login for user: {}", username);
try {
final OAuth2AccessToken accessToken = this.restTemplate.getAccessToken();
log.debug("Got token for user: {} : {}", username, "--");
this.restTemplate.getAccessToken();
log.debug("Got token for user: {}", username);
this.loggedInUser = getLoggedInUser();
return true;
} catch (final OAuth2AccessDeniedException | AccessDeniedException e) {

View file

@ -82,7 +82,8 @@ public class EntityTable<ROW extends Entity> {
final List<TableRowAction> actions,
final int pageSize,
final LocTextKey emptyMessage,
final Function<EntityTable<ROW>, PageAction> defaultActionFunction) {
final Function<EntityTable<ROW>, PageAction> defaultActionFunction,
final boolean hideNavigation) {
this.composite = new Composite(parent, type);
this.pageService = pageService;
@ -143,7 +144,7 @@ public class EntityTable<ROW extends Entity> {
}
}
this.navigator = new TableNavigator(this);
this.navigator = (hideNavigation) ? null : new TableNavigator(this);
createTableColumns();
updateTableRows(
@ -287,7 +288,9 @@ public class EntityTable<ROW extends Entity> {
.withQueryParams((this.filter != null) ? this.filter.getFilterParameter() : null)
.call()
.map(this::createTableRowsFromPage)
.map(this.navigator::update)
.map(pageData -> (this.navigator != null)
? this.navigator.update(pageData)
: pageData)
.onErrorDo(t -> {
// TODO error handling
});
@ -357,8 +360,6 @@ public class EntityTable<ROW extends Entity> {
this.filter.adaptColumnWidth(
this.table.indexOf(tableColumn),
tableColumn.getWidth())) {
//this.composite.layout(true, true);
}
}
}

View file

@ -48,6 +48,7 @@ public class TableBuilder<ROW extends Entity> {
private Function<EntityTable<ROW>, PageAction> defaultActionFunction;
private int pageSize = -1;
private int type = SWT.NONE;
private boolean hideNavigation = false;
public TableBuilder(
final PageService pageService,
@ -57,6 +58,11 @@ public class TableBuilder<ROW extends Entity> {
this.restCall = restCall;
}
public TableBuilder<ROW> hideNavigation() {
this.hideNavigation = true;
return this;
}
public TableBuilder<ROW> withEmptyMessage(final LocTextKey emptyMessage) {
this.emptyMessage = emptyMessage;
return this;
@ -112,7 +118,8 @@ public class TableBuilder<ROW extends Entity> {
this.actions,
this.pageSize,
this.emptyMessage,
this.defaultActionFunction);
this.defaultActionFunction,
this.hideNavigation);
}
}

View file

@ -170,6 +170,17 @@ public class IndicatorDAOImpl implements IndicatorDAO {
modified.defaultColor);
this.indicatorRecordMapper.insert(newRecord);
// insert thresholds
modified.thresholds
.stream()
.map(threshold -> new ThresholdRecord(
null,
newRecord.getId(),
new BigDecimal(threshold.value),
threshold.color))
.forEach(this.thresholdRecordMapper::insert);
return newRecord;
})
.flatMap(this::toDomainModel)

View file

@ -111,7 +111,11 @@ public interface LmsAPIService {
end = quizzes.size();
}
return new Page<>(quizzes.size() / pageSize, pageNumber, sortAttribute, quizzes.subList(start, end));
return new Page<>(
(quizzes.size() / pageSize) + 1,
pageNumber,
sortAttribute,
quizzes.subList(start, end));
};
}

View file

@ -85,7 +85,9 @@ public class QuizImportController {
EntityType.EXAM,
institutionId);
final FilterMap filterMap = new FilterMap(allRequestParams);
final FilterMap filterMap = new FilterMap(allRequestParams)
.putIfAbsent(Entity.FILTER_ATTR_INSTITUTION, String.valueOf(institutionId));
return this.lmsAPIService.requestQuizDataPage(
(pageNumber != null)
? pageNumber