You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2014/10/17 12:27:22 UTC

[1/2] git commit: [SYNCOPE-558]

Repository: syncope
Updated Branches:
  refs/heads/master 14b8988ed -> b40948e0c


[SYNCOPE-558]


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

Branch: refs/heads/master
Commit: 08e7032f35cb041c0eca26524ea7390e551c3f73
Parents: f99657a
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Fri Oct 17 12:23:57 2014 +0200
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Fri Oct 17 12:23:57 2014 +0200

----------------------------------------------------------------------
 .../syncope/console/commons/LayoutType.java     |  43 +++++
 .../apache/syncope/console/commons/Mode.java    |  27 +++
 .../syncope/console/pages/Configuration.java    |  31 +++-
 .../pages/ConfirmPasswordResetModalPage.java    |   4 +-
 .../console/pages/EditUserModalPage.java        |   4 +-
 .../console/pages/MembershipModalPage.java      |   9 +-
 .../pages/RequestPasswordResetModalPage.java    |   3 +-
 .../console/pages/ResultStatusModalPage.java    |  13 +-
 .../syncope/console/pages/RoleModalPage.java    |   8 +-
 .../console/pages/RoleTemplateModalPage.java    |   5 +-
 .../org/apache/syncope/console/pages/Roles.java |   2 +-
 .../syncope/console/pages/UserModalPage.java    |  15 +-
 .../console/pages/UserSelfModalPage.java        |   1 +
 .../console/pages/UserTemplateModalPage.java    |   3 +-
 .../pages/panels/AttrTemplatesPanel.java        |  42 ++---
 .../console/pages/panels/AttributesPanel.java   |  72 ++++++--
 .../pages/panels/EventSelectionPanel.java       |  22 +--
 .../console/pages/panels/LayoutsPanel.java      | 175 +++++++++++++++++++
 .../console/pages/panels/MembershipsPanel.java  |   9 +-
 .../pages/panels/ResourceSecurityPanel.java     |   6 +-
 .../syncope/console/pages/panels/RolePanel.java |  14 +-
 .../console/pages/panels/RoleTabPanel.java      |   5 +-
 .../console/rest/ConfigurationRestClient.java   |   8 +-
 .../syncope/console/pages/Configuration.html    |  36 +++-
 .../console/pages/Configuration.properties      |   7 +
 .../console/pages/Configuration_it.properties   |   7 +
 .../pages/Configuration_pt_BR.properties        |   7 +
 .../console/pages/panels/LayoutsPanel.html      |  41 +++++
 .../pages/panels/LayoutsPanel.properties        |  18 ++
 .../pages/panels/LayoutsPanel_it.properties     |  18 ++
 .../pages/panels/LayoutsPanel_pt_BR.properties  |  18 ++
 31 files changed, 565 insertions(+), 108 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/commons/LayoutType.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/commons/LayoutType.java b/console/src/main/java/org/apache/syncope/console/commons/LayoutType.java
