You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2018/02/22 16:50:40 UTC

[2/2] syncope git commit: [SYNCOPE-1269] Aligning conf param create with PlainSchema create

[SYNCOPE-1269] Aligning conf param create with PlainSchema create


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/ccca7072
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/ccca7072
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/ccca7072

Branch: refs/heads/master
Commit: ccca7072caaa538c28818195e6d744fc61ac1a6e
Parents: 691693c
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Feb 22 17:24:01 2018 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Feb 22 17:50:23 2018 +0100

----------------------------------------------------------------------
 .../ParametersCreateWizardSchemaStep.java       | 316 ++++++++++++++++---
 .../console/panels/PlainSchemaDetails.java      |  26 +-
 .../ParametersCreateWizardSchemaStep.html       |  27 +-
 .../ParametersCreateWizardSchemaStep.properties |  10 +-
 ...rametersCreateWizardSchemaStep_it.properties |  10 +-
 ...rametersCreateWizardSchemaStep_ja.properties |  10 +-
 ...etersCreateWizardSchemaStep_pt_BR.properties |  12 +-
 ...rametersCreateWizardSchemaStep_ru.properties |  14 +-
 8 files changed, 341 insertions(+), 84 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
index a0b0d7c..4eed5ad 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.java
@@ -20,22 +20,30 @@ package org.apache.syncope.client.console.panels;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleApplication;
+import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.commons.PropertyList;
 import org.apache.syncope.client.console.init.ConsoleInitializer;
 import org.apache.syncope.client.console.init.MIMETypesLoader;
+import org.apache.syncope.client.console.rest.ImplementationRestClient;
 import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormComponentUpdatingBehavior;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
