You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by fm...@apache.org on 2015/10/30 12:42:19 UTC

[12/28] syncope git commit: [SYNCOPE-156] removed every reference to the oldest modal mechanisms

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
index 60fb1b7..458298b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/GroupSearchResultPanel.java
@@ -26,11 +26,11 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.pages.GroupDisplayAttributesModalPage;
 import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.ActionColumn;
 import org.apache.syncope.client.console.wicket.extensions.markup.html.repeater.data.table.AttrColumn;
-import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink.ActionType;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLinksPanel;
@@ -39,35 +39,25 @@ import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.types.SchemaType;
-import org.apache.wicket.Page;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.springframework.util.ReflectionUtils;
 
-public class GroupSearchResultPanel extends AnySearchResultPanel {
+public class GroupSearchResultPanel extends AnySearchResultPanel<GroupTO> {
 
     private static final long serialVersionUID = -1100228004207271270L;
 
     private final String entitlement = "GROUP_READ";
 
-    private final BaseModal<?> editModal;
-
     public GroupSearchResultPanel(final String type, final String parentId,
             final boolean filtered, final String fiql, final PageReference callerRef,
             final AbstractAnyRestClient restClient, final List<AnyTypeClassTO> anyTypeClassTOs, final String realm) {
 
         super(type, parentId, filtered, fiql, callerRef, restClient, anyTypeClassTOs, realm);
-
-        editModal = new BaseModal<>("editModal");
-//        editModal.addCloseButton();
-//        editModal.setFooterVisible(true);
-//        editModal.setHeaderVisible(true);
-//        editModal.setOutputMarkupId(true);
     }
 
     @Override
@@ -125,11 +115,11 @@ public class GroupSearchResultPanel extends AnySearchResultPanel {
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) {
-                        editModal.addOrReplace(new GroupModalPanel(
-                                editModal, getPage().getPageReference(), GroupTO.class.cast(model.getObject())));
+                        modal.addOrReplace(new GroupModalPanel(
+                                modal, getPage().getPageReference(), GroupTO.class.cast(model.getObject())));
 
-                        target.add(editModal);
-                        editModal.show(target);
+                        target.add(modal);
+                        modal.show(target);
                     }
                 }, ActionLink.ActionType.EDIT, entitlement).add(new ActionLink<AnyTO>() {
 
@@ -138,19 +128,39 @@ public class GroupSearchResultPanel extends AnySearchResultPanel {
                     @Override
                     public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) {
                         try {
-                            final GroupTO groupTO = (GroupTO) restClient.
-                                    delete(model.getObject().getETagValue(), model.getObject().getKey());
+                            restClient.delete(model.getObject().getETagValue(), model.getObject().getKey());
+                            info(getString(Constants.OPERATION_SUCCEEDED));
+                            target.add(container);
+                        } catch (SyncopeClientException e) {
+                            error(getString(Constants.ERROR) + ": " + e.getMessage());
+                            LOG.error("While deleting object {}", anyTO.getKey(), e);
+                        }
+                        ((BasePage) getPage()).getFeedbackPanel().refresh(target);
 
-                            //editmodal.setContent(new ResultStatusModal.Builder(editmodal, groupTO).build());
-//                            editModal.addOrReplace(new GroupModalPanel(
-//                                    BaseModal.getModalContentId(), editModal, (GroupTO) model.getObject()));
+//                        try {
+//                            final GroupTO modelObject = (GroupTO) restClient.
+//                                    delete(model.getObject().getETagValue(), model.getObject().getKey());
 //
-//                            target.add(editModal);
-//                            editModal.show(target);
-                        } catch (SyncopeClientException scce) {
-                            error(getString(Constants.OPERATION_ERROR) + ": " + scce.getMessage());
-                            feedbackPanel.refresh(target);
-                        }
+//                            final IModel<GroupTO> model = new CompoundPropertyModel<>(modelObject);
+//                            modal.setFormModel(model);
+//
+//                            target.add(modal.setContent(new ResultStatusModal.Builder<GroupTO>(
+//                                    modal, getPage().getPageReference(), modelObject).build()));
+//
+//                            modal.header(
+//                                    new Model<String>(MessageFormat.format(getString("any.delete"), anyTO.getKey())));
+//                            modal.show(true);
+//
+//                            //editmodal.setContent(new ResultStatusModal.Builder(editmodal, groupTO).build());
+////                            editModal.addOrReplace(new GroupModalPanel(
+////                                    BaseModal.getModalContentId(), editModal, (GroupTO) model.getObject()));
+////
+////                            target.add(editModal);
+////                            editModal.show(target);
+//                        } catch (SyncopeClientException scce) {
+//                            error(getString(Constants.ERROR) + ": " + scce.getMessage());
+//                            LOG.error("While deleting object {}", anyTO.getKey(), scce);
+//                        }
                     }
                 }, ActionLink.ActionType.DELETE, entitlement);
 
