From 3a8b18c8a8b3c1326c86784ef311f1a030edae85 Mon Sep 17 00:00:00 2001 From: Teo Sarca Date: Wed, 6 Dec 2017 01:48:31 +0200 Subject: [PATCH] ViewColumn.sorting https://github.com/metasfresh/metasfresh-webui-api/issues/717 --- .../descriptor/annotation/ViewColumn.java | 3 ++ .../annotation/ViewColumnHelper.java | 5 ++- .../json/JSONDocumentLayoutElement.java | 6 +++ .../DocumentLayoutElementDescriptor.java | 42 +++++++++++++++---- 4 files changed, 48 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumn.java b/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumn.java index f0dae79c0..e15cc3144 100644 --- a/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumn.java +++ b/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumn.java @@ -47,6 +47,9 @@ */ String captionKey() default ""; + /** true if user is allowed to sort by this column */ + boolean sorting() default true; + /** * Column layout profiles. * diff --git a/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumnHelper.java b/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumnHelper.java index 1288a1fb4..ed16c829f 100644 --- a/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumnHelper.java +++ b/src/main/java/de/metas/ui/web/view/descriptor/annotation/ViewColumnHelper.java @@ -153,6 +153,7 @@ private static ClassViewColumnDescriptor createClassViewColumnDescriptor(final F .caption(Services.get(IMsgBL.class).translatable(captionKey)) .widgetType(viewColumnAnn.widgetType()) .editorRenderMode(viewColumnAnn.editor()) + .allowSorting(viewColumnAnn.sorting()) .fieldReference(FieldReference.of(field)) .layoutsByViewType(layoutsByViewType) .build(); @@ -161,10 +162,11 @@ private static ClassViewColumnDescriptor createClassViewColumnDescriptor(final F private static DocumentLayoutElementDescriptor.Builder createLayoutElement(final ClassViewColumnDescriptor column) { return DocumentLayoutElementDescriptor.builder() + .setGridElement() .setCaption(column.getCaption()) .setWidgetType(column.getWidgetType()) - .setGridElement() .setViewEditorRenderMode(column.getEditorRenderMode()) + .setViewAllowSorting(column.isAllowSorting()) .addField(DocumentLayoutElementFieldDescriptor.builder(column.getFieldName())); } @@ -249,6 +251,7 @@ private static final class ClassViewColumnDescriptor private final DocumentFieldWidgetType widgetType; @NonNull private final ViewEditorRenderMode editorRenderMode; + private final boolean allowSorting; @NonNull private final FieldReference fieldReference; @NonNull diff --git a/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentLayoutElement.java b/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentLayoutElement.java index 1b1f8a2f1..59a9fd9e3 100644 --- a/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentLayoutElement.java +++ b/src/main/java/de/metas/ui/web/window/datatypes/json/JSONDocumentLayoutElement.java @@ -114,6 +114,10 @@ public static JSONDocumentLayoutElement debuggingField(final String fieldName, f @JsonProperty("viewEditorRenderMode") @JsonInclude(JsonInclude.Include.NON_NULL) private final String viewEditorRenderMode; + @JsonProperty("sortable") + @JsonInclude(JsonInclude.Include.NON_NULL) + private final Boolean viewAllowSorting; + @JsonProperty("fields") @JsonInclude(Include.NON_EMPTY) @@ -155,6 +159,7 @@ private JSONDocumentLayoutElement(final DocumentLayoutElementDescriptor element, gridAlign = JSONLayoutAlign.fromNullable(element.getGridAlign()); viewEditorRenderMode = element.getViewEditorRenderMode() != null ? element.getViewEditorRenderMode().toJson() : null; + viewAllowSorting = element.isGridElement() ? element.isViewAllowSorting() : null; fields = JSONDocumentLayoutElementField.ofSet(element.getFields(), jsonOpts); } @@ -174,6 +179,7 @@ private JSONDocumentLayoutElement(final String fieldName, final DocumentFieldWid size = null; gridAlign = JSONLayoutAlign.right; viewEditorRenderMode = null; + viewAllowSorting = null; fields = ImmutableSet.of(new JSONDocumentLayoutElementField( // fieldName, (JSONFieldType)null // type diff --git a/src/main/java/de/metas/ui/web/window/descriptor/DocumentLayoutElementDescriptor.java b/src/main/java/de/metas/ui/web/window/descriptor/DocumentLayoutElementDescriptor.java index e0b255f61..16a3b401c 100644 --- a/src/main/java/de/metas/ui/web/window/descriptor/DocumentLayoutElementDescriptor.java +++ b/src/main/java/de/metas/ui/web/window/descriptor/DocumentLayoutElementDescriptor.java @@ -1,6 +1,5 @@ package de.metas.ui.web.window.descriptor; -import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Optional; import java.util.Set; @@ -43,8 +42,7 @@ * #L% */ -@SuppressWarnings("serial") -public final class DocumentLayoutElementDescriptor implements Serializable +public final class DocumentLayoutElementDescriptor { public static final Builder builder() { @@ -75,6 +73,7 @@ public static final Builder builder(final DocumentFieldDescriptor... fields) } private final String internalName; + private final boolean gridElement; private final ITranslatableString caption; private final ITranslatableString description; @@ -90,6 +89,7 @@ public static final Builder builder(final DocumentFieldDescriptor... fields) private final LayoutAlign gridAlign; private final ViewEditorRenderMode viewEditorRenderMode; + private final boolean viewAllowSorting; private final Set fields; @@ -99,9 +99,9 @@ public static final Builder builder(final DocumentFieldDescriptor... fields) private DocumentLayoutElementDescriptor(final Builder builder) { - super(); - internalName = builder.getInternalName(); + gridElement = builder.isGridElement(); + caption = builder.getCaption(); description = builder.getDescription(); @@ -115,6 +115,7 @@ private DocumentLayoutElementDescriptor(final Builder builder) gridAlign = builder.getGridAlign(); viewEditorRenderMode = builder.getViewEditorRenderMode(); + viewAllowSorting = builder.isViewAllowSorting(); advancedField = builder.isAdvancedField(); @@ -134,6 +135,11 @@ public String toString() .add("fields", fields.isEmpty() ? null : fields) .toString(); } + + public boolean isGridElement() + { + return gridElement; + } public String getCaption(final String adLanguage) { @@ -193,6 +199,11 @@ public ViewEditorRenderMode getViewEditorRenderMode() return viewEditorRenderMode; } + public boolean isViewAllowSorting() + { + return viewAllowSorting; + } + public boolean isAdvancedField() { return advancedField; @@ -235,6 +246,7 @@ public static final class Builder private boolean _gridElement = false; private ViewEditorRenderMode viewEditorRenderMode = null; + private boolean viewAllowSorting = true; private boolean _advancedField = false; private final LinkedHashMap _fieldsBuilders = new LinkedHashMap<>(); @@ -497,6 +509,11 @@ public boolean isConsumed() return consumed; } + public boolean isGridElement() + { + return _gridElement; + } + /** * Flags this element as a "grid element". */ @@ -505,7 +522,7 @@ public Builder setGridElement() _gridElement = true; return this; } - + /** * Reset the "grid element" flag. * @@ -521,7 +538,7 @@ public Builder setNotGridElement() private LayoutAlign getGridAlign() { - return _gridElement ? getWidgetType().getGridAlign() : null; + return isGridElement() ? getWidgetType().getGridAlign() : null; } public Builder setViewEditorRenderMode(final ViewEditorRenderMode gridEditorRenderMode) @@ -534,6 +551,17 @@ private ViewEditorRenderMode getViewEditorRenderMode() { return viewEditorRenderMode; } + + public Builder setViewAllowSorting(boolean viewAllowSorting) + { + this.viewAllowSorting = viewAllowSorting; + return this; + } + + private boolean isViewAllowSorting() + { + return viewAllowSorting; + } public Builder setButtonActionDescriptor(final ButtonFieldActionDescriptor buttonActionDescriptor) {