+import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
+import org.apache.syncope.common.lib.types.ImplementationType;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.wizard.WizardStep;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.DropDownChoice;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.LoadableDetachableModel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 
@@ -46,6 +54,14 @@ public class ParametersCreateWizardSchemaStep extends WizardStep {
     private static final MIMETypesLoader MIME_TYPES_LOADER = (MIMETypesLoader) SyncopeConsoleApplication.get().
             getServletContext().getAttribute(ConsoleInitializer.MIMETYPES_LOADER);
 
+    private final ImplementationRestClient implRestClient = new ImplementationRestClient();
+
+    private final MultiFieldPanel<String> enumerationValues;
+
+    private final MultiFieldPanel<String> enumerationKeys;
+
+    private final AjaxDropDownChoicePanel<String> validator;
+
     public ParametersCreateWizardSchemaStep(final ParametersCreateWizardPanel.ParametersForm modelObject) {
         modelObject.getPlainSchemaTO().setMandatoryCondition("false");
 
@@ -53,15 +69,34 @@ public class ParametersCreateWizardSchemaStep extends WizardStep {
         this.setOutputMarkupId(true);
         content.setOutputMarkupId(true);
         add(content);
+
         final AjaxDropDownChoicePanel<AttrSchemaType> type = new AjaxDropDownChoicePanel<>(
                 "type", getString("type"), new PropertyModel<>(modelObject.getPlainSchemaTO(), "type"));
         type.setChoices(Arrays.asList(AttrSchemaType.values()));
         content.add(type);
 
-        final MultiFieldPanel<String> panel = new MultiFieldPanel.Builder<String>(
+        // long, double, date
+        final AjaxTextFieldPanel conversionPattern = new AjaxTextFieldPanel("conversionPattern",
+                getString("conversionPattern"), new PropertyModel<String>(
+                modelObject.getPlainSchemaTO(), "conversionPattern"));
+        content.add(conversionPattern);
+
+        final WebMarkupContainer conversionParams = new WebMarkupContainer("conversionParams");
+        conversionParams.setOutputMarkupPlaceholderTag(true);
+        conversionParams.add(conversionPattern);
+        content.add(conversionParams);
+
+        final WebMarkupContainer typeParams = new WebMarkupContainer("typeParams");
+        typeParams.setOutputMarkupPlaceholderTag(true);
+
+        // enum
+        final AjaxTextFieldPanel enumerationValuesPanel = new AjaxTextFieldPanel("panel", "enumerationValues",
+                new Model<>(null));
+
+        enumerationValues = new MultiFieldPanel.Builder<String>(
                 new PropertyModel<List<String>>(modelObject.getPlainSchemaTO(), "enumerationValues") {
 
-            private static final long serialVersionUID = 3985215199105092649L;
+            private static final long serialVersionUID = -4953564762272833993L;
 
             @Override
             public PropertyList<PlainSchemaTO> getObject() {
@@ -92,76 +127,263 @@ public class ParametersCreateWizardSchemaStep extends WizardStep {
                 return StringUtils.EMPTY;
             }
 
-        }.build("values", getString("values"), new AjaxTextFieldPanel(
-                "panel", getString("values"), new Model<String>(), false));
+        }.build(
+                "enumerationValues",
+                "enumerationValues",
+                enumerationValuesPanel);
 
-        panel.setVisible(false);
-        content.add(panel);
+        enumerationKeys = new MultiFieldPanel.Builder<String>(
+                new PropertyModel<List<String>>(modelObject.getPlainSchemaTO(), "enumerationKeys") {
 
-        //binary
-        final AjaxTextFieldPanel mimeType = new AjaxTextFieldPanel("mimeType",
-                "MIME-Type", new PropertyModel<>(modelObject.getPlainSchemaTO(), "mimeType"));
-        mimeType.setVisible(false);
-        content.add(mimeType);
+            private static final long serialVersionUID = -4953564762272833993L;
 
-        //encrypted
+            @Override
+            public PropertyList<PlainSchemaTO> getObject() {
+                return new PropertyList<PlainSchemaTO>() {
+
+                    @Override
+                    public String getValues() {
+                        return modelObject.getPlainSchemaTO().getEnumerationKeys();
+                    }
+
+                    @Override
+                    public void setValues(final List<String> list) {
+                        modelObject.getPlainSchemaTO().setEnumerationKeys(PropertyList.getEnumValuesAsString(list));
+                    }
+                };
+            }
+
+            @Override
+            public void setObject(final List<String> object) {
+                modelObject.getPlainSchemaTO().setEnumerationKeys(PropertyList.getEnumValuesAsString(object));
+            }
+        }) {
+
+            private static final long serialVersionUID = -8752965211744734798L;
+
+            @Override
+            protected String newModelObject() {
+                return StringUtils.EMPTY;
+            }
+
+        }.build(
+                "enumerationKeys",
+                "enumerationKeys",
+                new AjaxTextFieldPanel("panel", "enumerationKeys", new Model<String>()));
+
+        final WebMarkupContainer enumParams = new WebMarkupContainer("enumParams");
+        enumParams.setOutputMarkupPlaceholderTag(true);
+        enumParams.add(enumerationValues);
+        enumParams.add(enumerationKeys);
+        typeParams.add(enumParams);
+
+        // encrypted
         final AjaxTextFieldPanel secretKey = new AjaxTextFieldPanel("secretKey",
-                "Secret-key", new PropertyModel<>(modelObject.getPlainSchemaTO(), "secretKey"));
+                getString("secretKey"), new PropertyModel<>(modelObject.getPlainSchemaTO(), "secretKey"));
 
         final AjaxDropDownChoicePanel<CipherAlgorithm> cipherAlgorithm = new AjaxDropDownChoicePanel<>(
-                "cipherAlgorithm", "Cipher-algorithm",
+                "cipherAlgorithm", getString("cipherAlgorithm"),
                 new PropertyModel<>(modelObject.getPlainSchemaTO(), "cipherAlgorithm"));
 
         cipherAlgorithm.setChoices(Arrays.asList(CipherAlgorithm.values()));
-        secretKey.setVisible(false);
-        cipherAlgorithm.setVisible(false);
-        content.add(secretKey);
-        content.add(cipherAlgorithm);
 
-        showHide(type, secretKey, cipherAlgorithm, mimeType);
+        final WebMarkupContainer encryptedParams = new WebMarkupContainer("encryptedParams");
+        encryptedParams.setOutputMarkupPlaceholderTag(true);
+        encryptedParams.add(secretKey);
+        encryptedParams.add(cipherAlgorithm);
+
+        typeParams.add(encryptedParams);
+
+        // binary
+        final AjaxTextFieldPanel mimeType = new AjaxTextFieldPanel("mimeType",
+                getString("mimeType"), new PropertyModel<>(modelObject.getPlainSchemaTO(), "mimeType"));
 
-        type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior("onchange") {
+        final WebMarkupContainer binaryParams = new WebMarkupContainer("binaryParams");
+        binaryParams.setOutputMarkupPlaceholderTag(true);
+        binaryParams.add(mimeType);
+        typeParams.add(binaryParams);
+        content.add(typeParams);
+
+        // show or hide
+        showHide(modelObject.getPlainSchemaTO(), type,
+                conversionParams, conversionPattern,
+                enumParams, enumerationValuesPanel, enumerationValues, enumerationKeys,
+                encryptedParams, secretKey, cipherAlgorithm,
+                binaryParams, mimeType);
+
+        type.getField().add(new IndicatorAjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
             private static final long serialVersionUID = -1107858522700306810L;
 
             @Override
             protected void onUpdate(final AjaxRequestTarget target) {
-                if ("enum".equalsIgnoreCase(type.getField().getModelObject().name())) {
-                    panel.setVisible(true);
-                    content.add(panel);
-                    target.add(content);
-                } else {
-                    panel.setVisible(false);
-                    content.add(panel);
-                    target.add(content);
-                }
-                ParametersCreateWizardSchemaStep.this.showHide(type, secretKey, cipherAlgorithm, mimeType);
+                ParametersCreateWizardSchemaStep.this.showHide(modelObject.getPlainSchemaTO(), type,
+                        conversionParams, conversionPattern,
+                        enumParams, enumerationValuesPanel, enumerationValues, enumerationKeys,
+                        encryptedParams, secretKey, cipherAlgorithm,
+                        binaryParams, mimeType);
+                target.add(conversionParams);
+                target.add(typeParams);
+                target.add(validator);
             }
         });
 
-        final AjaxCheckBoxPanel multiValue = new AjaxCheckBoxPanel("panel", getString("multivalue"),
-                new PropertyModel<>(modelObject.getPlainSchemaTO(), "multivalue"), false);
-        content.add(multiValue);
+        IModel<List<String>> validators = new LoadableDetachableModel<List<String>>() {
+
+            private static final long serialVersionUID = 5275935387613157437L;
+
+            @Override
+            protected List<String> load() {
+                return implRestClient.list(ImplementationType.VALIDATOR).stream().
+                        map(EntityTO::getKey).sorted().collect(Collectors.toList());
+            }
+        };
+        validator = new AjaxDropDownChoicePanel<>("validator",
+                getString("validator"), new PropertyModel<>(modelObject.getPlainSchemaTO(), "validator"));
+        validator.setOutputMarkupId(true);
+        ((DropDownChoice) validator.getField()).setNullValid(true);
+        validator.setChoices(validators.getObject());
+        content.add(validator);
+
+        content.add(new AjaxCheckBoxPanel("multivalue", getString("multivalue"),
+                new PropertyModel<>(modelObject.getPlainSchemaTO(), "multivalue")));
     }
 
-    private void showHide(
-            final AjaxDropDownChoicePanel<AttrSchemaType> type,
-            final AjaxTextFieldPanel secretKey,
-            final AjaxDropDownChoicePanel<CipherAlgorithm> cipherAlgorithm,
-            final AjaxTextFieldPanel mimeType) {
+    private void showHide(final PlainSchemaTO schema, final AjaxDropDownChoicePanel<AttrSchemaType> type,
+            final WebMarkupContainer conversionParams, final AjaxTextFieldPanel conversionPattern,
+            final WebMarkupContainer enumParams, final AjaxTextFieldPanel enumerationValuesPanel,
+            final MultiFieldPanel<String> enumerationValues, final MultiFieldPanel<String> enumerationKeys,
+            final WebMarkupContainer encryptedParams,
+            final AjaxTextFieldPanel secretKey, final AjaxDropDownChoicePanel<CipherAlgorithm> cipherAlgorithm,
+            final WebMarkupContainer binaryParams, final AjaxTextFieldPanel mimeType) {
 
         final int typeOrdinal = Integer.parseInt(type.getField().getValue());
-        if (AttrSchemaType.Encrypted.ordinal() == typeOrdinal) {
-            mimeType.setVisible(false);
-            secretKey.setVisible(true);
-            secretKey.addRequiredLabel();
-            cipherAlgorithm.setVisible(true);
-            cipherAlgorithm.addRequiredLabel();
+        if (AttrSchemaType.Long.ordinal() == typeOrdinal
+                || AttrSchemaType.Double.ordinal() == typeOrdinal
+                || AttrSchemaType.Date.ordinal() == typeOrdinal) {
+
+            conversionParams.setVisible(true);
+
+            enumParams.setVisible(false);
+            if (enumerationValuesPanel.isRequired()) {
+                enumerationValuesPanel.removeRequiredLabel();
+            }
+            enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+            enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
+
+            encryptedParams.setVisible(false);
+            if (secretKey.isRequired()) {
+                secretKey.removeRequiredLabel();
+            }
+            secretKey.setModelObject(null);
+            if (cipherAlgorithm.isRequired()) {
+                cipherAlgorithm.removeRequiredLabel();
+            }
+            cipherAlgorithm.setModelObject(null);
+
+            binaryParams.setVisible(false);
+            mimeType.setModelObject(null);
+            mimeType.setChoices(null);
+
+            schema.setValidator(null);
+        } else if (AttrSchemaType.Enum.ordinal() == typeOrdinal) {
+            conversionParams.setVisible(false);
+            conversionPattern.setModelObject(null);
+
+            enumParams.setVisible(true);
+            if (!enumerationValuesPanel.isRequired()) {
+                enumerationValuesPanel.addRequiredLabel();
+            }
+            enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(schema.getEnumerationValues()));
+            enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(schema.getEnumerationKeys()));
+
+            encryptedParams.setVisible(false);
+            if (secretKey.isRequired()) {
+                secretKey.removeRequiredLabel();
+            }
+            secretKey.setModelObject(null);
+            if (cipherAlgorithm.isRequired()) {
+                cipherAlgorithm.removeRequiredLabel();
+            }
+            cipherAlgorithm.setModelObject(null);
+
+            binaryParams.setVisible(false);
+            mimeType.setModelObject(null);
+            mimeType.setChoices(null);
+
+            schema.setValidator(null);
+        } else if (AttrSchemaType.Encrypted.ordinal() == typeOrdinal) {
+            conversionParams.setVisible(false);
+            conversionPattern.setModelObject(null);
+
+            enumParams.setVisible(false);
+            if (enumerationValuesPanel.isRequired()) {
+                enumerationValuesPanel.removeRequiredLabel();
+            }
+            enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+            enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
+
+            encryptedParams.setVisible(true);
+            if (!secretKey.isRequired()) {
+                secretKey.addRequiredLabel();
+            }
+            if (cipherAlgorithm.isRequired()) {
+                cipherAlgorithm.addRequiredLabel();
+            }
+
+            binaryParams.setVisible(false);
+            mimeType.setModelObject(null);
+            mimeType.setChoices(null);
+            schema.setValidator(null);
         } else if (AttrSchemaType.Binary.ordinal() == typeOrdinal) {
-            secretKey.setVisible(false);
-            cipherAlgorithm.setVisible(false);
-            mimeType.setVisible(true);
+            conversionParams.setVisible(false);
+            conversionPattern.setModelObject(null);
+
+            enumParams.setVisible(false);
+            if (enumerationValuesPanel.isRequired()) {
+                enumerationValuesPanel.removeRequiredLabel();
+            }
+            enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+            enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
+
+            encryptedParams.setVisible(false);
+            if (secretKey.isRequired()) {
+                secretKey.removeRequiredLabel();
+            }
+            secretKey.setModelObject(null);
+            if (cipherAlgorithm.isRequired()) {
+                cipherAlgorithm.removeRequiredLabel();
+            }
+            cipherAlgorithm.setModelObject(null);
+
+            binaryParams.setVisible(true);
             mimeType.setChoices(MIME_TYPES_LOADER.getMimeTypes());
+            schema.setValidator("BinaryValidator");
+        } else {
+            conversionParams.setVisible(false);
+            conversionPattern.setModelObject(null);
+
+            enumParams.setVisible(false);
+            if (enumerationValuesPanel.isRequired()) {
+                enumerationValuesPanel.removeRequiredLabel();
+            }
+            enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(null));
+            enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(null));
+
+            encryptedParams.setVisible(false);
+            if (secretKey.isRequired()) {
+                secretKey.removeRequiredLabel();
+            }
+            secretKey.setModelObject(null);
+            if (cipherAlgorithm.isRequired()) {
+                cipherAlgorithm.removeRequiredLabel();
+            }
+            cipherAlgorithm.setModelObject(null);
+
+            binaryParams.setVisible(false);
+            mimeType.setModelObject(null);
+            mimeType.setChoices(null);
+            schema.setValidator(null);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
index aefc565..e62f289 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/PlainSchemaDetails.java
@@ -38,7 +38,6 @@ import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownCho
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.MultiFieldPanel;
 import org.apache.syncope.common.lib.to.EntityTO;
-import org.apache.syncope.common.lib.to.SchemaTO;
 import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.CipherAlgorithm;
@@ -82,23 +81,19 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
         type.setChoices(Arrays.asList(AttrSchemaType.values()));
         type.setEnabled(schemaTO == null || schemaTO.getKey() == null || schemaTO.getKey().isEmpty());
         type.addRequiredLabel();
-
         schemaForm.add(type);
 
         // long, double, date
         final AjaxTextFieldPanel conversionPattern = new AjaxTextFieldPanel("conversionPattern",
                 getString("conversionPattern"), new PropertyModel<>(schemaTO, "conversionPattern"));
-
         schemaForm.add(conversionPattern);
 
         final WebMarkupContainer conversionParams = new WebMarkupContainer("conversionParams");
         conversionParams.setOutputMarkupPlaceholderTag(true);
         conversionParams.add(conversionPattern);
-
         schemaForm.add(conversionParams);
 
         final WebMarkupContainer typeParams = new WebMarkupContainer("typeParams");
-
         typeParams.setOutputMarkupPlaceholderTag(true);
 
         // enum
@@ -238,8 +233,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
                 target.add(typeParams);
                 target.add(validator);
             }
-        }
-        );
+        });
 
         IModel<List<String>> validators = new LoadableDetachableModel<List<String>>() {
 
@@ -300,7 +294,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
 
     }
 