@@ -167,18 +177,11 @@ public class GroupSearchResultPanel extends AnySearchResultPanel {
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        displaymodal.setPageCreator(new ModalWindow.PageCreator() {
-
-                            private static final long serialVersionUID = -7834632442532690940L;
-
-                            @Override
-                            public Page createPage() {
-                                return new GroupDisplayAttributesModalPage(
-                                        page.getPageReference(), displaymodal, schemaNames, dSchemaNames);
-                            }
-                        });
+                        target.add(modal.setContent(new GroupDisplayAttributesModalPage(
+                                modal, page.getPageReference(), schemaNames, dSchemaNames)));
 
-                        displaymodal.show(target);
+                        modal.header(new ResourceModel("any.attr.display", ""));
+                        modal.show(true);
                     }
                 }, ActionLink.ActionType.CHANGE_VIEW, entitlement);
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/panels/ImagePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ImagePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ImagePanel.java
index b805a54..aa6ffb1 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ImagePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ImagePanel.java
@@ -28,11 +28,13 @@ public class ImagePanel extends Panel {
 
     private static final long serialVersionUID = 5564818820574092960L;
 
+    private static final String IMG = "img";
+
     private final Image img;
 
     public ImagePanel(final String id, final ContextRelativeResource img) {
         super(id);
-        this.img = new Image("img", img);
+        this.img = new Image(IMG, img);
         add(this.img);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
index de4d65a..06725cf 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/UserSearchResultPanel.java
@@ -20,12 +20,14 @@ package org.apache.syncope.client.console.panels;
 
 import java.io.Serializable;
 import java.lang.reflect.Field;
+import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.client.console.pages.StatusModalPage;
 import org.apache.syncope.client.console.pages.UserDisplayAttributesModalPage;
 import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
@@ -40,24 +42,20 @@ import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
 import org.apache.syncope.common.lib.to.UserTO;
 import org.apache.syncope.common.lib.types.SchemaType;
-import org.apache.wicket.Page;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
 import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
+import org.apache.wicket.model.CompoundPropertyModel;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.model.ResourceModel;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.util.ReflectionUtils;
 
-public class UserSearchResultPanel extends AnySearchResultPanel {
+public class UserSearchResultPanel extends AnySearchResultPanel<UserTO> {
 
     private static final long serialVersionUID = -1100228004207271270L;
 
-    protected static final Logger LOG = LoggerFactory.getLogger(UserSearchResultPanel.class);
-
     private final String entitlement = "USER_LIST";
 
     public UserSearchResultPanel(final String type, final String parentId,
@@ -113,7 +111,7 @@ public class UserSearchResultPanel extends AnySearchResultPanel {
             private static final long serialVersionUID = -3503023501954863131L;
 
             @Override
-            public ActionLinksPanel getActions(final String componentId, final IModel<AnyTO> model) {
+            public ActionLinksPanel<AnyTO> getActions(final String componentId, final IModel<AnyTO> model) {
 
                 final ActionLinksPanel.Builder<AnyTO> panel = ActionLinksPanel.builder(page.getPageReference());
 
@@ -123,18 +121,16 @@ public class UserSearchResultPanel extends AnySearchResultPanel {
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) {
-                        statusmodal.setPageCreator(new ModalWindow.PageCreator() {
+                        final UserTO modelObject = UserTO.class.cast(model.getObject());
 
-                            private static final long serialVersionUID = -7834632442532690940L;
+                        final IModel<UserTO> model = new CompoundPropertyModel<>(modelObject);
+                        modal.setFormModel(model);
 
-                            @Override
-                            public Page createPage() {
-                                return new StatusModalPage<>(
-                                        page.getPageReference(), statusmodal, (UserTO) model.getObject());
-                            }
-                        });
+                        target.add(modal.setContent(
+                                new StatusModalPage<UserTO>(modal, page.getPageReference(), model.getObject())));
 
-                        statusmodal.show(target);
+                        modal.header(new Model<String>(MessageFormat.format(getString("any.edit"), anyTO.getKey())));
+                        modal.show(true);
                     }
                 }, ActionLink.ActionType.MANAGE_RESOURCES, entitlement).add(new ActionLink<AnyTO>() {
 
@@ -142,18 +138,16 @@ public class UserSearchResultPanel extends AnySearchResultPanel {
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) {
-                        statusmodal.setPageCreator(new ModalWindow.PageCreator() {
+                        final UserTO modelObject = UserTO.class.cast(model.getObject());
 
-                            private static final long serialVersionUID = -7834632442532690940L;
+                        final IModel<UserTO> model = new CompoundPropertyModel<>(modelObject);
+                        modal.setFormModel(model);
 
-                            @Override
-                            public Page createPage() {
-                                return new StatusModalPage<>(
-                                        page.getPageReference(), statusmodal, (UserTO) model.getObject(), true);
-                            }
-                        });
+                        target.add(modal.setContent(
+                                new StatusModalPage<UserTO>(modal, page.getPageReference(), model.getObject(), true)));
 
-                        statusmodal.show(target);
+                        modal.header(new Model<String>(MessageFormat.format(getString("any.edit"), anyTO.getKey())));
+                        modal.show(true);
                     }
                 }, ActionLink.ActionType.ENABLE, entitlement).add(new ActionLink<AnyTO>() {
 
@@ -161,19 +155,15 @@ public class UserSearchResultPanel extends AnySearchResultPanel {
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) {
-                        editmodal.setPageCreator(new ModalWindow.PageCreator() {
+                        final UserTO modelObject = ((UserRestClient) restClient).read(model.getObject().getKey());
 
-                            private static final long serialVersionUID = -7834632442532690940L;
+                        final IModel<UserTO> model = new CompoundPropertyModel<>(modelObject);
+                        modal.setFormModel(model);
 
-                            @Override
-                            public Page createPage() {
-                                // SYNCOPE-294: re-read userTO before edit
-                                UserTO userTO = ((UserRestClient) restClient).read(model.getObject().getKey());
-                                return null;
-                            }
-                        });
+                        target.add(modal);
 
-                        editmodal.show(target);
+                        modal.header(new Model<String>(MessageFormat.format(getString("any.edit"), anyTO.getKey())));
+                        modal.show(true);
                     }
                 }, ActionLink.ActionType.EDIT, entitlement).add(new ActionLink<AnyTO>() {
 
@@ -183,24 +173,13 @@ public class UserSearchResultPanel extends AnySearchResultPanel {
                     public void onClick(final AjaxRequestTarget target, final AnyTO anyTO) {
                         try {
                             restClient.delete(model.getObject().getETagValue(), model.getObject().getKey());
-
-                            page.setModalResult(true);
-
-                            editmodal.setPageCreator(new ModalWindow.PageCreator() {
-
-                                private static final long serialVersionUID = -7834632442532690940L;
-
-                                @Override
-                                public Page createPage() {
-                                    return null;
-                                }
-                            });
-
-                            editmodal.show(target);
-                        } catch (SyncopeClientException scce) {
-                            error(getString(Constants.OPERATION_ERROR) + ": " + scce.getMessage());
-                            feedbackPanel.refresh(target);
+                            info(getString(Constants.OPERATION_SUCCEEDED));
+                            target.add(container);
+                        } catch (SyncopeClientException e) {
+                            error(getString(Constants.ERROR) + ": " + e.getMessage());
+                            LOG.error("While deleting object {}", anyTO.getKey(), e);
                         }
+                        ((BasePage) getPage()).getFeedbackPanel().refresh(target);
                     }
                 }, ActionLink.ActionType.DELETE, entitlement);
 
@@ -208,7 +187,7 @@ public class UserSearchResultPanel extends AnySearchResultPanel {
             }
 
             @Override
-            public ActionLinksPanel getHeader(final String componentId) {
+            public ActionLinksPanel<Serializable> getHeader(final String componentId) {
                 final ActionLinksPanel.Builder<Serializable> panel = ActionLinksPanel.builder(page.getPageReference());
 
                 panel.add(new ActionLink<Serializable>() {
@@ -217,18 +196,11 @@ public class UserSearchResultPanel extends AnySearchResultPanel {
 
                     @Override
                     public void onClick(final AjaxRequestTarget target, final Serializable ignore) {
-                        displaymodal.setPageCreator(new ModalWindow.PageCreator() {
-
-                            private static final long serialVersionUID = -7834632442532690940L;
-
-                            @Override
-                            public Page createPage() {
-                                return new UserDisplayAttributesModalPage(
-                                        page.getPageReference(), displaymodal, schemaNames, dSchemaNames);
-                            }
-                        });
+                        target.add(modal.setContent(new UserDisplayAttributesModalPage(
+                                modal, page.getPageReference(), schemaNames, dSchemaNames)));
 
-                        displaymodal.show(target);
+                        modal.header(new ResourceModel("any.attr.display", ""));
+                        modal.show(true);
                     }
                 }, ActionLink.ActionType.CHANGE_VIEW, entitlement).add(new ActionLink<Serializable>() {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
index 42eae37..8ca57ab 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AbstractAnyRestClient.java
@@ -51,6 +51,17 @@ public abstract class AbstractAnyRestClient extends BaseRestClient {
 
     public abstract AnyTO delete(String etag, Long key);
 
+    protected <T extends AnyTO, E extends AnyService<T, ?>> T delete(
+            final Class<E> serviceClass, final Class<T> objectType, final String etag, final Long key) {
+        T result;
+        synchronized (this) {
+            final E service = getService(etag, serviceClass);
+            result = service.delete(key).readEntity(objectType);
+            resetClient(serviceClass);
+        }
+        return result;
+    }
+
     public abstract BulkActionResult bulkAction(BulkAction action);
 
     protected abstract Class<? extends AnyService<?, ?>> getAnyServiceClass();

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
index 4c29faa..589f140 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/AnyObjectRestClient.java
@@ -80,10 +80,11 @@ public class AnyObjectRestClient extends AbstractAnyRestClient {
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
-    public AnyObjectTO read(final Long id) {
-        AnyObjectTO anyObjectTO = null;
+    @SuppressWarnings("unchecked")
+    public <T extends AnyTO> T read(final long id) {
+        T anyObjectTO = null;
         try {
-            anyObjectTO = getService(AnyObjectService.class).read(id);
+            anyObjectTO = (T) getService(AnyObjectService.class).read(id);
         } catch (SyncopeClientException e) {
             LOG.error("While reading any object", e);
         }
@@ -106,8 +107,8 @@ public class AnyObjectRestClient extends AbstractAnyRestClient {
     }
 
     @Override
-    public AnyTO delete(final String etag, final Long key) {
-        throw new UnsupportedOperationException("Not supported yet.");
+    public AnyObjectTO delete(final String etag, final Long key) {
+        return delete(AnyObjectService.class, AnyObjectTO.class, etag, key);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
index 650818b..15f9c9b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/BaseRestClient.java
@@ -67,7 +67,6 @@ public abstract class BaseRestClient implements Serializable {
     protected <E extends JAXRSService, T> T getObject(final E service, final URI location, final Class<T> resultClass) {
         WebClient webClient = WebClient.fromClient(WebClient.client(service));
         webClient.accept(SyncopeConsoleSession.get().getMediaType()).to(location.toASCIIString(), false);
-
         return webClient.get(resultClass);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
index f631810..a026119 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/GroupRestClient.java
@@ -106,13 +106,7 @@ public class GroupRestClient extends AbstractAnyRestClient {
 
     @Override
     public GroupTO delete(final String etag, final Long key) {
-        GroupTO result;
-        synchronized (this) {
-            GroupService service = getService(etag, GroupService.class);
-            result = service.delete(key).readEntity(GroupTO.class);
-            resetClient(GroupService.class);
-        }
-        return result;
+        return delete(GroupService.class, GroupTO.class, etag, key);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
index a780453..cf92dad 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/UserRestClient.java
@@ -83,14 +83,8 @@ public class UserRestClient extends AbstractAnyRestClient {
     }
 
     @Override
-    public UserTO delete(final String etag, final Long id) {
-        UserTO result;
-        synchronized (this) {
-            UserService service = getService(etag, UserService.class);
-            result = service.delete(id).readEntity(UserTO.class);
-            resetClient(UserService.class);
-        }
-        return result;
+    public UserTO delete(final String etag, final Long key) {
+        return delete(UserService.class, UserTO.class, etag, key);
     }
 
     public UserTO read(final Long id) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
index 40a88ac..f0c7093 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/markup/html/form/BinaryFieldPanel.java
@@ -25,7 +25,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.PreviewUtils;
 import org.apache.syncope.client.console.commons.HttpResourceStream;
 import org.apache.syncope.client.console.commons.Constants;
-import org.apache.syncope.client.console.pages.BaseModalPage;
+import org.apache.syncope.client.console.pages.BasePage;
 import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -140,7 +140,7 @@ public class BinaryFieldPanel extends FieldPanel<String> {
                         target.add(uploadForm);
                     } catch (Exception e) {
                         error(getString(Constants.ERROR) + ": " + e.getMessage());
-                        ((BaseModalPage) getPage()).getFeedbackPanel().refresh(target);
+                        ((BasePage) getPage()).getFeedbackPanel().refresh(target);
                         LOG.error("While saving uploaded file", e);
                     }
                 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage.properties
index 0f1fcdc..badba8d 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage.properties
@@ -17,3 +17,7 @@
 title=Global Status
 changePwdLabel=Password propagation
 passwordMismatch=Password mismatch
+
+resourceName=Resource
+connObjectLink=Connector Object Link
+status=Status

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_it.properties
index d30c99c..ddda78c 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_it.properties
@@ -17,3 +17,8 @@
 title=Stato Globale
 changePwdLabel=Propagazione password
 passwordMismatch=Password non corrispondenti
+
+resourceName=Risorsa
+connObjectLink=Connector Object Link
+status=Stato
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_pt_BR.properties
index 36d86e8..27b8dce 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/AbstractStatusModalPage_pt_BR.properties
@@ -17,3 +17,8 @@
 title=Estatus Global
 changePwdLabel=Password propagation
 passwordMismatch=Password mismatch
+
+resourceName=Recurso
+connObjectLink=Connector Object Link
+status=Estado
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html
deleted file mode 100644
index 8f4527c..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-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">
-  <head>
-    <title></title>
-
-    <link href="webjars/font-awesome/${font-awesome.version}/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
-    <link href="webjars/ionicons/${ionicons.version}/css/ionicons.min.css" rel="stylesheet" type="text/css" />
-
-    <link href="css/AdminLTE_plugins/dataTables/dataTables.bootstrap.css" rel="stylesheet" type="text/css" />
-    <link href="css/AdminLTE_skins/skin-green.css" rel="stylesheet" type="text/css" />
-    <link href="css/syncopeConsole.css" rel="stylesheet" type="text/css" />
-    <link href="css/fieldstyle.css" rel="stylesheet" type="text/css" />
-
-    <script type="text/javascript" src="webjars/jquery-ui/${jquery-ui.version}/jquery-ui.min.js"></script>>
-
-    <script type="text/javascript">
-      var notificationShownTimes = 0;
-
-      function showNotification(componentId, messagecount) {
-        notificationShownTimes++;
-        timeout = 1700 + (messagecount * 500) + notificationShownTimes * 200;
-        $('div#' + componentId).fadeTo('normal', 1.0);
-        setTimeout("$('div#" + componentId + "').fadeOut('normal')", timeout);
-      }
-    </script>
-
-    <style type="text/css">
-      table.palette td.header {
-        background:url("images/ui-bg_glass_75_e6e6e6_1x400.png")
-          repeat-x scroll 50% 50% #E6E6E6 !important;
-      }
-    </style>
-  </head>
-  <body onload="setTimeout('window.focus();', 0);">
-    <div wicket:id="feedback"/>
-    <wicket:child />
-  </body>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.properties
deleted file mode 100644
index e696256..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# 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.
-submit=Save
-add=Add
-remove=Delete
-cancel=Cancel

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_it.properties
deleted file mode 100644
index 58e0aa0..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_it.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# 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.
-submit=Salva
-add=Aggiungi
-remove=Elimina
-cancel=Annulla

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_pt_BR.properties
deleted file mode 100644
index 490fe30..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/BaseModalPage_pt_BR.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-# 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.
-submit=Salvar
-add=Adicionar
-remove=Remover
-cancel=Cancelar

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.html
deleted file mode 100644
index 8cb22f0..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!--
-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:extend>
-    <form wicket:id="form">
-      <div class="tabbable tabs-left">
-        <ul class="nav nav-tabs">
-          <li class="active"><a  data-toggle="tab" href="#resource"><span><wicket:message key="resource"/></span></a></li>
-          <li><a  data-toggle="tab" href="#umapping"><span><wicket:message key="umapping"/></span></a></li>
-          <li><a  data-toggle="tab" href="#gmapping"><span><wicket:message key="gmapping"/></span></a></li>
-          <li><a  data-toggle="tab" href="#connectorProperties"><span><wicket:message key="connectorProperties"/></span></a></li>
-          <li><a  data-toggle="tab" href="#security"><span><wicket:message key="security"/></span></a></li>
-        </ul>
-        <div class="tab-content">
-          <div id="resource" class="tab-pane active">
-            <span wicket:id="details">[details]</span>
-            <span wicket:id="systeminformation">[System Information]</span>
-          </div>
-          <div id="umapping" class="tab-pane">
-            <span wicket:id="umapping">[umapping]</span>
-          </div>
-          <div id="gmapping" class="tab-pane">
-            <span wicket:id="gmapping">[gmapping]</span>
-          </div>
-          <div id="connectorProperties" class="tab-pane">
-            <span wicket:id="connconf">[connconf]</span>
-          </div>
-          <div id="security" class="tab-pane">
-            <span wicket:id="security">[security]</span>
-          </div>
-        </div>
-      </div>
-
-      <div class="modal-footer">
-        <input type="submit" class="btn btn-primary" wicket:id="apply"/>
-        <input type="button" class="btn btn-default" wicket:id="cancel"/>
-      </div> 
-    </form>
-  </wicket:extend>
-</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.properties
deleted file mode 100644
index 789919b..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage.properties
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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.
-resource=Resource details
-umapping=User mapping
-connectorProperties=Connector properties
-security=Security
-required_alert=All form fields are required
-connector=Connector
-existing_resources=Existing resources
-action=Action
-edit_attribute=Edit resource
-title=Resource
-extAttrNames=External attributes
-intMappingTypes=Internal mapping types
-entity=Entity
-groupSchema=Group Schema
-connObjectKey=ConnObjectKey
-mandatoryCondition=Mandatory
-password=Password
-purpose=Purpose
-mappingUserSchema=Mapping User Schema
-mappingGroupSchema=Mapping Group Schema
-delete=Delete
-intAttrNames=Internal attributes
-enforceMandatoryCondition=Enforce mandatory condition
-fieldName=Field name
-
-connObjectKeyValidation=There must be exactly one ConnObjectKey
-propagationMode=Propagation mode
-connObjectLink=ConnObjectLink
-enable=Enable
-
-createTraceLevel=Create trace level
-updateTraceLevel=Update trace level
-deleteTraceLevel=Delete trace level
-syncTraceLevel=Synchronization trace level
-propagationPriority=Propagation priority
-propagationPrimary=Propagation primary
-
-success_connection=Successful connection
-error_connection=Connection failure
-check=Check connection
-actionsClasses=Actions classes
-gmapping=Group mapping
-new=New resource
-randomPwdIfNotProvided=Generate random passwords when missing

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_it.properties
deleted file mode 100644
index 54179a5..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_it.properties
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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.
-resource=Dettagli Risorsa
-umapping=Mapping utenti
-connectorProperties=Propriet\u00e0\u00a0 Connettore
-security=Sicurezza
-required_alert=Tutti i campi sono richiesti
-connector=Connettore
-existing_resources=Risorse esistenti
-action=Azione
-edit_attribute=Modifica risorsa
-title=Risorsa
-extAttrNames=Attributi esterni
-intMappingTypes=Tipo mapping interno
-entity=Entit&agrave;
-groupSchema=Schema Gruppo
-connObjectKey=ConnObjectKey
-mandatoryCondition=Obbligatorio
-password=Password
-purpose=Scopo
-mappingUserSchema=Mapping User Schema
-mappingGroupSchema=Mapping Group Schema
-delete=Rimuovi
-intAttrNames=Attributi interni
-enforceMandatoryCondition=Abilita mandatory condition
-fieldName=Nome campo
-
-connObjectKeyValidation=Deve essere definito esattamente un ConnObjectKey
-propagationMode=Modalit\u00e0 di propagazione
-connObjectLink=ConnObjectLink
-enable=Abilita
-
-createTraceLevel=Livello di tracciamento delle creazioni
-updateTraceLevel=Livello di tracciamento degli aggiornamenti
-deleteTraceLevel=Livello di tracciamento delle cancellazioni
-syncTraceLevel=Livello di tracciamento delle sincronizzazioni
-propagationPriority=Priorit\u00e0 in propagazione
-propagationPrimary=Primaria in propagazione
-
-success_connection=Connessione avvenuta con successo
-error_connection=Connessione non riuscita
-check=Verifica connessione
-actionsClasses=Classi azioni
-gmapping=Mapping gruppi
-new=Nuova risorsa
-randomPwdIfNotProvided=Genera password casuali se mancanti

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_pt_BR.properties
deleted file mode 100644
index 45c3616..0000000
--- a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResourceModalPage_pt_BR.properties
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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.
-resource=Detalhes de Recursos
-umapping=Mapeamento de usu\u00e1rios
-connectorProperties=Propriedades de Conectores
-security=Seguran\u00e7a
-required_alert=Todos os campos deste formul\u00e1rio s\u00e3o obrigat\u00f3rios
-connector=Conector
-existing_resources=Recursos Existentes
-action=A\u00e7\u00e3o
-edit_attribute=Alterar Recurso
-title=Recurso
-extAttrNames=Atributos Externos
-intMappingTypes=Tipos internos de mapeamentos
-entity=Entidade
-groupSchema=Esquema de Grupo
-connObjectKey=ConnObjectKey
-mandatoryCondition=Obrigat\u00f3rio
-password=Senha
-purpose=Prop\u00f3sito
-mappingUserSchema=Esquema de mapeamento de usu\u00e1rio
-mappingGroupSchema=Esquema de mapeamento de grupo
-delete=Excluir
-intAttrNames=Atributos internos
-enforceMandatoryCondition=Aplicar condi\u00e7\u00e3o obrigat\u00f3ria
-fieldName=Nome do Campo
-
-connObjectKeyValidation=Precisa ser exatamente um ConnObjectKey
-propagationMode=Modo de propaga\u00e7\u00e3o
-connObjectLink=ConnObjectLink
-enable=Habilitado
-
-createTraceLevel=Criar n\u00edvel de trace
-updateTraceLevel=Atualizar n\u00edvel de trace
-deleteTraceLevel=Excluir n\u00edvel de trace
-syncTraceLevel=N\u00edvel de trace de sincroniza\u00e7\u00e3o
-propagationPriority=Prioridade de propaga\u00e7\u00e3o
-propagationPrimary=Propaga\u00e7\u00e3o prim\u00e1ria
-
-success_connection=Conex\u00e3o com sucesso
-error_connection=Conex\u00e3o sem sucesso
-check=Verificar a conex\u00e3o
-actionsClasses=Classes de a\u00e7\u00f5es
-gmapping=Mapeamento de grupos
-new=Novo recurso
-randomPwdIfNotProvided=Gerar senhas aleat\u00f3rias quando n\u00e3o houver

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.html b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.html
new file mode 100644
index 0000000..647a311
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.html
@@ -0,0 +1,226 @@
+<!--
+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:head>
+    <style>
+      div#propagation {
+        font-size: 8px;
+        height: auto;
+        margin-top: 3px;
+        text-align: left;
+      }
+
+      div#status {
+        float: left;
+        height: 25px;
+        margin-top: 3px;
+        text-align: center;
+        width: 8%;
+      }
+
+      div.assignment {
+        border: 1px solid #DDDDDD;
+        display: inline-table;
+        margin-bottom: 20px;
+        width: 100%;
+      }
+
+      div.assignments {
+        color: #555555;
+        display: inline-table;
+        margin-top: 20px;
+        width: 100%;
+      }
+
+      div.header {
+        display: inline-table;
+        margin: 5px;
+        width: 98%;
+      }
+
+      div.profile div#row{
+        display: inline-table;
+        width:100%;
+        vertical-align: middle;
+      }
+
+      div.profile {
+        background-color: #EEEEEE;
+        color: #555555;
+        display: inline-table;
+        margin: 0px 5px 5px 5px;
+        width: 98%;
+      }
+
+      div#name {
+        border-bottom: 1px solid #DDDDDD;
+        display: table-cell;
+        height: 15px;
+        width: 220px;
+        padding: 0px 5px 0px 5px;
+        vertical-align: middle;
+      }
+
+      div#value {
+        border-bottom: 1px solid #DDDDDD;
+        border-left: 1px solid #DDDDDD;
+        display: table-cell;
+        height: 15px;
+        width: 38%;
+        padding: 0px 5px 0px 5px;
+        overflow: hidden;
+        vertical-align: middle;
+      }
+
+      div#resource {
+        display: table-cell;
+        width: 220px;
+        height: 30px;
+        padding: 10px 0px 5px 0px;
+      }
+
+      div#resource img{
+        width: 12px;
+        height: 12px;
+        position: relative;
+        left: 3px;
+        top: 1px;
+        opacity: 1;
+      }
+
+      div#attrhead {
+        display: table-cell;
+        border-left: 1px solid #DDDDDD;
+        width: 38%;
+        height: 30px;
+        padding: 3px 0px 5px 0px;
+        text-align: center;
+        vertical-align: middle;
+        font-size: 11px;
+      }
+    </style>
+  </wicket:head>
+  <wicket:extend>
+
+    <wicket:fragment wicket:id="propagationResultFrag">
+      <p class="ui-widget ui-corner-all ui-widget-header">
+        <wicket:message key="operationResult"/>&nbsp;<span wicket:id="info"/>
+      </p>
+
+      <div class="assignments">
+        <div wicket:id="resources" class="assignment">
+
+          <span wicket:id="attrhead">[Attributes head]</span>
+
+          <div class="profile">
+            <span wicket:id="attrs">
+              <div id="row">
+                <div id="name">
+                  <span wicket:id="attrName">[Attribute name]</span>
+                </div>
+                <div id="value">
+                  <span wicket:id="beforeValue">[Before value]</span>
+                </div>
+                <div id="value">
+                  <span wicket:id="afterValue">[After value]</span>
+                </div>
+              </div>
+            </span>
+          </div>
+        </div>
+      </div>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="userSelfResultFrag">
+      <p><wicket:message key="selfResult"/></p>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="remoteStatusFrag">
+      <img wicket:id="status"/>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="attrValueFrag">
+      <span wicket:id="value">[After value]</span>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="attrHeadFrag">
+      <div class="header alt">
+        <div id="resource">
+          <div>
+            <span wicket:id="resource">[resource name]</span>
+            <a wicket:id="showFailureWindow" href="#">
+              <img wicket:id="icon"/>
+            </a>
+
+            <div id="propagation">
+              <wicket:message key="propresult">[propagation result message]</wicket:message>
+              &nbsp;
+              <span wicket:id="propagation">[propagation result]</span>
+            </div>
+
+            <div wicket:id="failureWindow"></div>
+
+          </div>
+        </div>
+
+        <div id="attrhead">
+          <wicket:message key="before">[before]</wicket:message>
+        </div>
+
+        <div id="attrhead">
+          <wicket:message key="after">[after]</wicket:message>
+        </div>
+      </div>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="emptyAttrHeadFrag">
+      <div class="header alt">
+        <div id="resource">
+          <div>
+            <span wicket:id="resource">[resource name]</span>
+            <a wicket:id="showFailureWindow" href="#">
+              <img wicket:id="icon"/>
+            </a>
+
+            <div id="propagation">
+              <wicket:message key="propresult">[propagation result message]</wicket:message>
+              &nbsp;
+              <span wicket:id="propagation">[propagation result]</span>
+              <div wicket:id="failureWindow"></div>
+
+            </div>
+
+          </div>
+        </div>
+      </div>
+    </wicket:fragment>
+
+    <wicket:fragment wicket:id="emptyFrag">
+    </wicket:fragment>
+
+    <div wicket:id="container" id="users-contain" class="ui-widget" style="margin:30px; width:inherit">
+
+      <span wicket:id="resultFrag"/>
+
+      <a class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only" wicket:id="close">
+        <wicket:message key="close"/>
+      </a>
+    </div>
+  </wicket:extend>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.properties
new file mode 100644
index 0000000..3ee25f8
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal.properties
@@ -0,0 +1,26 @@
+# 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.
+operationResult=Operation result for
+close=Close
+selfResult=Your request has been registered: depending on configuration, approval might be required.
+__NAME__=Account Link
+__UID__=Account Id
+__PASSWORD__=Password
+__ENABLE__=Enabled
+propresult=Propagation: 
+before=Before propagation
+after=After propagation

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_it.properties
new file mode 100644
index 0000000..92ee70e
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_it.properties
@@ -0,0 +1,26 @@
+# 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.
+operationResult=Risultato dell'operazione per
+close=Chiudi
+selfResult=La sua richiesta \u00e8 stata presa in carico: se la configurazione lo prevede, sar\u00e0 necessaria l'approvazione.
+__NAME__=Account Link
+__UID__=Account Id
+__PASSWORD__=Password
+__ENABLE__=Abilitato
+propresult=Propagazione: 
+before=Prima della propagazione
+after=Dopo la propagazione

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_pt_BR.properties
new file mode 100644
index 0000000..319d1c9
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/pages/ResultStatusModal_pt_BR.properties
@@ -0,0 +1,26 @@
+# 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.
+operationResult=Resultado de opera\u00E7\u00E3o para\:
+close=Fechar
+selfResult=Sua requis\u00E7\u00E3o foi registrada e ser\u00E1 encaminhada ao administrador respons\u00E1vel. Obrigado
+__NAME__=Link de conta
+__UID__=Identificador de Conta
+__PASSWORD__=Senha
+__ENABLE__=Habilitado
+propresult=Propaga\u00E7\u00E3o
+before=Antes da Propaga\u00E7\u00E3o
+after=Depois da Propaga\u00E7\u00E3o

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
index e543318..457ccc8 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.html
@@ -17,32 +17,31 @@ 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 wicket:id="container">
-      <span wicket:id="resultTable">[Table]</span>
-      
-      <span style="float:right">
-        <form wicket:id="paginator" style="display:inline">
-          <div class="col-sm-6">
-            <div class="dataTables_length">
-              <label>
-                <wicket:message key="displayRows"/>
-                <select class="form-control input-sm" wicket:id="rowsChooser"/>
-              </label>
-            </div>
-          </div>
-        </form>
-      </span>
-    </div>
-
-    <div wicket:id="editModal">
-    </div>
+  <head>
+    <title>Search result panel</title>
+  </head>
+  <body>
+    <wicket:panel>
+      <div wicket:id="container">
+        <span wicket:id="resultTable">[Table]</span>
 
-    <div wicket:id="displayModal">
-    </div>
+        <span style="float:right">
+          <form wicket:id="paginator" style="display:inline">
+            <div class="col-sm-6">
+              <div class="dataTables_length">
+                <label>
+                  <wicket:message key="displayRows"/>
+                  <select class="form-control input-sm" wicket:id="rowsChooser"/>
+                </label>
+              </div>
+            </div>
+          </form>
+        </span>
+      </div>
 
-    <div wicket:id="statusModal">
-    </div>
+      <div wicket:id="modal">
+      </div>
 
-  </wicket:panel>
+    </wicket:panel>
+  </body>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.properties
index 6f016a4..07db51e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel.properties
@@ -28,3 +28,7 @@ username=Username
 creationDate=Creation Date
 tokenValued=Valued
 tokenNotValued=Not valued
+
+any.edit=Edit object {0}
+any.new=New object
+any.attr.display=Attributes to be displayed

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_it.properties
index 02b3b57..0d0d580 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_it.properties
@@ -28,3 +28,7 @@ username=Username
 creationDate=Data Creazione
 tokenValued=Valued
 tokenNotValued=Not valued
+
+any.edit=Edit object {0}
+any.new=New object
+any.attr.display=Attributes to be displayed

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_pt_BR.properties
index 1591edc..e06e38e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/AbstractSearchResultPanel_pt_BR.properties
@@ -18,13 +18,17 @@ displayRows=Mostrar linhas
 
 firstname=Nome
 surname=Sobrenome
-userId=Identificador do Usu\u00E1rio
+userId=Identificador do Usu\u00e1rio
 edit=Alterar
 delete=Excluir
 id=Identificador
 status=Estatus
 token=Token
-username=Nome de Usu\u00E1rio
-creationDate=Data de Cria\u00E7\u00E3o
-tokenValued=Atribu\u00EDdo
-tokenNotValued=N\u00E3o Atribu\u00EDdo
+username=Nome de Usu\u00e1rio
+creationDate=Data de Cria\u00e7\u00e3o
+tokenValued=Atribu\u00eddo
+tokenNotValued=N\u00e3o Atribu\u00eddo
+
+any.edit=Edit object {0}
+any.new=New object
+any.attr.display=Attributes to be displayed

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/panels/ImagePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ImagePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ImagePanel.html
new file mode 100644
index 0000000..8eba8b8
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ImagePanel.html
@@ -0,0 +1,28 @@
+<!--
+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">
+  <head>
+    <title>Image  panel</title>
+  </head>
+  <body>
+    <wicket:panel>
+      <img wicket:id="img" />
+    </wicket:panel>
+  </body>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html
index 0dc5137..cb4d27f 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/provision/ProvisionWizardBuilder$ConnObjectLink.html
@@ -20,10 +20,10 @@ under the License.
       xmlns:wicket="http://xmlns.jcp.org/jsf/composite">
   <wicket:panel>
     <span wicket:id="connObjectLinkContainer">
-      <div>
+      <div class="form-group">
         <span wicket:id="connObjectLinkCheckbox">[connObjectLinkCheckbox]</span>
       </div>
-      <div>
+      <div class="form-group">
         <span wicket:id="connObjectLink">[connObjectLink]</span>
       </div>
     </span>

http://git-wip-us.apache.org/repos/asf/syncope/blob/1e15b05e/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRouteModalPage.java
----------------------------------------------------------------------
diff --git a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRouteModalPage.java b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRouteModalPage.java
index 301c310..b24e360 100644
--- a/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRouteModalPage.java
+++ b/ext/camel/client-console/src/main/java/org/apache/syncope/client/console/pages/CamelRouteModalPage.java
@@ -19,7 +19,9 @@
 package org.apache.syncope.client.console.pages;
 
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.AbstractModalPanel;
 import org.apache.syncope.client.console.rest.CamelRouteRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.CamelRouteTO;
 import org.apache.syncope.common.lib.types.Entitlement;
@@ -28,7 +30,6 @@ import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxButton;
-import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.form.TextArea;
 import org.apache.wicket.model.CompoundPropertyModel;
@@ -36,20 +37,24 @@ import org.apache.wicket.model.Model;
 import org.apache.wicket.model.PropertyModel;
 import org.apache.wicket.spring.injection.annot.SpringBean;
 
-public class CamelRouteModalPage extends BaseModalPage {
+public class CamelRouteModalPage extends AbstractModalPanel {
 
     private static final long serialVersionUID = -1438441210568592931L;
 
     @SpringBean
     private CamelRouteRestClient restClient;
 
-    public CamelRouteModalPage(final PageReference pageRef, final ModalWindow window,
-            final CamelRouteTO routeTO, final boolean createFlag) {
+    public CamelRouteModalPage(
+            final BaseModal<?> modal,
+            final PageReference pageRef,
+            final CamelRouteTO routeTO,
+            final boolean createFlag) {
+
+        super(modal, pageRef);
 
         Form<CamelRouteTO> routeForm = new Form<>("routeDefForm");
 
-        final TextArea<String> routeDefArea =
-                new TextArea<>("content", new PropertyModel<String>(routeTO, "content"));
+        final TextArea<String> routeDefArea = new TextArea<>("content", new PropertyModel<String>(routeTO, "content"));
 
         routeForm.add(routeDefArea);
         routeForm.setModel(new CompoundPropertyModel<>(routeTO));
@@ -67,16 +72,16 @@ public class CamelRouteModalPage extends BaseModalPage {
                     // Uncomment with something similar once SYNCOPE-156 is completed
                     // Configuration callerPage = (Configuration) pageRef.getPage();
                     // callerPage.setModalResult(true);
-                    window.close(target);
+                    modal.close(target);
                 } catch (SyncopeClientException scee) {
                     error(getString(Constants.ERROR) + ": " + scee.getMessage());
                 }
-                target.add(feedbackPanel);
+                modal.getFeedbackPanel().refresh(target);
             }
 
             @Override
             protected void onError(final AjaxRequestTarget target, final Form<?> form) {
-                target.add(feedbackPanel);
+                modal.getFeedbackPanel().refresh(target);
             }
 
         };