new file mode 100644
index 0000000..057a1c6
--- /dev/null
+++ b/console/src/main/java/org/apache/syncope/console/commons/LayoutType.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.console.commons;
+
+public enum LayoutType {
+
+    ADMIN_USER("admin.user.layout"),
+    SELF_USER("self.user.layout"),
+    ADMIN_ROLE("admin.role.layout"),
+    SELF_ROLE("self.role.layout"),
+    ADMIN_MEMBERSHIP("admin.membership.layout"),
+    SELF_MEMBERSHIP("self.membership.layout");
+
+    private final String parameter;
+
+    LayoutType(final String parameter) {
+        this.parameter = parameter;
+    }
+
+    public String getParameter() {
+        return parameter;
+    }
+
+    public static LayoutType fromString(final String value) {
+        return LayoutType.valueOf(value.toUpperCase());
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/commons/Mode.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/commons/Mode.java b/console/src/main/java/org/apache/syncope/console/commons/Mode.java
new file mode 100644
index 0000000..8bb6f4f
--- /dev/null
+++ b/console/src/main/java/org/apache/syncope/console/commons/Mode.java
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.console.commons;
+
+public enum Mode {
+
+    ADMIN,
+    SELF,
+    TEMPLATE;
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/Configuration.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/Configuration.java b/console/src/main/java/org/apache/syncope/console/pages/Configuration.java
index 8ec9fab..00c087b 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/Configuration.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/Configuration.java
@@ -29,20 +29,23 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.core.LoggerContext;
 import org.apache.logging.log4j.core.config.LoggerConfig;
-import org.apache.syncope.common.SyncopeConstants;
-import org.apache.syncope.common.to.LoggerTO;
-import org.apache.syncope.common.to.NotificationTO;
-import org.apache.syncope.common.types.PolicyType;
-import org.apache.syncope.common.types.LoggerLevel;
 import org.apache.syncope.common.SyncopeClientException;
+import org.apache.syncope.common.SyncopeConstants;
 import org.apache.syncope.common.to.AttributeTO;
 import org.apache.syncope.common.to.ConfTO;
+import org.apache.syncope.common.to.LoggerTO;
+import org.apache.syncope.common.to.NotificationTO;
 import org.apache.syncope.common.to.SecurityQuestionTO;
+import org.apache.syncope.console.commons.LayoutType;
+import org.apache.syncope.common.types.LoggerLevel;
+import org.apache.syncope.common.types.PolicyType;
 import org.apache.syncope.console.commons.Constants;
 import org.apache.syncope.console.commons.HttpResourceStream;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.commons.PreferenceManager;
 import org.apache.syncope.console.commons.SortableDataProviderComparator;
 import org.apache.syncope.console.pages.panels.AttributesPanel;
+import org.apache.syncope.console.pages.panels.LayoutsPanel;
 import org.apache.syncope.console.pages.panels.PoliciesPanel;
 import org.apache.syncope.console.rest.ConfigurationRestClient;
 import org.apache.syncope.console.rest.LoggerRestClient;
@@ -241,6 +244,13 @@ public class Configuration extends BasePage {
         MetaDataRoleAuthorizationStrategy.authorize(consoleLoggerContainer, ENABLE, xmlRolesReader.getAllAllowedRoles(
                 "Configuration", "logList"));
         add(consoleLoggerContainer);
+
+        add(new LayoutsPanel("adminUserLayoutPanel", LayoutType.ADMIN_USER, feedbackPanel));
+        add(new LayoutsPanel("selfUserLayoutPanel", LayoutType.SELF_USER, feedbackPanel));
+        add(new LayoutsPanel("adminRoleLayoutPanel", LayoutType.ADMIN_ROLE, feedbackPanel));
+        add(new LayoutsPanel("selfRoleLayoutPanel", LayoutType.SELF_ROLE, feedbackPanel));
+        add(new LayoutsPanel("adminMembershipLayoutPanel", LayoutType.ADMIN_MEMBERSHIP, feedbackPanel));
+        add(new LayoutsPanel("selfMembershipLayoutPanel", LayoutType.SELF_MEMBERSHIP, feedbackPanel));
     }
 
     @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -252,11 +262,20 @@ public class Configuration extends BasePage {
 
         final ConfTO conf = confRestClient.list();
 
+        for (Iterator<AttributeTO> it = conf.getAttrs().iterator(); it.hasNext();) {
+            AttributeTO attr = it.next();
+            for (LayoutType type : LayoutType.values()) {
+                if (type.getParameter().equals(attr.getSchema())) {
+                    it.remove();
+                }
+            }
+        }
+
         final Form<?> form = new Form<Void>("confForm");
         form.setModel(new CompoundPropertyModel(conf));
         parameters.add(form);
 
-        form.add(new AttributesPanel("parameters", conf, form, false));
+        form.add(new AttributesPanel("parameters", conf, form, Mode.ADMIN));
 
         IndicatingAjaxLink<Void> save = new IndicatingAjaxLink<Void>("saveParameters") {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/ConfirmPasswordResetModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/ConfirmPasswordResetModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/ConfirmPasswordResetModalPage.java
index 5f1d6fa..3aa65f8 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/ConfirmPasswordResetModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/ConfirmPasswordResetModalPage.java
@@ -20,6 +20,7 @@ package org.apache.syncope.console.pages;
 
 import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.console.commons.Constants;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxPasswordFieldPanel;
 import org.apache.syncope.console.wicket.markup.html.form.FieldPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -65,8 +66,7 @@ public class ConfirmPasswordResetModalPage extends BaseModalPage {
                 try {
                     userSelfRestClient.confirmPasswordReset(token, password.getModelObject());
 
-                    setResponsePage(new ResultStatusModalPage.Builder(window, new UserTO()).
-                            mode(UserModalPage.Mode.SELF).build());
+                    setResponsePage(new ResultStatusModalPage.Builder(window, new UserTO()).mode(Mode.SELF).build());
                 } catch (Exception e) {
                     LOG.error("While confirming password reset for {}", token, e);
                     error(getString(Constants.ERROR) + ": " + e.getMessage());

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
index 9427478..e31fdcc 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/EditUserModalPage.java
@@ -23,6 +23,7 @@ import org.apache.commons.lang3.SerializationUtils;
 import org.apache.syncope.common.mod.UserMod;
 import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.common.util.AttributableOperations;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.commons.status.StatusBean;
 import org.apache.syncope.console.pages.panels.AccountInformationPanel;
 import org.apache.syncope.console.pages.panels.MembershipsPanel;
@@ -33,7 +34,6 @@ import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.model.ResourceModel;
@@ -73,7 +73,7 @@ public class EditUserModalPage extends UserModalPage {
             form.addOrReplace(new ResourcesPanel.Builder("resources").attributableTO(userTO).
                     statusPanel(statusPanel).build());
 
-            form.addOrReplace(new MembershipsPanel("memberships", userTO, false, statusPanel, getPageReference()));
+            form.addOrReplace(new MembershipsPanel("memberships", userTO, mode, statusPanel, getPageReference()));
         }
 
         // Security question / answer

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/MembershipModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/MembershipModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/MembershipModalPage.java
index 74b0d6b..44310fb 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/MembershipModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/MembershipModalPage.java
@@ -20,6 +20,7 @@ package org.apache.syncope.console.pages;
 
 import org.apache.syncope.common.to.MembershipTO;
 import org.apache.syncope.common.to.UserTO;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.pages.panels.AttributesPanel;
 import org.apache.syncope.console.pages.panels.DerivedAttributesPanel;
 import org.apache.syncope.console.pages.panels.SysInfoPanel;
@@ -37,10 +38,10 @@ public class MembershipModalPage extends BaseModalPage {
 
     private static final long serialVersionUID = -4360802478081432549L;
 
-    private AjaxButton submit;
+    private final AjaxButton submit;
 
     public MembershipModalPage(final PageReference pageRef, final ModalWindow window, final MembershipTO membershipTO,
-            final boolean templateMode) {
+            final Mode mode) {
 
         final Form<MembershipTO> form = new Form<MembershipTO>("MembershipForm");
 
@@ -92,7 +93,7 @@ public class MembershipModalPage extends BaseModalPage {
         //--------------------------------
         // Attributes panel
         //--------------------------------
-        form.add(new AttributesPanel("attrs", membershipTO, form, templateMode));
+        form.add(new AttributesPanel("attrs", membershipTO, form, mode));
         form.add(new SysInfoPanel("systeminformation", membershipTO));
         //--------------------------------
 
@@ -105,7 +106,7 @@ public class MembershipModalPage extends BaseModalPage {
         //--------------------------------
         // Virtual attributes container
         //--------------------------------
-        form.add(new VirtualAttributesPanel("virAttrs", membershipTO, templateMode));
+        form.add(new VirtualAttributesPanel("virAttrs", membershipTO, mode == Mode.TEMPLATE));
         //--------------------------------
 
         add(form);

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/RequestPasswordResetModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/RequestPasswordResetModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/RequestPasswordResetModalPage.java
index 84d82ec..9cd0b5d 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/RequestPasswordResetModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/RequestPasswordResetModalPage.java
@@ -21,6 +21,7 @@ package org.apache.syncope.console.pages;
 import org.apache.syncope.common.to.SecurityQuestionTO;
 import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.console.commons.Constants;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.rest.SecurityQuestionRestClient;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxTextFieldPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -114,7 +115,7 @@ public class RequestPasswordResetModalPage extends BaseModalPage {
                     userSelfRestClient.requestPasswordReset(username.getModelObject(), securityAnswer.getModelObject());
 
                     setResponsePage(new ResultStatusModalPage.Builder(window, new UserTO()).
-                            mode(UserModalPage.Mode.SELF).build());
+                            mode(Mode.SELF).build());
                 } catch (Exception e) {
                     LOG.error("While requesting password reset for {}", username.getModelObject(), e);
                     error(getString(Constants.ERROR) + ": " + e.getMessage());

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/ResultStatusModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/ResultStatusModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/ResultStatusModalPage.java
index bbc280b..f58a659 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/ResultStatusModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/ResultStatusModalPage.java
@@ -35,6 +35,7 @@ import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.common.types.PropagationTaskExecStatus;
 import org.apache.syncope.console.commons.ConnIdSpecialAttributeName;
 import org.apache.syncope.console.commons.Constants;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.commons.status.Status;
 import org.apache.syncope.console.commons.status.StatusUtils;
 import org.apache.wicket.Component;
@@ -68,7 +69,7 @@ public class ResultStatusModalPage extends BaseModalPage {
 
     private final AbstractSubjectTO subject;
 
-    private final UserModalPage.Mode mode;
+    private final Mode mode;
 
     /**
      * Status management utilities.
@@ -81,7 +82,7 @@ public class ResultStatusModalPage extends BaseModalPage {
 
         private ModalWindow window;
 
-        private UserModalPage.Mode mode;
+        private Mode mode;
 
         private AbstractSubjectTO subject;
 
@@ -90,7 +91,7 @@ public class ResultStatusModalPage extends BaseModalPage {
             this.subject = attributable;
         }
 
-        public ResultStatusModalPage.Builder mode(final UserModalPage.Mode mode) {
+        public ResultStatusModalPage.Builder mode(final Mode mode) {
             this.mode = mode;
             return this;
         }
@@ -105,7 +106,7 @@ public class ResultStatusModalPage extends BaseModalPage {
         this.subject = builder.subject;
         statusUtils = new StatusUtils(this.userRestClient);
         if (builder.mode == null) {
-            this.mode = UserModalPage.Mode.ADMIN;
+            this.mode = Mode.ADMIN;
         } else {
             this.mode = builder.mode;
         }
@@ -116,13 +117,13 @@ public class ResultStatusModalPage extends BaseModalPage {
         container.setOutputMarkupId(true);
         add(container);
 
-        final Fragment fragment = new Fragment("resultFrag", mode == UserModalPage.Mode.SELF
+        final Fragment fragment = new Fragment("resultFrag", mode == Mode.SELF
                 ? "userSelfResultFrag"
                 : "propagationResultFrag", this);
         fragment.setOutputMarkupId(true);
         container.add(fragment);
 
-        if (mode == UserModalPage.Mode.ADMIN) {
+        if (mode == Mode.ADMIN) {
             // add Syncope propagation status
             PropagationStatus syncope = new PropagationStatus();
             syncope.setResource("Syncope");

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java
index 6a452e9..ffd7ff4 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/RoleModalPage.java
@@ -25,6 +25,7 @@ import org.apache.syncope.common.mod.RoleMod;
 import org.apache.syncope.common.to.RoleTO;
 import org.apache.syncope.common.util.AttributableOperations;
 import org.apache.syncope.console.commons.Constants;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.pages.panels.RolePanel;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -44,13 +45,6 @@ public class RoleModalPage extends BaseModalPage {
 
     private static final long serialVersionUID = -1732493223434085205L;
 
-    public enum Mode {
-
-        ADMIN,
-        TEMPLATE;
-
-    }
-
     protected final PageReference pageRef;
 
     protected final ModalWindow window;

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/RoleTemplateModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/RoleTemplateModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/RoleTemplateModalPage.java
index 3f9c6b0..465d563 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/RoleTemplateModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/RoleTemplateModalPage.java
@@ -20,6 +20,7 @@ package org.apache.syncope.console.pages;
 
 import org.apache.syncope.common.to.RoleTO;
 import org.apache.syncope.common.to.SyncTaskTO;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
@@ -29,7 +30,7 @@ public class RoleTemplateModalPage extends RoleModalPage {
 
     private static final long serialVersionUID = -3849135555203409845L;
 
-    private SyncTaskTO syncTaskTO;
+    private final SyncTaskTO syncTaskTO;
 
     public RoleTemplateModalPage(final PageReference callerPageRef, final ModalWindow window,
             final SyncTaskTO syncTaskTO) {
@@ -42,7 +43,7 @@ public class RoleTemplateModalPage extends RoleModalPage {
     }
 
     @Override
-    protected void submitAction(AjaxRequestTarget target, Form form) {
+    protected void submitAction(final AjaxRequestTarget target, final Form form) {
         syncTaskTO.setRoleTemplate((RoleTO) form.getModelObject());
         taskRestClient.updateSyncTask(syncTaskTO);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/Roles.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/Roles.java b/console/src/main/java/org/apache/syncope/console/pages/Roles.java
index dd4c309..fa94ee4 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/Roles.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/Roles.java
@@ -102,7 +102,7 @@ public class Roles extends BasePage {
         });
 
         final AbstractSearchResultPanel searchResult =
-                 new RoleSearchResultPanel("searchResult", true, null, getPageReference(), restClient);
+                new RoleSearchResultPanel("searchResult", true, null, getPageReference(), restClient);
         add(searchResult);
 
         final Form searchForm = new Form("searchForm");

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/UserModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/UserModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/UserModalPage.java
index 65d809e..e605360 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/UserModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/UserModalPage.java
@@ -20,6 +20,7 @@ package org.apache.syncope.console.pages;
 
 import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.console.commons.Constants;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.pages.panels.AttributesPanel;
 import org.apache.syncope.console.pages.panels.DerivedAttributesPanel;
 import org.apache.syncope.console.pages.panels.MembershipsPanel;
@@ -45,14 +46,6 @@ import org.apache.wicket.model.ResourceModel;
  */
 public abstract class UserModalPage extends BaseModalPage {
 
-    public enum Mode {
-
-        ADMIN,
-        SELF,
-        TEMPLATE;
-
-    }
-
     private static final long serialVersionUID = 5002005009737457667L;
 
     protected final PageReference pageRef;
@@ -117,7 +110,7 @@ public abstract class UserModalPage extends BaseModalPage {
         form.add(new Label("statuspanel", ""));
 
         form.add(new Label("pwdChangeInfo", ""));
-        
+
         form.add(new Label("securityQuestion", ""));
 
         form.add(new Label("accountinformation", ""));
@@ -138,7 +131,7 @@ public abstract class UserModalPage extends BaseModalPage {
         //--------------------------------
         // Attributes panel
         //--------------------------------
-        form.add(new AttributesPanel("attrs", userTO, form, mode == Mode.TEMPLATE));
+        form.add(new AttributesPanel("attrs", userTO, form, mode));
         //--------------------------------
 
         //--------------------------------
@@ -162,7 +155,7 @@ public abstract class UserModalPage extends BaseModalPage {
         //--------------------------------
         // Roles panel
         //--------------------------------
-        form.add(new MembershipsPanel("memberships", userTO, mode == Mode.TEMPLATE, null, getPageReference()));
+        form.add(new MembershipsPanel("memberships", userTO, mode, null, getPageReference()));
         //--------------------------------
 
         final AjaxButton submit = getOnSubmit();

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/UserSelfModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/UserSelfModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/UserSelfModalPage.java
index c7b007f..9123f07 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/UserSelfModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/UserSelfModalPage.java
@@ -22,6 +22,7 @@ import org.apache.commons.lang3.SerializationUtils;
 import org.apache.syncope.common.mod.UserMod;
 import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.common.util.AttributableOperations;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.rest.UserSelfRestClient;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/UserTemplateModalPage.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/UserTemplateModalPage.java b/console/src/main/java/org/apache/syncope/console/pages/UserTemplateModalPage.java
index 03040e0..09ea426 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/UserTemplateModalPage.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/UserTemplateModalPage.java
@@ -20,6 +20,7 @@ package org.apache.syncope.console.pages;
 
 import org.apache.syncope.common.to.SyncTaskTO;
 import org.apache.syncope.common.to.UserTO;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
@@ -32,7 +33,7 @@ public class UserTemplateModalPage extends UserModalPage {
 
     private static final long serialVersionUID = 511003221213581368L;
 
-    private SyncTaskTO syncTaskTO;
+    private final SyncTaskTO syncTaskTO;
 
     public UserTemplateModalPage(final PageReference callerPageRef, final ModalWindow window,
             final SyncTaskTO syncTaskTO) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/AttrTemplatesPanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/AttrTemplatesPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/AttrTemplatesPanel.java
index 024f286..2d84719 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/panels/AttrTemplatesPanel.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/AttrTemplatesPanel.java
@@ -98,33 +98,33 @@ public class AttrTemplatesPanel extends Panel {
         return new NonI18nPalette<String>(type.name(), new PropertyModel<List<String>>(roleTO, type.name()),
                 availableSchemas, new SelectChoiceRenderer<String>(), 8, false) {
 
-            private static final long serialVersionUID = 2295567122085510330L;
+                    private static final long serialVersionUID = 2295567122085510330L;
 
-            @Override
-            protected Recorder<String> newRecorderComponent() {
-                final Recorder<String> recorder = super.newRecorderComponent();
+                    @Override
+                    protected Recorder<String> newRecorderComponent() {
+                        final Recorder<String> recorder = super.newRecorderComponent();
 
-                switch (type) {
-                    case rAttrTemplates:
-                    case rDerAttrTemplates:
-                    case rVirAttrTemplates:
-                        recorder.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+                        switch (type) {
+                            case rAttrTemplates:
+                            case rDerAttrTemplates:
+                            case rVirAttrTemplates:
+                                recorder.add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
 
-                            private static final long serialVersionUID = -1107858522700306810L;
+                                    private static final long serialVersionUID = -1107858522700306810L;
 
-                            @Override
-                            protected void onUpdate(final AjaxRequestTarget target) {
-                                send(getPage(), Broadcast.BREADTH, new RoleAttrTemplatesChange(type, target));
-                            }
-                        });
-                        break;
+                                    @Override
+                                    protected void onUpdate(final AjaxRequestTarget target) {
+                                        send(getPage(), Broadcast.BREADTH, new RoleAttrTemplatesChange(type, target));
+                                    }
+                                });
+                                break;
 
-                    default:
-                }
+                            default:
+                        }
 
-                return recorder;
-            }
-        };
+                        return recorder;
+                    }
+                };
     }
 
     public Collection<String> getSelected(final Type type) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/AttributesPanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/AttributesPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/AttributesPanel.java
index 61c28af..2ed7042 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/panels/AttributesPanel.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/AttributesPanel.java
@@ -19,9 +19,12 @@
 package org.apache.syncope.console.pages.panels;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.ListIterator;
 import java.util.Map;
@@ -31,6 +34,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.SyncopeConstants;
 import org.apache.syncope.common.to.AbstractAttributableTO;
 import org.apache.syncope.common.to.AttributeTO;
+import org.apache.syncope.common.to.ConfTO;
 import org.apache.syncope.common.to.MembershipTO;
 import org.apache.syncope.common.to.RoleTO;
 import org.apache.syncope.common.to.SchemaTO;
@@ -38,8 +42,11 @@ import org.apache.syncope.common.to.UserTO;
 import org.apache.syncope.common.types.AttributableType;
 import org.apache.syncope.common.types.AttributeSchemaType;
 import org.apache.syncope.console.commons.JexlHelpUtil;
+import org.apache.syncope.console.commons.LayoutType;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.markup.html.list.AltListView;
 import org.apache.syncope.console.pages.panels.AttrTemplatesPanel.RoleAttrTemplatesChange;
+import org.apache.syncope.console.rest.ConfigurationRestClient;
 import org.apache.syncope.console.rest.RoleRestClient;
 import org.apache.syncope.console.rest.SchemaRestClient;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxCheckBoxPanel;
@@ -72,28 +79,33 @@ public class AttributesPanel extends Panel {
     private SchemaRestClient schemaRestClient;
 
     @SpringBean
+    private ConfigurationRestClient confRestClient;
+
+    @SpringBean
     private RoleRestClient roleRestClient;
 
     private final AbstractAttributableTO entityTO;
 
-    private final boolean templateMode;
+    private final Mode mode;
 
     private final AttrTemplatesPanel attrTemplates;
 
-    private final Map<String, SchemaTO> schemas = new TreeMap<String, SchemaTO>();
+    private AttributeTO confAttributeTO;
+
+    private Map<String, SchemaTO> schemas = new LinkedHashMap<String, SchemaTO>();
 
     public <T extends AbstractAttributableTO> AttributesPanel(final String id, final T entityTO, final Form form,
-            final boolean templateMode) {
+            final Mode mode) {
 
-        this(id, entityTO, form, templateMode, null);
+        this(id, entityTO, form, mode, null);
     }
 
     public <T extends AbstractAttributableTO> AttributesPanel(final String id, final T entityTO, final Form form,
-            final boolean templateMode, final AttrTemplatesPanel attrTemplates) {
+            final Mode mode, final AttrTemplatesPanel attrTemplates) {
 
         super(id);
         this.entityTO = entityTO;
-        this.templateMode = templateMode;
+        this.mode = mode;
         this.attrTemplates = attrTemplates;
         this.setOutputMarkupId(true);
 
@@ -117,7 +129,7 @@ public class AttributesPanel extends Panel {
                         item.add(questionMarkJexlHelp);
                         questionMarkJexlHelp.add(jexlHelp);
 
-                        if (!templateMode) {
+                        if (mode != Mode.TEMPLATE) {
                             questionMarkJexlHelp.setVisible(false);
                         }
 
@@ -125,7 +137,7 @@ public class AttributesPanel extends Panel {
 
                         final FieldPanel panel = getFieldPanel(schemas.get(attributeTO.getSchema()), form, attributeTO);
 
-                        if (templateMode || !schemas.get(attributeTO.getSchema()).isMultivalue()) {
+                        if (mode == Mode.TEMPLATE || !schemas.get(attributeTO.getSchema()).isMultivalue()) {
                             item.add(panel);
                         } else {
                             item.add(new MultiFieldPanel<String>(
@@ -137,7 +149,7 @@ public class AttributesPanel extends Panel {
         add(attributeView);
     }
 
-    private void filter(final List<SchemaTO> schemaTOs, final Set<String> allowed) {
+    private void filter(final List<SchemaTO> schemaTOs, final Collection<String> allowed) {
         for (ListIterator<SchemaTO> itor = schemaTOs.listIterator(); itor.hasNext();) {
             SchemaTO schema = itor.next();
             if (!allowed.contains(schema.getName())) {
@@ -152,6 +164,7 @@ public class AttributesPanel extends Panel {
         if (entityTO instanceof RoleTO) {
             final RoleTO roleTO = (RoleTO) entityTO;
 
+            setLayoutConfiguration(mode, AttributableType.ROLE);
             schemaTOs = schemaRestClient.getSchemas(AttributableType.ROLE);
             Set<String> allowed;
             if (attrTemplates == null) {
@@ -165,29 +178,61 @@ public class AttributesPanel extends Panel {
             filter(schemaTOs, allowed);
         } else if (entityTO instanceof UserTO) {
             schemaTOs = schemaRestClient.getSchemas(AttributableType.USER);
+            setLayoutConfiguration(mode, AttributableType.USER);
         } else if (entityTO instanceof MembershipTO) {
             schemaTOs = schemaRestClient.getSchemas(AttributableType.MEMBERSHIP);
+            setLayoutConfiguration(mode, AttributableType.MEMBERSHIP);
             Set<String> allowed = new HashSet<String>(
                     roleRestClient.read(((MembershipTO) entityTO).getRoleId()).getMAttrTemplates());
             filter(schemaTOs, allowed);
         } else {
+            schemas = new TreeMap<String, SchemaTO>();
             schemaTOs = schemaRestClient.getSchemas(AttributableType.CONFIGURATION);
+            for (Iterator<SchemaTO> it = schemaTOs.iterator(); it.hasNext();) {
+                SchemaTO schemaTO = it.next();
+                for (LayoutType type : LayoutType.values()) {
+                    if (type.getParameter().equals(schemaTO.getName())) {
+                        it.remove();
+                    }
+                }
+            }
         }
 
         schemas.clear();
 
+        if (confAttributeTO != null && mode != Mode.TEMPLATE && !(entityTO instanceof ConfTO)) {
+            filter(schemaTOs, confAttributeTO.getValues());
+        }
         for (SchemaTO schemaTO : schemaTOs) {
             schemas.put(schemaTO.getName(), schemaTO);
         }
     }
 
+    private void setLayoutConfiguration(final Mode mode, final AttributableType type) {
+        switch (type) {
+            case USER:
+            default:
+                confAttributeTO = confRestClient.read(mode == Mode.ADMIN
+                        ? LayoutType.ADMIN_USER.getParameter() : LayoutType.ADMIN_USER.getParameter());
+                break;
+            case ROLE:
+                confAttributeTO = confRestClient.read(mode == Mode.ADMIN
+                        ? LayoutType.ADMIN_ROLE.getParameter() : LayoutType.SELF_ROLE.getParameter());
+                break;
+            case MEMBERSHIP:
+                confAttributeTO = confRestClient.read(mode == Mode.ADMIN
+                        ? LayoutType.ADMIN_MEMBERSHIP.getParameter() : LayoutType.SELF_MEMBERSHIP.getParameter());
+                break;
+        }
+    }
+
     private void setAttrs() {
         final List<AttributeTO> entityData = new ArrayList<AttributeTO>();
 
         final Map<String, AttributeTO> attrMap = entityTO.getAttrMap();
 
         for (SchemaTO schema : schemas.values()) {
-            AttributeTO attributeTO = new AttributeTO();
+            final AttributeTO attributeTO = new AttributeTO();
             attributeTO.setSchema(schema.getName());
 
             if (attrMap.get(schema.getName()) == null || attrMap.get(schema.getName()).getValues().isEmpty()) {
@@ -207,11 +252,12 @@ public class AttributesPanel extends Panel {
 
     @SuppressWarnings({ "rawtypes", "unchecked" })
     private FieldPanel getFieldPanel(final SchemaTO schemaTO, final Form form, final AttributeTO attributeTO) {
-        final boolean required = templateMode ? false : schemaTO.getMandatoryCondition().equalsIgnoreCase("true");
+        final boolean required = mode == Mode.TEMPLATE ? false : schemaTO.getMandatoryCondition().equalsIgnoreCase(
+                "true");
 
-        final boolean readOnly = templateMode ? false : schemaTO.isReadonly();
+        final boolean readOnly = mode == Mode.TEMPLATE ? false : schemaTO.isReadonly();
 
-        final AttributeSchemaType type = templateMode ? AttributeSchemaType.String : schemaTO.getType();
+        final AttributeSchemaType type = mode == Mode.TEMPLATE ? AttributeSchemaType.String : schemaTO.getType();
 
         final FieldPanel panel;
         switch (type) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/EventSelectionPanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/EventSelectionPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/EventSelectionPanel.java
index abf3f69..e2245a6 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/panels/EventSelectionPanel.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/EventSelectionPanel.java
@@ -53,7 +53,7 @@ public abstract class EventSelectionPanel extends Panel {
 
     private static final long serialVersionUID = 752233163798301002L;
 
-    private Set<String> selected = new HashSet<String>();
+    private final Set<String> selected = new HashSet<String>();
 
     public EventSelectionPanel(
             final String id, final EventCategoryTO eventCategoryTO, final IModel<List<String>> model) {
@@ -131,11 +131,11 @@ public abstract class EventSelectionPanel extends Panel {
 
                 final Check<String> successCheck = new Check<String>("successCheck",
                         new Model<String>(LoggerEventUtils.buildEvent(
-                        eventCategoryTO.getType(),
-                        eventCategoryTO.getCategory(),
-                        eventCategoryTO.getSubcategory(),
-                        event,
-                        AuditElements.Result.SUCCESS)),
+                                        eventCategoryTO.getType(),
+                                        eventCategoryTO.getCategory(),
+                                        eventCategoryTO.getSubcategory(),
+                                        event,
+                                        AuditElements.Result.SUCCESS)),
                         successGroup);
                 item.add(successCheck);
             }
@@ -195,11 +195,11 @@ public abstract class EventSelectionPanel extends Panel {
 
                 final Check<String> failureCheck = new Check<String>("failureCheck",
                         new Model<String>(LoggerEventUtils.buildEvent(
-                        eventCategoryTO.getType(),
-                        eventCategoryTO.getCategory(),
-                        eventCategoryTO.getSubcategory(),
-                        event,
-                        AuditElements.Result.FAILURE)),
+                                        eventCategoryTO.getType(),
+                                        eventCategoryTO.getCategory(),
+                                        eventCategoryTO.getSubcategory(),
+                                        event,
+                                        AuditElements.Result.FAILURE)),
                         failureGroup);
                 item.add(failureCheck);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/LayoutsPanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/LayoutsPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/LayoutsPanel.java
new file mode 100644
index 0000000..48f7163
--- /dev/null
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/LayoutsPanel.java
@@ -0,0 +1,175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.console.pages.panels;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.apache.syncope.common.to.AttributeTO;
+import org.apache.syncope.common.to.SchemaTO;
+import org.apache.syncope.common.types.AttributableType;
+import org.apache.syncope.common.types.AttributeSchemaType;
+import org.apache.syncope.console.commons.LayoutType;
+import org.apache.syncope.console.commons.Constants;
+import org.apache.syncope.console.commons.XMLRolesReader;
+import org.apache.syncope.console.rest.ConfigurationRestClient;
+import org.apache.syncope.console.rest.SchemaRestClient;
+import org.apache.syncope.console.wicket.markup.html.form.AjaxPalettePanel;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.form.AjaxButton;
+import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
+import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.ResourceModel;
+import org.apache.wicket.model.util.ListModel;
+import org.apache.wicket.spring.injection.annot.SpringBean;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class LayoutsPanel extends Panel {
+
+    /**
+     * Logger.
+     */
+    private static final Logger LOG = LoggerFactory.getLogger(LayoutsPanel.class);
+
+    private static final long serialVersionUID = -6804066913177804275L;
+
+    private static final String CANCEL = "cancel";
+
+    private static final String APPLY = "apply";
+
+    @SpringBean
+    protected XMLRolesReader xmlRolesReader;
+
+    @SpringBean
+    private SchemaRestClient schemaRestClient;
+
+    @SpringBean
+    private ConfigurationRestClient confRestClient;
+
+    @SuppressWarnings("unchecked")
+    public LayoutsPanel(final String id, final LayoutType layoutType, final NotificationPanel feedbackPanel) {
+        super(id);
+
+        final WebMarkupContainer container = new WebMarkupContainer("container");
+        container.setOutputMarkupId(true);
+
+        final Form<String> form = new Form<String>("form");
+        form.setOutputMarkupId(true);
+
+        final AttributableType type;
+        final AttributeTO attributeTO;
+        if (layoutType == LayoutType.ADMIN_USER || layoutType == layoutType.SELF_USER) {
+            attributeTO = getConfiguration(layoutType, AttributableType.USER);
+            type = AttributableType.USER;
+        } else if (layoutType == LayoutType.ADMIN_ROLE || layoutType == layoutType.SELF_ROLE) {
+            attributeTO = getConfiguration(layoutType, AttributableType.ROLE);
+            type = AttributableType.ROLE;
+        } else {
+            attributeTO = getConfiguration(layoutType, AttributableType.MEMBERSHIP);
+            type = AttributableType.MEMBERSHIP;
+        }
+
+        form.setModel(new CompoundPropertyModel(attributeTO.getValues()));
+
+        final List<String> fields = getAllFields(type);
+
+        final ListModel<String> selectedFields = new ListModel<String>(!attributeTO.getValues().isEmpty()
+                ? attributeTO.getValues() : fields);
+        final ListModel<String> availableFields = new ListModel<String>(fields);
+
+        form.add(new AjaxPalettePanel<String>("fields", selectedFields, availableFields, true));
+
+        final AjaxButton submit = new IndicatingAjaxButton(APPLY, new ResourceModel(APPLY)) {
+
+            private static final long serialVersionUID = -958724007591692537L;
+
+            @Override
+            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+                try {
+                    if (schemaRestClient.readSchema(
+                            AttributableType.CONFIGURATION, layoutType.getParameter()) == null) {
+                        final SchemaTO confSchemaTO = new SchemaTO();
+                        confSchemaTO.setName(layoutType.getParameter());
+                        confSchemaTO.setMultivalue(true);
+                        confSchemaTO.setType(AttributeSchemaType.String);
+                        schemaRestClient.createSchema(AttributableType.CONFIGURATION, confSchemaTO);
+                    }
+                    confRestClient.set(attributeTO);
+                    info(getString(Constants.OPERATION_SUCCEEDED));
+                } catch (Exception e) {
+                    LOG.error("While save layout configuration", e);
+                    error(getString(Constants.ERROR) + ": " + e.getMessage());
+                }
+                feedbackPanel.refresh(target);
+            }
+
+            @Override
+            protected void onError(final AjaxRequestTarget target, final Form<?> form) {
+                LOG.error("While save layout configuration");
+                error(getString(Constants.ERROR) + ": While save layout configuration");
+                feedbackPanel.refresh(target);
+            }
+        };
+
+        form.add(submit);
+
+        final IndicatingAjaxButton cancel = new IndicatingAjaxButton(CANCEL, new ResourceModel(CANCEL)) {
+
+            private static final long serialVersionUID = -958724007591692537L;
+
+            @Override
+            protected void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+                target.add(container);
+            }
+
+            @Override
+            protected void onError(final AjaxRequestTarget target, final Form<?> form) {
+            }
+        };
+
+        cancel.setDefaultFormProcessing(false);
+        form.add(cancel);
+        container.add(form);
+        add(container);
+    }
+
+    private AttributeTO getConfiguration(
+            final LayoutType layoutType, final AttributableType type) {
+        AttributeTO attributeTO = confRestClient.read(layoutType.getParameter());
+        if (attributeTO != null) {
+            return attributeTO;
+        } else {
+            attributeTO = new AttributeTO();
+            attributeTO.setSchema(layoutType.getParameter());
+            attributeTO.getValues().addAll(getAllFields(type));
+            return attributeTO;
+        }
+    }
+
+    private List<String> getAllFields(final AttributableType type) {
+        final List<String> fields = new ArrayList<String>();
+        for (SchemaTO item : schemaRestClient.getSchemas(type)) {
+            fields.add(item.getName());
+        }
+        return fields;
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/MembershipsPanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/MembershipsPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/MembershipsPanel.java
index f341492..5490e7a 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/panels/MembershipsPanel.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/MembershipsPanel.java
@@ -26,6 +26,7 @@ import javax.swing.tree.DefaultMutableTreeNode;
 import org.apache.syncope.common.to.MembershipTO;
 import org.apache.syncope.common.to.RoleTO;
 import org.apache.syncope.common.to.UserTO;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.commons.RoleTreeBuilder;
 import org.apache.syncope.console.commons.RoleUtils;
 import org.apache.syncope.console.commons.status.StatusUtils;
@@ -72,7 +73,7 @@ public class MembershipsPanel extends Panel {
 
     private final NestedTree<DefaultMutableTreeNode> tree;
 
-    public MembershipsPanel(final String id, final UserTO userTO, final boolean templateMode,
+    public MembershipsPanel(final String id, final UserTO userTO, final Mode mode,
             final StatusPanel statusPanel, final PageReference pageRef) {
 
         super(id);
@@ -127,14 +128,14 @@ public class MembershipsPanel extends Panel {
 
                                     for (MembershipTO membTO : membView.getList()) {
                                         if (membTO.getRoleId() == roleTO.getId()) {
-                                            return new MembershipModalPage(pageRef, membWin, membTO, templateMode);
+                                            return new MembershipModalPage(pageRef, membWin, membTO, mode);
                                         }
                                     }
                                     MembershipTO membTO = new MembershipTO();
                                     membTO.setRoleId(roleTO.getId());
                                     membTO.setRoleName(roleTO.getName());
 
-                                    return new MembershipModalPage(pageRef, membWin, membTO, templateMode);
+                                    return new MembershipModalPage(pageRef, membWin, membTO, mode);
                                 }
                             });
                             membWin.show(target);
@@ -175,7 +176,7 @@ public class MembershipsPanel extends Panel {
                                     @Override
                                     public Page createPage() {
                                         return new MembershipModalPage(getPage().getPageReference(), membWin,
-                                                membershipTO, templateMode);
+                                                membershipTO, mode);
 
                                     }
                                 });

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceSecurityPanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceSecurityPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceSecurityPanel.java
index 0fc782e..f7d92ff 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceSecurityPanel.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/ResourceSecurityPanel.java
@@ -107,7 +107,7 @@ public class ResourceSecurityPanel extends Panel {
         // -------------------------------
         final AjaxDropDownChoicePanel<Long> passwordPolicy = new AjaxDropDownChoicePanel<Long>("passwordPolicy",
                 new ResourceModel("passwordPolicy", "passwordPolicy").getObject(), new PropertyModel<Long>(resourceTO,
-                "passwordPolicy"));
+                        "passwordPolicy"));
 
         passwordPolicy.setChoiceRenderer(new PolicyRenderer(PolicyType.PASSWORD));
 
@@ -123,7 +123,7 @@ public class ResourceSecurityPanel extends Panel {
         // -------------------------------
         final AjaxDropDownChoicePanel<Long> accountPolicy = new AjaxDropDownChoicePanel<Long>("accountPolicy",
                 new ResourceModel("accountPolicy", "accountPolicy").getObject(), new PropertyModel<Long>(resourceTO,
-                "accountPolicy"));
+                        "accountPolicy"));
 
         accountPolicy.setChoiceRenderer(new PolicyRenderer(PolicyType.ACCOUNT));
 
@@ -139,7 +139,7 @@ public class ResourceSecurityPanel extends Panel {
         // -------------------------------
         final AjaxDropDownChoicePanel<Long> syncPolicy = new AjaxDropDownChoicePanel<Long>("syncPolicy",
                 new ResourceModel("syncPolicy", "syncPolicy").getObject(), new PropertyModel<Long>(resourceTO,
-                "syncPolicy"));
+                        "syncPolicy"));
 
         syncPolicy.setChoiceRenderer(new PolicyRenderer(PolicyType.SYNC));
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
index ec9e261..8a2ab6d 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/RolePanel.java
@@ -23,10 +23,10 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
-
 import org.apache.syncope.common.to.RoleTO;
-import org.apache.syncope.console.commons.status.StatusBean;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.commons.XMLRolesReader;
+import org.apache.syncope.console.commons.status.StatusBean;
 import org.apache.syncope.console.pages.RoleModalPage;
 import org.apache.syncope.console.rest.AuthRestClient;
 import org.apache.syncope.console.wicket.markup.html.form.AjaxCheckBoxPanel;
@@ -62,7 +62,7 @@ public class RolePanel extends Panel {
 
         private RoleTO roleTO;
 
-        private RoleModalPage.Mode mode;
+        private Mode mode;
 
         private PageReference pageReference;
 
@@ -80,7 +80,7 @@ public class RolePanel extends Panel {
             return this;
         }
 
-        public Builder roleModalPageMode(final RoleModalPage.Mode mode) {
+        public Builder roleModalPageMode(final Mode mode) {
             this.mode = mode;
             return this;
         }
@@ -98,7 +98,7 @@ public class RolePanel extends Panel {
     private RolePanel(final Builder builder) {
         super(builder.id);
 
-        this.add(new RoleDetailsPanel("details", builder.roleTO, builder.mode == RoleModalPage.Mode.TEMPLATE));
+        this.add(new RoleDetailsPanel("details", builder.roleTO, builder.mode == Mode.TEMPLATE));
 
         if (builder.pageReference == null || builder.roleTO.getId() == 0) {
             this.add(new Label("statuspanel", ""));
@@ -123,7 +123,7 @@ public class RolePanel extends Panel {
         // Attributes panel
         //--------------------------------
         this.add(new AttributesPanel(
-                "attrs", builder.roleTO, builder.form, builder.mode == RoleModalPage.Mode.TEMPLATE, attrTemplates));
+                "attrs", builder.roleTO, builder.form, builder.mode, attrTemplates));
 
         final AjaxCheckBoxPanel inhAttributes = new AjaxCheckBoxPanel("inheritAttrs", "inheritAttrs",
                 new PropertyModel<Boolean>(builder.roleTO, "inheritAttrs"));
@@ -146,7 +146,7 @@ public class RolePanel extends Panel {
         // Virtual attributes panel
         //--------------------------------
         this.add(new VirtualAttributesPanel(
-                "virAttrs", builder.roleTO, builder.mode == RoleModalPage.Mode.TEMPLATE, attrTemplates));
+                "virAttrs", builder.roleTO, builder.mode == Mode.TEMPLATE, attrTemplates));
 
         final AjaxCheckBoxPanel inhVirtualAttributes = new AjaxCheckBoxPanel("inheritVirAttrs",
                 "inheritVirAttrs", new PropertyModel<Boolean>(builder.roleTO, "inheritVirAttrs"));

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/pages/panels/RoleTabPanel.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/pages/panels/RoleTabPanel.java b/console/src/main/java/org/apache/syncope/console/pages/panels/RoleTabPanel.java
index 41eba3c..04668ab 100644
--- a/console/src/main/java/org/apache/syncope/console/pages/panels/RoleTabPanel.java
+++ b/console/src/main/java/org/apache/syncope/console/pages/panels/RoleTabPanel.java
@@ -19,9 +19,10 @@
 package org.apache.syncope.console.pages.panels;
 
 import org.apache.syncope.client.SyncopeClient;
-import org.apache.syncope.common.to.RoleTO;
 import org.apache.syncope.common.SyncopeClientException;
+import org.apache.syncope.common.to.RoleTO;
 import org.apache.syncope.console.commons.Constants;
+import org.apache.syncope.console.commons.Mode;
 import org.apache.syncope.console.commons.XMLRolesReader;
 import org.apache.syncope.console.pages.ResultStatusModalPage;
 import org.apache.syncope.console.pages.RoleModalPage;
@@ -165,7 +166,7 @@ public class RoleTabPanel extends Panel {
         form.setOutputMarkupId(true);
 
         final RolePanel rolePanel = new RolePanel.Builder("rolePanel").form(form).roleTO(selectedNode).
-                roleModalPageMode(RoleModalPage.Mode.ADMIN).build();
+                roleModalPageMode(Mode.ADMIN).build();
         rolePanel.setEnabled(false);
         form.add(rolePanel);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/java/org/apache/syncope/console/rest/ConfigurationRestClient.java
----------------------------------------------------------------------
diff --git a/console/src/main/java/org/apache/syncope/console/rest/ConfigurationRestClient.java b/console/src/main/java/org/apache/syncope/console/rest/ConfigurationRestClient.java
index c2f5ac3..e3bedce 100644
--- a/console/src/main/java/org/apache/syncope/console/rest/ConfigurationRestClient.java
+++ b/console/src/main/java/org/apache/syncope/console/rest/ConfigurationRestClient.java
@@ -21,6 +21,7 @@ package org.apache.syncope.console.rest;
 import java.util.ArrayList;
 import java.util.List;
 import javax.ws.rs.core.Response;
+import org.apache.syncope.common.SyncopeClientException;
 import org.apache.syncope.common.services.ConfigurationService;
 import org.apache.syncope.common.to.AttributeTO;
 import org.apache.syncope.common.to.ConfTO;
@@ -38,7 +39,12 @@ public class ConfigurationRestClient extends BaseRestClient {
     }
 
     public AttributeTO read(final String key) {
-        return getService(ConfigurationService.class).read(key);
+        try {
+            return getService(ConfigurationService.class).read(key);
+        } catch (SyncopeClientException e) {
+            LOG.error("While reading a configuration schema", e);
+        }
+        return null;
     }
 
     public void set(final AttributeTO attributeTO) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/Configuration.html
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/Configuration.html b/console/src/main/resources/org/apache/syncope/console/pages/Configuration.html
index 3996a72..78cd215 100644
--- a/console/src/main/resources/org/apache/syncope/console/pages/Configuration.html
+++ b/console/src/main/resources/org/apache/syncope/console/pages/Configuration.html
@@ -19,9 +19,10 @@ under the License.
 <html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
   <wicket:head>
     <script type="text/javascript">
-      $(document).ready(function() {
+      $(document).ready(function () {
         $("#policies").tabs();
         $("#logs").tabs();
+        $("#layouts").tabs();
       });
     </script>
   </wicket:head>
@@ -33,13 +34,43 @@ under the License.
         <li class="tabs-selected">
           <a href="#parameters"><span><wicket:message key="parameters"/></span></a>
         </li>
+        <li><a href="#layouts"><span><wicket:message key="layouts"/></span></a></li>
         <li><a href="#policies"><span><wicket:message key="policies"/></span></a></li>
         <li><a href="#notifications"><span><wicket:message key="notifications"/></span></a></li>
         <li><a href="#securityQuestions"><span><wicket:message key="securityQuestions"/></span></a></li>
         <li><a href="#workflow"><span><wicket:message key="workflow"/></span></a></li>
         <li><a href="#logs"><span><wicket:message key="logs"/></span></a></li>
       </ul>
-
+      <div id="layouts">
+        <ul>
+          <li class="tabs-selected">
+            <a href="#adminUser"><span><wicket:message key="adminUser"/></span></a>
+          </li>
+          <li><a href="#selfUser"><span><wicket:message key="selfUser"/></span></a></li>
+          <li><a href="#adminRole"><span><wicket:message key="adminRole"/></span></a></li>
+          <li><a href="#selfRole"><span><wicket:message key="selfRole"/></span></a></li>
+          <li><a href="#adminMembership"><span><wicket:message key="adminMembership"/></span></a></li>
+          <li><a href="#selfMembership"><span><wicket:message key="selfMembership"/></span></a></li>
+        </ul>
+        <div id="adminUser" style="border-width: 1px;border-top-width: 0px;">
+          <span wicket:id="adminUserLayoutPanel">[admin user layout panel]</span>
+        </div>
+        <div id="selfUser" style="border-width: 1px;border-top-width: 0px;">
+          <span wicket:id="selfUserLayoutPanel">[self user layout panel]</span>
+        </div>
+        <div id="adminRole" style="border-width: 1px;border-top-width: 0px;">
+          <span wicket:id="adminRoleLayoutPanel">[admin role layout panel]</span>
+        </div>
+        <div id="selfRole" style="border-width: 1px;border-top-width: 0px;">
+          <span wicket:id="selfRoleLayoutPanel">[self role layout panel]</span>
+        </div>
+        <div id="adminMembership" style="border-width: 1px;border-top-width: 0px;">
+          <span wicket:id="adminMembershipLayoutPanel">[admin membership layout panel]</span>
+        </div>
+        <div id="selfMembership" style="border-width: 1px;border-top-width: 0px;">
+          <span wicket:id="selfMembershipLayoutPanel">[self membership layout panel]</span>
+        </div>
+      </div>
       <div id="parameters" wicket:id="parameters" style="width: 700px;">
         <form wicket:id="confForm">
           <span wicket:id="parameters">[parameters]</span>
@@ -194,7 +225,6 @@ under the License.
                alt="DB export" title="title" wicket:message="title:db_export"/>
         </a>
       </div>    
-
     </div>
   </wicket:extend>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/Configuration.properties
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/Configuration.properties b/console/src/main/resources/org/apache/syncope/console/pages/Configuration.properties
index 87c4342..1b6bcc7 100644
--- a/console/src/main/resources/org/apache/syncope/console/pages/Configuration.properties
+++ b/console/src/main/resources/org/apache/syncope/console/pages/Configuration.properties
@@ -38,3 +38,10 @@ active=Enabled
 apply=Save
 securityQuestions=Security Questions
 content=Text
+layouts=Layouts
+adminUser=Administrator User Form
+selfUser=Self User Form
+adminRole=Administrator Role Form
+selfRole=Self Role Form
+adminMembership=Administrator Membership Form
+selfMembership=Self Membership Form

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/Configuration_it.properties
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/Configuration_it.properties b/console/src/main/resources/org/apache/syncope/console/pages/Configuration_it.properties
index 2b63a18..4969e24 100644
--- a/console/src/main/resources/org/apache/syncope/console/pages/Configuration_it.properties
+++ b/console/src/main/resources/org/apache/syncope/console/pages/Configuration_it.properties
@@ -38,3 +38,10 @@ active=Abilitata
 apply=Salva
 securityQuestions=Domande di sicurezza
 content=Testo
+layouts=Layouts
+adminUser=Form Amministrazione Utente
+selfUser=Form Utente
+adminRole=Form Amministrazione Ruolo
+selfRole=Form Ruolo
+adminMembership=Form Amministrazione Membership
+selfMembership=Form Membership

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/Configuration_pt_BR.properties
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/Configuration_pt_BR.properties b/console/src/main/resources/org/apache/syncope/console/pages/Configuration_pt_BR.properties
index 68996f5..cc2dd2b 100644
--- a/console/src/main/resources/org/apache/syncope/console/pages/Configuration_pt_BR.properties
+++ b/console/src/main/resources/org/apache/syncope/console/pages/Configuration_pt_BR.properties
@@ -38,3 +38,10 @@ active=Ativada
 apply=Salvar
 securityQuestions=Quest\u00f5es de seguran\u00e7a
 content=Texto
+layouts=Layouts
+adminUser=Forma do usu\u00e1rio de administra\u00e7\u00e3o
+selfUser=Forma Usu\u00e1rio
+adminRole=Forma Fun\u00e7\u00e3o de administra\u00e7\u00e3o
+selfRole=Form Fun\u00e7\u00e3o
+adminMembership=Forma de membro de administra\u00e7\u00e3o
+selfMembership=Forma Membro

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.html
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.html b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.html
new file mode 100644
index 0000000..51840f4
--- /dev/null
+++ b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.html
@@ -0,0 +1,41 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:wicket="http://wicket.apache.org">
+  <wicket:panel>
+    <div>
+      <div id="users-contain" class="ui-widget">
+        <span wicket:id="container">
+          <form wicket:id="form">
+            <div id="fields">
+              <span wicket:id="fields">[fields]</span>
+            </div>
+            <div style="margin: 20px 0px 0">
+              <input type="submit" style="padding: 7px 15px;"
+                     class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
+                     wicket:id="apply"/>
+              <input type="button" style="padding: 7px 15px;"
+                     class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only"
+                     wicket:id="cancel"/>
+            </div>
+          </form>
+        </span>
+      </div>
+    </div>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.properties
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.properties b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.properties
new file mode 100644
index 0000000..a7a1683
--- /dev/null
+++ b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+apply=Save
+cancel=Cancel

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_it.properties
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_it.properties b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_it.properties
new file mode 100644
index 0000000..a7a1683
--- /dev/null
+++ b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_it.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+apply=Save
+cancel=Cancel

http://git-wip-us.apache.org/repos/asf/syncope/blob/08e7032f/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_pt_BR.properties b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_pt_BR.properties
new file mode 100644
index 0000000..a7a1683
--- /dev/null
+++ b/console/src/main/resources/org/apache/syncope/console/pages/panels/LayoutsPanel_pt_BR.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+apply=Save
+cancel=Cancel


[2/2] git commit: Merge branch '1_2_X'

Posted by md...@apache.org.
Merge branch '1_2_X'


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

Branch: refs/heads/master
Commit: b40948e0cd9fd0b33292a8f318594705facf7192
Parents: 14b8988 08e7032
Author: Marco Di Sabatino Di Diodoro <md...@apache.org>
Authored: Fri Oct 17 12:27:04 2014 +0200
Committer: Marco Di Sabatino Di Diodoro <md...@apache.org>
Committed: Fri Oct 17 12:27:04 2014 +0200

----------------------------------------------------------------------
 .../syncope/console/commons/LayoutType.java     |  43 +++++
 .../apache/syncope/console/commons/Mode.java    |  27 +++
 .../syncope/console/pages/Configuration.java    |  31 +++-
 .../pages/ConfirmPasswordResetModalPage.java    |   4 +-
 .../console/pages/EditUserModalPage.java        |   4 +-
 .../console/pages/MembershipModalPage.java      |   9 +-
 .../pages/RequestPasswordResetModalPage.java    |   3 +-
 .../console/pages/ResultStatusModalPage.java    |  13 +-
 .../syncope/console/pages/RoleModalPage.java    |   8 +-
 .../console/pages/RoleTemplateModalPage.java    |   5 +-
 .../org/apache/syncope/console/pages/Roles.java |   2 +-
 .../syncope/console/pages/UserModalPage.java    |  15 +-
 .../console/pages/UserSelfModalPage.java        |   1 +
 .../console/pages/UserTemplateModalPage.java    |   3 +-
 .../pages/panels/AttrTemplatesPanel.java        |  42 ++---
 .../console/pages/panels/AttributesPanel.java   |  72 ++++++--
 .../pages/panels/EventSelectionPanel.java       |  22 +--
 .../console/pages/panels/LayoutsPanel.java      | 175 +++++++++++++++++++
 .../console/pages/panels/MembershipsPanel.java  |   9 +-
 .../pages/panels/ResourceSecurityPanel.java     |   6 +-
 .../syncope/console/pages/panels/RolePanel.java |  14 +-
 .../console/pages/panels/RoleTabPanel.java      |   5 +-
 .../console/rest/ConfigurationRestClient.java   |   8 +-
 .../syncope/console/pages/Configuration.html    |  36 +++-
 .../console/pages/Configuration.properties      |   7 +
 .../console/pages/Configuration_it.properties   |   7 +
 .../pages/Configuration_pt_BR.properties        |   7 +
 .../console/pages/panels/LayoutsPanel.html      |  41 +++++
 .../pages/panels/LayoutsPanel.properties        |  18 ++
 .../pages/panels/LayoutsPanel_it.properties     |  18 ++
 .../pages/panels/LayoutsPanel_pt_BR.properties  |  18 ++
 31 files changed, 565 insertions(+), 108 deletions(-)
----------------------------------------------------------------------