-    private void showHide(final SchemaTO schema, final AjaxDropDownChoicePanel<AttrSchemaType> type,
+    private void showHide(final PlainSchemaTO schema, final AjaxDropDownChoicePanel<AttrSchemaType> type,
             final WebMarkupContainer conversionParams, final AjaxTextFieldPanel conversionPattern,
             final WebMarkupContainer enumParams, final AjaxTextFieldPanel enumerationValuesPanel,
             final MultiFieldPanel<String> enumerationValues, final MultiFieldPanel<String> enumerationKeys,
@@ -336,7 +330,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
             mimeType.setModelObject(null);
             mimeType.setChoices(null);
 
-            PlainSchemaTO.class.cast(schema).setValidator(null);
+            schema.setValidator(null);
         } else if (AttrSchemaType.Enum.ordinal() == typeOrdinal) {
             conversionParams.setVisible(false);
             conversionPattern.setModelObject(null);
@@ -345,10 +339,8 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
             if (!enumerationValuesPanel.isRequired()) {
                 enumerationValuesPanel.addRequiredLabel();
             }
-            enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(((PlainSchemaTO) schema).
-                    getEnumerationValues()));
-            enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(((PlainSchemaTO) schema).
-                    getEnumerationKeys()));
+            enumerationValues.setModelObject(PropertyList.getEnumValuesAsList(schema.getEnumerationValues()));
+            enumerationKeys.setModelObject(PropertyList.getEnumValuesAsList(schema.getEnumerationKeys()));
 
             encryptedParams.setVisible(false);
             if (secretKey.isRequired()) {
@@ -364,7 +356,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
             mimeType.setModelObject(null);
             mimeType.setChoices(null);
 
-            PlainSchemaTO.class.cast(schema).setValidator(null);
+            schema.setValidator(null);
         } else if (AttrSchemaType.Encrypted.ordinal() == typeOrdinal) {
             conversionParams.setVisible(false);
             conversionPattern.setModelObject(null);
@@ -388,7 +380,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
             mimeType.setModelObject(null);
             mimeType.setChoices(null);
 
-            PlainSchemaTO.class.cast(schema).setValidator(null);
+            schema.setValidator(null);
         } else if (AttrSchemaType.Binary.ordinal() == typeOrdinal) {
             conversionParams.setVisible(false);
             conversionPattern.setModelObject(null);
@@ -413,7 +405,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
             binaryParams.setVisible(true);
             mimeType.setChoices(MIME_TYPES_LOADER.getMimeTypes());
 
-            PlainSchemaTO.class.cast(schema).setValidator("BinaryValidator");
+            schema.setValidator("BinaryValidator");
         } else {
             conversionParams.setVisible(false);
             conversionPattern.setModelObject(null);
@@ -439,7 +431,7 @@ public class PlainSchemaDetails extends AbstractSchemaDetailsPanel {
             mimeType.setModelObject(null);
             mimeType.setChoices(null);
 
-            PlainSchemaTO.class.cast(schema).setValidator(null);
+            schema.setValidator(null);
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
index 1f25c57..a18efd1 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.html
@@ -20,11 +20,28 @@ under the License.
   <wicket:panel>
     <div wicket:id="content">
       <span wicket:id="type">[type]</span>
-      <span wicket:id="values">[values]</span>
-      <span wicket:id="panel">[panel]</span>
-      <span wicket:id="mimeType">[mimeType]</span>
-      <span wicket:id="secretKey">[secretKey]</span>
-      <span wicket:id="cipherAlgorithm">[cipherAlgorithm]</span>
+
+      <div wicket:id="conversionParams">
+        <span wicket:id="conversionPattern">[conversionPattern]</span>
+      </div>
+
+      <div wicket:id="typeParams">
+        <div wicket:id="enumParams">
+          <span wicket:id="enumerationValues">[enumerationValues]</span>
+          <span wicket:id="enumerationKeys">[enumerationKeys]</span>
+        </div>
+        <div wicket:id="encryptedParams">
+          <span wicket:id="secretKey">[secretKey]</span>
+          <span wicket:id="cipherAlgorithm">[cipherAlgorithm]</span>
+        </div>
+        <div wicket:id="binaryParams">
+          <span wicket:id="mimeType">[mimeType]</span>
+        </div>
+      </div>
+
+      <span wicket:id="validator">[validator]</span>
+
+      <span wicket:id="multivalue">[multivalue]</span>
     </div>
   </wicket:panel>
 </html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.properties
index 75805fc..c778ac4 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep.properties
@@ -15,6 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 type=Schema type
-values=Values
+required_alert=All form fields are required.
+enumerationValues= Enumeration values
+enumerationKeys= Enumeration labels
 multivalue=Multivalue
-mandatoryCondition=Mandatory
+validator=Validator
+conversionPattern=Conversion pattern
+secretKey=Secret key
+cipherAlgorithm=Cipher algorithm
+mimeType=MIME Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_it.properties
index 1f57d33..b76d460 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_it.properties
@@ -15,6 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 type=Tipo di schema
-values=Valori
+required_alert=Tutti i campi sono richiesti
+enumerationValues= Valori enumeration
+enumerationKeys= Label enumeration
 multivalue=Multivalore
-mandatoryCondition=Obbligatorio
+validator=Validatore
+conversionPattern=Conversion pattern
+secretKey=Chiave segreta
+cipherAlgorithm=Algoritmo di cifratura
+mimeType=MIME Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ja.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ja.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ja.properties
index 11bcf52..a7467ae 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ja.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ja.properties
@@ -15,6 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 type=\u30b9\u30ad\u30fc\u30de\u30bf\u30a4\u30d7
-values=\u5024
+required_alert=\u3059\u3079\u3066\u306e\u30d5\u30a9\u30fc\u30e0\u30d5\u30a3\u30fc\u30eb\u30c9\u304c\u5fc5\u9808\u3067\u3059\u3002
+enumerationValues= \u5217\u6319\u5024
+enumerationKeys= \u5217\u6319\u30e9\u30d9\u30eb
 multivalue=\u8907\u6570\u5024
-mandatoryCondition=\u5fc5\u9808
+validator=Validator
+conversionPattern=\u5909\u63db\u30d1\u30bf\u30fc\u30f3
+secretKey=\u79d8\u5bc6\u9375
+cipherAlgorithm=\u6697\u53f7\u5316\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0
+mimeType=MIME \u30bf\u30a4\u30d7

http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_pt_BR.properties
index 0f5de79..cfd7c93 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_pt_BR.properties
@@ -15,6 +15,12 @@
 # specific language governing permissions and limitations
 # under the License.
 type=Tipo de esquema
-values=Valores
-multivalue=Multi-valorizados
-mandatoryCondition=Obrigat\u00f3rio
+required_alert=Todos os campos s\u00e3o obrigat\u00f3rios
+enumerationValues= Valores enumerados
+enumerationKeys= R\u00f3tulos de enumera\u00e7\u00e3o
+multivalue=Multivalorado
+validator=Valida\u00e7\u00e3o
+conversionPattern=Padr\u00e3o de Convers\u00e3o
+secretKey=Chave secreta
+cipherAlgorithm=Algoritmo de criptografia
+mimeType=MIME Type

http://git-wip-us.apache.org/repos/asf/syncope/blob/ccca7072/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ru.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ru.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ru.properties
index 0bbbc65..b48bb24 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ru.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ParametersCreateWizardSchemaStep_ru.properties
@@ -14,11 +14,13 @@
 # KIND, either express or implied.  See the License for the
 # specific language governing permissions and limitations
 # under the License.
-# type=Тип схемы
 type=\u0422\u0438\u043f \u0441\u0445\u0435\u043c\u044b
-# values=Значения
-values=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f
-# multivalue=Множественные значения
+required_alert=\u0412\u0441\u0435 \u043f\u043e\u043b\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.
+enumerationValues=\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439
+enumerationKeys=\u041f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0439
 multivalue=\u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f
-# mandatoryCondition=Обязательный
-mandatoryCondition=\u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439
+validator=\u0432\u0430\u043b\u0438\u0434\u0430\u0442\u043e\u0440\u0430
+conversionPattern=\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f
+secretKey=\u041a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f
+cipherAlgorithm=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f
+mimeType=\u0422\u0438\u043f MIME