From 8498a3dd5907c4f132dbfc5f72ae86c93adfe662 Mon Sep 17 00:00:00 2001 From: Teo Sarca Date: Mon, 12 Jun 2017 14:48:40 +0300 Subject: [PATCH] Password process parameters shall allow showing the password https://github.com/metasfresh/metasfresh-webui-api/issues/453 --- .../ADProcessDescriptorsFactory.java | 3 +++ .../web/process/descriptor/ProcessLayout.java | 1 + .../json/JSONDocumentLayoutElement.java | 7 ++++++ .../descriptor/DocumentFieldDescriptor.java | 22 ++++++++++++++++++- .../DocumentLayoutElementDescriptor.java | 21 ++++++++++++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java b/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java index b17fd7f02..66e9cc69e 100644 --- a/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java +++ b/src/main/java/de/metas/ui/web/process/adprocess/ADProcessDescriptorsFactory.java @@ -205,6 +205,8 @@ private DocumentFieldDescriptor.Builder createProcessParaDescriptor(final WebuiP final DocumentFieldWidgetType widgetType = DescriptorsFactoryHelper.extractWidgetType(parameterName, adProcessParam.getAD_Reference_ID(), lookupDescriptor); final Class valueClass = DescriptorsFactoryHelper.getValueClass(widgetType, lookupDescriptor); + final boolean allowShowPassword = widgetType == DocumentFieldWidgetType.Password ? true : false; // process parameters shall always allow displaying the password + final ILogicExpression readonlyLogic = expressionFactory.compileOrDefault(adProcessParam.getReadOnlyLogic(), ConstantLogicExpression.FALSE, ILogicExpression.class); final ILogicExpression displayLogic = expressionFactory.compileOrDefault(adProcessParam.getDisplayLogic(), ConstantLogicExpression.TRUE, ILogicExpression.class); @@ -225,6 +227,7 @@ private DocumentFieldDescriptor.Builder createProcessParaDescriptor(final WebuiP // .setValueClass(valueClass) .setWidgetType(widgetType) + .setAllowShowPassword(allowShowPassword) .setLookupDescriptorProvider(lookupDescriptorProvider) // .setDefaultValueExpression(defaultValueExpr) diff --git a/src/main/java/de/metas/ui/web/process/descriptor/ProcessLayout.java b/src/main/java/de/metas/ui/web/process/descriptor/ProcessLayout.java index 95317f88d..389402901 100644 --- a/src/main/java/de/metas/ui/web/process/descriptor/ProcessLayout.java +++ b/src/main/java/de/metas/ui/web/process/descriptor/ProcessLayout.java @@ -181,6 +181,7 @@ public Builder addElement(final DocumentFieldDescriptor processParaDescriptor) .setCaption(processParaDescriptor.getCaption()) .setDescription(processParaDescriptor.getDescription()) .setWidgetType(processParaDescriptor.getWidgetType()) + .setAllowShowPassword(processParaDescriptor.isAllowShowPassword()) .addField(DocumentLayoutElementFieldDescriptor.builder(processParaDescriptor.getFieldName()) .setLookupSource(processParaDescriptor.getLookupSourceType()) .setPublicField(true) 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 9efa806f9..5518919a6 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 @@ -84,6 +84,11 @@ public static JSONDocumentLayoutElement debuggingField(final String fieldName, f @JsonProperty("widgetType") private final JSONLayoutWidgetType widgetType; + @JsonProperty("allowShowPassword") + @JsonInclude(JsonInclude.Include.NON_NULL) + private final Boolean allowShowPassword; // in case widgetType is Password + + @JsonProperty("buttonProcessId") @JsonInclude(JsonInclude.Include.NON_NULL) private final ProcessId buttonProcessId; @@ -127,6 +132,7 @@ private JSONDocumentLayoutElement(final DocumentLayoutElementDescriptor element, description = element.getDescription(adLanguage); widgetType = JSONLayoutWidgetType.fromNullable(element.getWidgetType()); + allowShowPassword = element.isAllowShowPassword() ? Boolean.TRUE : null; precision = element.getPrecision().orElse(null); final ButtonFieldActionDescriptor buttonAction = element.getButtonActionDescriptor(); @@ -154,6 +160,7 @@ private JSONDocumentLayoutElement(final String fieldName, final DocumentFieldWid description = null; this.widgetType = JSONLayoutWidgetType.fromNullable(widgetType); + allowShowPassword = null; buttonProcessId = null; precision = null; diff --git a/src/main/java/de/metas/ui/web/window/descriptor/DocumentFieldDescriptor.java b/src/main/java/de/metas/ui/web/window/descriptor/DocumentFieldDescriptor.java index 4add8ca07..0ee3e8bd5 100644 --- a/src/main/java/de/metas/ui/web/window/descriptor/DocumentFieldDescriptor.java +++ b/src/main/java/de/metas/ui/web/window/descriptor/DocumentFieldDescriptor.java @@ -91,6 +91,7 @@ public static final Builder builder(final String fieldName) private final boolean calculated; private final DocumentFieldWidgetType widgetType; + private final boolean allowShowPassword; // in case widgetType is Password private final ButtonFieldActionDescriptor buttonActionDescriptor; private final Class valueClass; @@ -150,6 +151,7 @@ private DocumentFieldDescriptor(final Builder builder) calculated = builder.isCalculated(); widgetType = builder.getWidgetType(); + allowShowPassword = builder.isAllowShowPassword(); buttonActionDescriptor = builder.getButtonActionDescriptor(); valueClass = builder.getValueClass(); @@ -236,6 +238,11 @@ public DocumentFieldWidgetType getWidgetType() { return widgetType; } + + public boolean isAllowShowPassword() + { + return allowShowPassword; + } public ButtonFieldActionDescriptor getButtonActionDescriptor() { @@ -656,7 +663,9 @@ public static final class Builder private boolean calculated; private DocumentFieldWidgetType _widgetType; - public Class _valueClass; + private Class _valueClass; + private boolean _allowShowPassword = false; // in case widgetType is Password + // Lookup private LookupDescriptorProvider lookupDescriptorProvider = LookupDescriptorProvider.NULL; @@ -872,6 +881,17 @@ public DocumentFieldWidgetType getWidgetType() Preconditions.checkNotNull(_widgetType, "widgetType is null"); return _widgetType; } + + public Builder setAllowShowPassword(boolean allowShowPassword) + { + this._allowShowPassword = allowShowPassword; + return this; + } + + private boolean isAllowShowPassword() + { + return _allowShowPassword; + } public Builder setLookupDescriptorProvider(final LookupDescriptorProvider lookupDescriptorProvider) { 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 52e11ef85..e3ade3d81 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 @@ -81,6 +81,7 @@ public static final Builder builder(final DocumentFieldDescriptor... fields) private final DocumentFieldWidgetType widgetType; private final Optional precision; + private final boolean allowShowPassword; // in case widgetType is Password private final ButtonFieldActionDescriptor buttonActionDescriptor; private final LayoutType layoutType; @@ -104,6 +105,7 @@ private DocumentLayoutElementDescriptor(final Builder builder) widgetType = builder.getWidgetType(); precision = Optional.ofNullable(builder.getPrecision()); + allowShowPassword = builder.isAllowShowPassword(); buttonActionDescriptor = builder.getButtonActionDescriptor(); layoutType = builder.getLayoutType(); @@ -161,6 +163,11 @@ public Optional getPrecision() { return precision; } + + public boolean isAllowShowPassword() + { + return allowShowPassword; + } public LayoutType getLayoutType() { @@ -204,8 +211,11 @@ public static final class Builder private String _internalName; private ITranslatableString _caption = null; private ITranslatableString _description = null; + private DocumentFieldWidgetType _widgetType; + private boolean _allowShowPassword = false; // in case widgetType is Password private ButtonFieldActionDescriptor buttonActionDescriptor = null; + private LayoutType _layoutType; private WidgetSize _widgetSize; private boolean _gridElement = false; @@ -360,6 +370,17 @@ private DocumentFieldWidgetType getWidgetType() Check.assumeNotNull(_widgetType, DocumentLayoutBuildException.class, "Parameter widgetType is not null for {}", this); return _widgetType; } + + public Builder setAllowShowPassword(boolean allowShowPassword) + { + this._allowShowPassword = allowShowPassword; + return this; + } + + private boolean isAllowShowPassword() + { + return _allowShowPassword; + } private Integer getPrecision() {