syncope-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ilgro...@apache.org
Subject syncope git commit: [SYNCOPE-789] Feature provided
Date Fri, 08 Apr 2016 15:36:13 GMT
Repository: syncope
Updated Branches:
  refs/heads/master 479978703 -> 91befa207


[SYNCOPE-789] Feature provided


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

Branch: refs/heads/master
Commit: 91befa207e491a1afc147376fe5d4175a85b3764
Parents: 4799787
Author: Francesco Chicchiriccò <ilgrosso@apache.org>
Authored: Fri Apr 8 17:35:53 2016 +0200
Committer: Francesco Chicchiriccò <ilgrosso@apache.org>
Committed: Fri Apr 8 17:35:53 2016 +0200

----------------------------------------------------------------------
 .../client/console/commons/Constants.java       |   2 +
 .../console/commons/status/StatusUtils.java     |  10 +-
 .../console/panels/ConnObjectDetails.java       |  42 ++++
 .../panels/ConnObjectDirectoryPanel.java        | 210 +++++++++++++++++++
 .../client/console/panels/ConnObjects.java      | 140 +++++++++++++
 .../client/console/panels/MultilevelPanel.java  |   4 +-
 .../client/console/panels/VirSchemaDetails.java |   2 +-
 .../panels/search/AbstractSearchPanel.java      |   2 +-
 .../panels/search/AnyObjectSearchPanel.java     |   7 +-
 .../console/rest/AbstractAnyRestClient.java     |   3 -
 .../console/rest/AnyObjectRestClient.java       |   6 -
 .../client/console/rest/GroupRestClient.java    |   8 -
 .../client/console/rest/ResourceRestClient.java |  59 ++++--
 .../client/console/rest/UserRestClient.java     |  13 +-
 .../console/status/StatusDirectoryPanel.java    |   4 +-
 .../tasks/PropagationTaskDirectoryPanel.java    |   5 -
 .../client/console/tasks/PropagationTasks.java  |   8 +-
 .../console/tasks/TaskDirectoryPanel.java       |   6 +-
 .../client/console/topology/Topology.java       |   2 +-
 .../console/topology/TopologyTogglePanel.java   |  24 ++-
 .../html/repeater/data/table/AttrColumn.java    |  21 +-
 .../console/wizards/any/ConnObjectPanel.java    |   6 +-
 .../client/console/wizards/any/Resources.java   |   2 +-
 .../client/console/wizards/any/StatusPanel.java |  10 +-
 .../console/panels/ConnObjectDetails.html       |  23 ++
 .../client/console/panels/ConnObjects.html      |  24 +++
 .../console/panels/ConnObjects.properties       |  17 ++
 .../console/panels/ConnObjects_it.properties    |  17 ++
 .../console/panels/ConnObjects_pt_BR.properties |  17 ++
 .../client/console/tasks/AbstractTasks.html     |   1 -
 .../console/tasks/TaskExecutionDetails.html     |  11 +-
 .../console/topology/TopologyTogglePanel.html   |   1 +
 .../topology/TopologyTogglePanel.properties     |   2 +
 .../topology/TopologyTogglePanel_it.properties  |   2 +
 .../TopologyTogglePanel_pt_BR.properties        |   2 +
 .../console/wizards/any/ConnObjectPanel.html    |   1 -
 36 files changed, 604 insertions(+), 110 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
index f481c8f..def4c51 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/Constants.java
@@ -93,6 +93,8 @@ public final class Constants {
 
     public static final String PREF_GROUP_PAGINATOR_ROWS = "group.paginator.rows";
 
+    public static final String PREF_CONNOBJECTS_PAGINATOR_ROWS = "connobjects.paginator.rows";
+
     public static final String PREF_ROLE_PAGINATOR_ROWS = "role.paginator.rows";
 
     public static final String PREF_WORKFLOW_FORM_PAGINATOR_ROWS = "role.paginator.workflow.form";

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
index d64b02a..27e7dbc 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/commons/status/StatusUtils.java
@@ -28,7 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.commons.ConnIdSpecialAttributeName;
 import org.apache.syncope.client.console.commons.Constants;
 import org.apache.syncope.client.console.panels.LabelPanel;
-import org.apache.syncope.client.console.rest.AbstractAnyRestClient;
+import org.apache.syncope.client.console.rest.ResourceRestClient;
 import org.apache.syncope.common.lib.patch.PasswordPatch;
 import org.apache.syncope.common.lib.patch.StatusPatch;
 import org.apache.syncope.common.lib.to.AnyTO;
@@ -46,11 +46,7 @@ public class StatusUtils implements Serializable {
 
     private static final Logger LOG = LoggerFactory.getLogger(StatusUtils.class);
 
-    private final AbstractAnyRestClient<?> restClient;
-
-    public StatusUtils(final AbstractAnyRestClient<?> restClient) {
-        this.restClient = restClient;
-    }
+    private final ResourceRestClient restClient = new ResourceRestClient();
 
     public List<ConnObjectWrapper> getConnectorObjects(final AnyTO any) {
         final List<ConnObjectWrapper> objects = new ArrayList<>();
@@ -78,7 +74,7 @@ public class StatusUtils implements Serializable {
         for (String resourceName : resources) {
             ConnObjectTO objectTO = null;
             try {
-                objectTO = restClient.readConnObject(resourceName, any.getKey());
+                objectTO = restClient.readConnObject(resourceName, any.getType(), any.getKey());
             } catch (Exception e) {
                 LOG.warn("ConnObject '{}' not found on resource '{}'", any.getKey(), resourceName);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
new file mode 100644
index 0000000..df55d0b
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDetails.java
@@ -0,0 +1,42 @@
+/*
+ * 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.client.console.panels;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wizards.any.ConnObjectPanel;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.wicket.PageReference;
+
+public class ConnObjectDetails extends MultilevelPanel.SecondLevel {
+
+    private static final long serialVersionUID = -6532127408741991806L;
+
+    public ConnObjectDetails(
+            final BaseModal<?> baseModal, final ConnObjectTO connObjectTO, final PageReference pageRef) {
+
+        super();
+
+        MultilevelPanel mlp = new MultilevelPanel("details");
+        mlp.setFirstLevel(
+                new ConnObjectPanel(MultilevelPanel.FIRST_LEVEL_ID, Pair.of((ConnObjectTO) null, connObjectTO)));
+        add(mlp);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDirectoryPanel.java
new file mode 100644
index 0000000..056e7fd
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectDirectoryPanel.java
@@ -0,0 +1,210 @@
+/*
+ * 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.client.console.panels;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.syncope.client.console.commons.ConnIdSpecialAttributeName;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.commons.DirectoryDataProvider;
+import org.apache.syncope.client.console.commons.SortableDataProviderComparator;
+import org.apache.syncope.client.console.panels.ConnObjectDirectoryPanel.ConnObjectDataProvider;
+import org.apache.syncope.client.console.rest.ResourceRestClient;
+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.ActionLinksPanel;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.syncope.common.lib.types.SchemaType;
+import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
+import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.CompoundPropertyModel;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.ResourceModel;
+
+public abstract class ConnObjectDirectoryPanel
+        extends DirectoryPanel<ConnObjectTO, ConnObjectTO, ConnObjectDataProvider, ResourceRestClient>
+        implements ModalPanel<ConnObjectTO> {
+
+    private static final long serialVersionUID = 4986172040062752781L;
+
+    private final String resource;
+
+    private final String anyType;
+
+    protected final BaseModal<?> baseModal;
+
+    private final MultilevelPanel multiLevelPanelRef;
+
+    protected ConnObjectDirectoryPanel(
+            final BaseModal<?> baseModal,
+            final MultilevelPanel multiLevelPanelRef,
+            final String resource,
+            final String anyType,
+            final PageReference pageRef) {
+
+        super(MultilevelPanel.FIRST_LEVEL_ID, pageRef, false);
+        this.resource = resource;
+        this.anyType = anyType;
+        this.baseModal = baseModal;
+        this.multiLevelPanelRef = multiLevelPanelRef;
+        restClient = new ResourceRestClient();
+        setShowResultPage(false);
+        disableCheckBoxes();
+        initResultTable();
+    }
+
+    @Override
+    protected void resultTableCustomChanges(final AjaxDataTablePanel.Builder<ConnObjectTO, String> resultTableBuilder) {
+        resultTableBuilder.setMultiLevelPanel(baseModal, multiLevelPanelRef);
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public ConnObjectTO getItem() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    protected ConnObjectDataProvider dataProvider() {
+        return new ConnObjectDataProvider(rows);
+    }
+
+    @Override
+    protected String paginatorRowsKey() {
+        return Constants.PREF_CONNOBJECTS_PAGINATOR_ROWS;
+    }
+
+    @Override
+    protected Collection<ActionLink.ActionType> getBulkActions() {
+        return Collections.emptyList();
+    }
+
+    @Override
+    protected List<IColumn<ConnObjectTO, String>> getColumns() {
+        final List<IColumn<ConnObjectTO, String>> columns = new ArrayList<>();
+
+        columns.add(new AttrColumn<>(ConnIdSpecialAttributeName.UID, SchemaType.PLAIN));
+        columns.add(new AttrColumn<>(ConnIdSpecialAttributeName.NAME, SchemaType.PLAIN));
+        columns.add(new AttrColumn<>(ConnIdSpecialAttributeName.ENABLE, SchemaType.PLAIN));
+
+        columns.add(new ActionColumn<ConnObjectTO, String>(new ResourceModel("actions")) {
+
+            private static final long serialVersionUID = 906457126287899096L;
+
+            @Override
+            public ActionLinksPanel<ConnObjectTO> getActions(
+                    final String componentId, final IModel<ConnObjectTO> model) {
+
+                final ConnObjectTO connObjectTO = model.getObject();
+
+                final ActionLinksPanel<ConnObjectTO> panel = ActionLinksPanel.<ConnObjectTO>builder().
+                        add(new ActionLink<ConnObjectTO>() {
+
+                            private static final long serialVersionUID = -3722207913631435501L;
+
+                            @Override
+                            public void onClick(final AjaxRequestTarget target, final ConnObjectTO ignore) {
+                                viewConnObject(connObjectTO, target);
+                            }
+                        }, ActionLink.ActionType.VIEW, StandardEntitlement.RESOURCE_GET_CONNOBJECT).
+                        build(componentId);
+
+                return panel;
+            }
+
+            @Override
+            public ActionLinksPanel<ConnObjectTO> getHeader(final String componentId) {
+                final ActionLinksPanel.Builder<ConnObjectTO> panel = ActionLinksPanel.builder();
+
+                return panel.add(new ActionLink<ConnObjectTO>() {
+
+                    private static final long serialVersionUID = 7511002881490248598L;
+
+                    @Override
+                    public void onClick(final AjaxRequestTarget target, final ConnObjectTO ignore) {
+                        if (target != null) {
+                            target.add(container);
+                        }
+                    }
+                }, ActionLink.ActionType.RELOAD, StandardEntitlement.RESOURCE_LIST_CONNOBJECT).build(componentId);
+            }
+        });
+
+        return columns;
+    }
+
+    protected abstract void viewConnObject(ConnObjectTO connObjectTO, AjaxRequestTarget target);
+
+    protected class ConnObjectDataProvider extends DirectoryDataProvider<ConnObjectTO> {
+
+        private static final long serialVersionUID = -20112718133295756L;
+
+        private final SortableDataProviderComparator<ConnObjectTO> comparator;
+
+        private final List<ConnObjectTO> connObjectTOs;
+
+        public ConnObjectDataProvider(final int paginatorRows) {
+            super(paginatorRows);
+
+            setSort("lastChangeDate", SortOrder.DESCENDING);
+            comparator = new SortableDataProviderComparator<>(this);
+            connObjectTOs = restClient.listConnObjects(resource, anyType, getSort());
+        }
+
+        public SortableDataProviderComparator<ConnObjectTO> getComparator() {
+            return comparator;
+        }
+
+        @Override
+        public IModel<ConnObjectTO> model(final ConnObjectTO object) {
+            return new CompoundPropertyModel<>(object);
+        }
+
+        @Override
+        public long size() {
+            return connObjectTOs.size();
+        }
+
+        @Override
+        public Iterator<? extends ConnObjectTO> iterator(final long first, final long count) {
+            List<ConnObjectTO> sublist = connObjectTOs.subList((int) first, (int) (first + count));
+
+            Collections.sort(sublist, getComparator());
+            return sublist.iterator();
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
new file mode 100644
index 0000000..3317315
--- /dev/null
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjects.java
@@ -0,0 +1,140 @@
+/*
+ * 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.client.console.panels;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
+import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.rest.ResourceRestClient;
+import org.apache.syncope.client.console.wicket.markup.html.bootstrap.dialog.BaseModal;
+import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.syncope.common.lib.to.ProvisionTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
+import org.apache.wicket.PageReference;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.markup.html.panel.Panel;
+import org.apache.wicket.model.Model;
+import org.apache.wicket.model.StringResourceModel;
+
+public class ConnObjects extends Panel implements ModalPanel<Serializable> {
+
+    private static final long serialVersionUID = -1143512993584984838L;
+
+    private final AjaxDropDownChoicePanel<String> anyTypes;
+
+    private final MultilevelPanel connObjects;
+
+    public ConnObjects(final BaseModal<?> baseModal,
+            final String resource,
+            final PageReference pageReference) {
+
+        super(BaseModal.CONTENT_ID);
+
+        anyTypes = new AjaxDropDownChoicePanel<>("anyTypes", "anyTypes", new Model<String>(), true);
+        anyTypes.setChoices(CollectionUtils.collect(new ResourceRestClient().read(resource).getProvisions(),
+                new Transformer<ProvisionTO, String>() {
+
+            @Override
+            public String transform(final ProvisionTO provision) {
+                return provision.getAnyType();
+            }
+        }, new ArrayList<String>()));
+        anyTypes.hideLabel();
+        anyTypes.setNullValid(false);
+        anyTypes.setDefaultModelObject(AnyTypeKind.USER.name());
+        add(anyTypes);
+
+        connObjects = new MultilevelPanel("connObjects") {
+
+            private static final long serialVersionUID = 1473786800290434002L;
+
+            @Override
+            protected void prev(final AjaxRequestTarget target) {
+                anyTypes.setEnabled(true);
+                target.add(anyTypes);
+
+                super.prev(target);
+            }
+
+        };
+        connObjects.setFirstLevel(new NextableConnObjectDirectoryPanel(
+                baseModal, connObjects, resource, anyTypes.getField().getModelObject(), pageReference));
+        connObjects.setOutputMarkupId(true);
+        add(connObjects);
+
+        anyTypes.getField().add(new AjaxFormComponentUpdatingBehavior(Constants.ON_CHANGE) {
+
+            private static final long serialVersionUID = -1107858522700306810L;
+
+            @Override
+            protected void onUpdate(final AjaxRequestTarget target) {
+                connObjects.setFirstLevel(new NextableConnObjectDirectoryPanel(
+                        baseModal, connObjects, resource, anyTypes.getField().getModelObject(), pageReference));
+                target.add(connObjects);
+            }
+        });
+    }
+
+    @Override
+    public void onSubmit(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public void onError(final AjaxRequestTarget target, final Form<?> form) {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    @Override
+    public Serializable getItem() {
+        throw new UnsupportedOperationException("Not supported yet.");
+    }
+
+    private class NextableConnObjectDirectoryPanel extends ConnObjectDirectoryPanel {
+
+        private static final long serialVersionUID = 956427874406567048L;
+
+        NextableConnObjectDirectoryPanel(
+                final BaseModal<?> baseModal,
+                final MultilevelPanel multiLevelPanelRef,
+                final String resource,
+                final String anyType,
+                final PageReference pageRef) {
+
+            super(baseModal, multiLevelPanelRef, resource, anyType, pageRef);
+        }
+
+        @Override
+        protected void viewConnObject(final ConnObjectTO connObjectTO, final AjaxRequestTarget target) {
+            anyTypes.setEnabled(false);
+            target.add(anyTypes);
+
+            connObjects.next(
+                    new StringResourceModel("connObject.view", this, new Model<>(connObjectTO)).getObject(),
+                    new ConnObjectDetails(baseModal, connObjectTO, pageRef),
+                    target);
+        }
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
index 06aec64..19d2689 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/MultilevelPanel.java
@@ -85,7 +85,7 @@ public class MultilevelPanel extends Panel implements IHeaderContributor {
         }
     }
 
-    private void prev(final AjaxRequestTarget target) {
+    protected void prev(final AjaxRequestTarget target) {
         if (isFirstLevel) {
             LOG.warn("No further level available");
         } else {
@@ -109,7 +109,7 @@ public class MultilevelPanel extends Panel implements IHeaderContributor {
      * @return the current MultilevelPanel instance.
      */
     public MultilevelPanel setFirstLevel(final Panel panel) {
-        firstLevelContainer.add(panel);
+        firstLevelContainer.addOrReplace(panel);
         return this;
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index 08493f5..b683d0f 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -58,7 +58,7 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
 
         final AjaxDropDownChoicePanel<String> resource = new AjaxDropDownChoicePanel<>(
                 "resource", getString("resource"), new PropertyModel<String>(schemaTO, "resource"));
-        resource.setChoices(CollectionUtils.collect(resourceRestClient.getAll(),
+        resource.setChoices(CollectionUtils.collect(resourceRestClient.list(),
                 EntityTOUtils.<String, ResourceTO>keyTransformer(),
                 new ArrayList<String>()));
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
index 3d05eee..2ec657c 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AbstractSearchPanel.java
@@ -179,7 +179,7 @@ public abstract class AbstractSearchPanel extends Panel {
 
             @Override
             protected List<String> load() {
-                return CollectionUtils.collect(resourceRestClient.getAll(),
+                return CollectionUtils.collect(resourceRestClient.list(),
                         EntityTOUtils.<String, ResourceTO>keyTransformer(),
                         new ArrayList<String>());
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
index 9342fa3..5665318 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/search/AnyObjectSearchPanel.java
@@ -80,10 +80,7 @@ public class AnyObjectSearchPanel extends AbstractSearchPanel {
 
             @Override
             protected Map<Long, String> load() {
-                List<GroupTO> groupTOs = groupRestClient.list("/",
-                        -1, -1,
-                        new SortParam<>("name", true),
-                        null);
+                List<GroupTO> groupTOs = groupRestClient.list("/", -1, -1, new SortParam<>("name", true), null);
 
                 final Map<Long, String> result = new HashMap<>(groupTOs.size());
                 for (GroupTO group : groupTOs) {
@@ -96,7 +93,7 @@ public class AnyObjectSearchPanel extends AbstractSearchPanel {
     }
 
     protected List<SearchClause.Type> getAvailableTypes() {
-        List<SearchClause.Type> result = new ArrayList<SearchClause.Type>();
+        List<SearchClause.Type> result = new ArrayList<>();
         result.add(SearchClause.Type.ATTRIBUTE);
         result.add(SearchClause.Type.GROUP_MEMBERSHIP);
         result.add(SearchClause.Type.RESOURCE);

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/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 b47f6f1..78c4ff2 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
@@ -28,7 +28,6 @@ import org.apache.syncope.common.lib.patch.StatusPatch;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.BulkActionResult;
-import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.types.ResourceAssociationAction;
 import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
@@ -48,8 +47,6 @@ public abstract class AbstractAnyRestClient<T extends AnyTO> extends BaseRestCli
     public abstract List<T> search(
             String realm, String fiql, int page, int size, final SortParam<String> sort, final String type);
 
-    public abstract ConnObjectTO readConnObject(String resourceName, Long key);
-
     public abstract T read(final Long key);
 
     public abstract ProvisioningResult<T> delete(String etag, Long key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/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 9890841..b132d2d 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
@@ -25,7 +25,6 @@ import org.apache.syncope.common.lib.patch.AnyObjectPatch;
 import org.apache.syncope.common.lib.to.AnyObjectTO;
 import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.BulkActionResult;
-import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.PagedResult;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.rest.api.beans.AnyListQuery;
@@ -82,11 +81,6 @@ public class AnyObjectRestClient extends AbstractAnyRestClient<AnyObjectTO> {
     }
 
     @Override
-    public ConnObjectTO readConnObject(final String resourceName, final Long key) {
-        throw new UnsupportedOperationException("Not supported yet.");
-    }
-
-    @Override
     public AnyObjectTO read(final Long key) {
         return getService(AnyObjectService.class).read(key);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/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 632f6cf..9955073 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
@@ -25,14 +25,11 @@ import javax.ws.rs.core.Response;
 import org.apache.syncope.common.lib.patch.GroupPatch;
 import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.BulkActionResult;
-import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.GroupTO;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
-import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.rest.api.beans.AnyListQuery;
 import org.apache.syncope.common.rest.api.beans.AnySearchQuery;
 import org.apache.syncope.common.rest.api.service.AnyService;
-import org.apache.syncope.common.rest.api.service.ResourceService;
 import org.apache.syncope.common.rest.api.service.GroupService;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
@@ -82,11 +79,6 @@ public class GroupRestClient extends AbstractAnyRestClient<GroupTO> {
                 getResult();
     }
 
-    @Override
-    public ConnObjectTO readConnObject(final String resourceName, final Long id) {
-        return getService(ResourceService.class).readConnObject(resourceName, AnyTypeKind.GROUP.name(), id);
-    }
-
     public ProvisioningResult<GroupTO> create(final GroupTO groupTO) {
         Response response = getService(GroupService.class).create(groupTO);
         return response.readEntity(new GenericType<ProvisioningResult<GroupTO>>() {

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
index b0a70d7..5e97b69 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ResourceRestClient.java
@@ -18,15 +18,19 @@
  */
 package org.apache.syncope.client.console.rest;
 
+import java.util.ArrayList;
 import java.util.List;
 import javax.ws.rs.core.Response;
-import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.patch.ResourceDeassociationPatch;
 import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.BulkActionResult;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
+import org.apache.syncope.common.lib.to.PagedConnObjectTOResult;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.ResourceDeassociationAction;
+import org.apache.syncope.common.rest.api.beans.ConnObjectTOListQuery;
 import org.apache.syncope.common.rest.api.service.ResourceService;
+import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
 /**
  * Console client for invoking Rest Resources services.
@@ -35,16 +39,42 @@ public class ResourceRestClient extends BaseRestClient {
 
     private static final long serialVersionUID = -6898907679835668987L;
 
-    public List<ResourceTO> getAll() {
-        List<ResourceTO> resources = null;
+    public ConnObjectTO readConnObject(final String resource, final String anyTypeKey, final Long anyKey) {
+        return getService(ResourceService.class).readConnObject(resource, anyTypeKey, anyKey);
+    }
+
+    public List<ConnObjectTO> listConnObjects(
+            final String resource,
+            final String anyTypeKey,
+            final SortParam<String> sort) {
+
+        ConnObjectTOListQuery.Builder builder = new ConnObjectTOListQuery.Builder().size(100).orderBy(toOrderBy(sort));
+
+        List<ConnObjectTO> result = new ArrayList<>();
+        PagedConnObjectTOResult list;
+        do {
+            list = getService(ResourceService.class).listConnObjects(resource, anyTypeKey, builder.build());
+            result.addAll(list.getResult());
 
-        try {
-            resources = getService(ResourceService.class).list();
-        } catch (SyncopeClientException e) {
-            LOG.error("While reading all resources", e);
-        }
+            // TMP - see SYNCOPE-829
+            if (result.size() >= 100) {
+                break;
+            }
 
-        return resources;
+            if (list.getPagedResultsCookie() != null) {
+                builder.pagedResultsCookie(list.getPagedResultsCookie());
+            }
+        } while (list.getPagedResultsCookie() != null);
+
+        return result;
+    }
+
+    public ResourceTO read(final String name) {
+        return getService(ResourceService.class).read(name);
+    }
+
+    public List<ResourceTO> list() {
+        return getService(ResourceService.class).list();
     }
 
     public ResourceTO create(final ResourceTO resourceTO) {
@@ -53,17 +83,6 @@ public class ResourceRestClient extends BaseRestClient {
         return getObject(service, response.getLocation(), ResourceTO.class);
     }
 
-    public ResourceTO read(final String name) {
-        ResourceTO resourceTO = null;
-
-        try {
-            resourceTO = getService(ResourceService.class).read(name);
-        } catch (SyncopeClientException e) {
-            LOG.error("While reading a resource", e);
-        }
-        return resourceTO;
-    }
-
     public void update(final ResourceTO resourceTO) {
         getService(ResourceService.class).update(resourceTO);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/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 95069a26..d4561fe 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
@@ -28,15 +28,12 @@ import org.apache.syncope.common.lib.patch.StatusPatch;
 import org.apache.syncope.common.lib.patch.UserPatch;
 import org.apache.syncope.common.lib.to.BulkAction;
 import org.apache.syncope.common.lib.to.BulkActionResult;
-import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.ProvisioningResult;
 import org.apache.syncope.common.lib.to.UserTO;
-import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.StatusPatchType;
 import org.apache.syncope.common.rest.api.beans.AnyListQuery;
 import org.apache.syncope.common.rest.api.beans.AnySearchQuery;
 import org.apache.syncope.common.rest.api.service.AnyService;
-import org.apache.syncope.common.rest.api.service.ResourceService;
 import org.apache.syncope.common.rest.api.service.UserService;
 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
 
@@ -60,8 +57,9 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
     }
 
     @Override
-    public List<UserTO> list(final String realm, final int page, final int size, final SortParam<String> sort,
-            final String type) {
+    public List<UserTO> list(
+            final String realm, final int page, final int size, final SortParam<String> sort, final String type) {
+
         return getService(UserService.class).
                 list(new AnyListQuery.Builder().realm(realm).page(page).size(size).
                         orderBy(toOrderBy(sort)).details(false).build()).getResult();
@@ -111,11 +109,6 @@ public class UserRestClient extends AbstractAnyRestClient<UserTO> {
                         orderBy(toOrderBy(sort)).details(false).build()).getResult();
     }
 
-    @Override
-    public ConnObjectTO readConnObject(final String resourceName, final Long id) {
-        return getService(ResourceService.class).readConnObject(resourceName, AnyTypeKind.USER.name(), id);
-    }
-
     public ProvisioningResult<UserTO> mustChangePassword(final String etag, final boolean value, final Long key) {
         final UserPatch userPatch = new UserPatch();
         userPatch.setKey(key);

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java
index ec404dc..f61e4ee 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/status/StatusDirectoryPanel.java
@@ -215,7 +215,7 @@ public class StatusDirectoryPanel
 
         AttributableStatusProvider() {
             super(statusOnly ? "resourceName" : "connObjectLink");
-            statusUtils = new StatusUtils(restClient);
+            statusUtils = new StatusUtils();
         }
 
         @SuppressWarnings("unchecked")
@@ -225,7 +225,7 @@ public class StatusDirectoryPanel
             final AnyTO actual = restClient.read(anyTO.getKey());
 
             final List<String> resources = new ArrayList<>();
-            for (ResourceTO resourceTO : new ResourceRestClient().getAll()) {
+            for (ResourceTO resourceTO : new ResourceRestClient().list()) {
                 resources.add(resourceTO.getKey());
             }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
index eff8620..282e847 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTaskDirectoryPanel.java
@@ -101,11 +101,6 @@ public abstract class PropagationTaskDirectoryPanel
             private static final long serialVersionUID = 2054811145491901166L;
 
             @Override
-            public String getCssClass() {
-                return "action";
-            }
-
-            @Override
             public ActionLinksPanel<PropagationTaskTO> getActions(
                     final String componentId, final IModel<PropagationTaskTO> model) {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
index 25e6741..8e2b78b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/PropagationTasks.java
@@ -38,19 +38,19 @@ public class PropagationTasks extends AbstractPropagationTasks {
 
         super(BaseModal.CONTENT_ID);
 
-        final MultilevelPanel mlp = new MultilevelPanel("tasks");
-        mlp.setFirstLevel(new PropagationTaskDirectoryPanel(baseModal, mlp, resource, pageReference) {
+        final MultilevelPanel tasks = new MultilevelPanel("tasks");
+        tasks.setFirstLevel(new PropagationTaskDirectoryPanel(baseModal, tasks, resource, pageReference) {
 
             private static final long serialVersionUID = -2195387360323687302L;
 
             @Override
             protected void viewTask(final PropagationTaskTO taskTO, final AjaxRequestTarget target) {
-                mlp.next(
+                tasks.next(
                         new StringResourceModel("task.view", this, new Model<>(taskTO)).getObject(),
                         new TaskExecutionDetails<>(baseModal, taskTO, pageReference),
                         target);
             }
         });
-        add(mlp);
+        add(tasks);
     }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
index a4843fa..547c27b 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/tasks/TaskDirectoryPanel.java
@@ -79,7 +79,9 @@ public abstract class TaskDirectoryPanel<T extends AbstractTaskTO>
         throw new UnsupportedOperationException("Not supported yet.");
     }
 
-    public abstract class TasksProvider<T extends AbstractTaskTO> extends DirectoryDataProvider<T> {
+    protected abstract void viewTask(final T taskTO, final AjaxRequestTarget target);
+
+    protected abstract class TasksProvider<T extends AbstractTaskTO> extends DirectoryDataProvider<T> {
 
         private static final long serialVersionUID = -20112718133295756L;
 
@@ -88,7 +90,6 @@ public abstract class TaskDirectoryPanel<T extends AbstractTaskTO>
         private final TaskType id;
 
         public TasksProvider(final int paginatorRows, final TaskType id) {
-
             super(paginatorRows);
 
             //Default sorting
@@ -112,5 +113,4 @@ public abstract class TaskDirectoryPanel<T extends AbstractTaskTO>
         }
     }
 
-    protected abstract void viewTask(final T taskTO, final AjaxRequestTarget target);
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
index 2b90e96..8a7e64e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/Topology.java
@@ -88,7 +88,7 @@ public class Topology extends BasePage {
 
         @Override
         protected List<ResourceTO> load() {
-            return resourceRestClient.getAll();
+            return resourceRestClient.list();
         }
     };
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
index 92c384b..bb75836 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/topology/TopologyTogglePanel.java
@@ -24,6 +24,7 @@ import java.text.MessageFormat;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
+import org.apache.syncope.client.console.panels.ConnObjects;
 import org.apache.syncope.client.console.panels.ConnectorModal;
 import org.apache.syncope.client.console.panels.ResourceModal;
 import org.apache.syncope.client.console.panels.TogglePanel;
@@ -50,6 +51,7 @@ 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.apache.wicket.model.StringResourceModel;
 
 public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
@@ -277,9 +279,9 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                final ResourceTO modelObject = resourceRestClient.read(node.getKey().toString());
+                ResourceTO modelObject = resourceRestClient.read(node.getKey().toString());
 
-                final IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject);
+                IModel<ResourceTO> model = new CompoundPropertyModel<>(modelObject);
                 resourceModal.setFormModel(model);
 
                 target.add(resourceModal.setContent(new ResourceModal<>(resourceModal, pageRef, model, false)));
@@ -295,6 +297,20 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
         MetaDataRoleAuthorizationStrategy.authorize(edit, ENABLE, StandardEntitlement.RESOURCE_UPDATE);
         fragment.add(edit);
 
+        AjaxLink<String> explore = new IndicatingAjaxLink<String>("explore") {
+
+            private static final long serialVersionUID = 3776750333491622263L;
+
+            @Override
+            public void onClick(final AjaxRequestTarget target) {
+                target.add(taskModal.setContent(new ConnObjects(taskModal, node.getKey().toString(), pageRef)));
+                taskModal.header(new StringResourceModel("resource.explore.list", Model.of(node)));
+                taskModal.show(true);
+            }
+        };
+        MetaDataRoleAuthorizationStrategy.authorize(explore, ENABLE, StandardEntitlement.RESOURCE_LIST_CONNOBJECT);
+        fragment.add(explore);
+
         AjaxLink<String> propagation = new IndicatingAjaxLink<String>("propagation") {
 
             private static final long serialVersionUID = 3776750333491622263L;
@@ -303,7 +319,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @SuppressWarnings("unchecked")
             public void onClick(final AjaxRequestTarget target) {
                 target.add(taskModal.setContent(new PropagationTasks(taskModal, node.getKey().toString(), pageRef)));
-                taskModal.header(new ResourceModel("task.propagation.list", "Propagation tasks"));
+                taskModal.header(new ResourceModel("task.propagation.list"));
                 taskModal.show(true);
             }
         };
@@ -331,7 +347,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
             @Override
             public void onClick(final AjaxRequestTarget target) {
                 target.add(taskModal.setContent(new PushTasks(taskModal, pageRef, node.getKey().toString())));
-                taskModal.header(new ResourceModel("task.push.list", "Push tasks"));
+                taskModal.header(new ResourceModel("task.push.list"));
                 taskModal.show(true);
             }
         };

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
index fed5d29..9a90ef6 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wicket/extensions/markup/html/repeater/data/table/AttrColumn.java
@@ -27,8 +27,9 @@ import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.ResourceModel;
 import org.apache.syncope.common.lib.to.AnyTO;
+import org.apache.syncope.common.lib.to.ConnObjectTO;
 
-public class AttrColumn<T extends AnyTO> extends AbstractColumn<T, String> {
+public class AttrColumn<T extends ConnObjectTO> extends AbstractColumn<T, String> {
 
     private static final long serialVersionUID = 2624734332447371372L;
 
@@ -57,15 +58,21 @@ public class AttrColumn<T extends AnyTO> extends AbstractColumn<T, String> {
                 }
                 break;
 
-            case VIRTUAL:
-                if (rowModel.getObject().getVirAttrMap().containsKey(name)) {
-                    values = rowModel.getObject().getVirAttrMap().get(name).getValues();
+            case DERIVED:
+                if (rowModel.getObject() instanceof AnyTO) {
+                    AnyTO obj = AnyTO.class.cast(rowModel.getObject());
+                    if (obj.getDerAttrMap().containsKey(name)) {
+                        values = obj.getDerAttrMap().get(name).getValues();
+                    }
                 }
                 break;
 
-            case DERIVED:
-                if (rowModel.getObject().getDerAttrMap().containsKey(name)) {
-                    values = rowModel.getObject().getDerAttrMap().get(name).getValues();
+            case VIRTUAL:
+                if (rowModel.getObject() instanceof AnyTO) {
+                    AnyTO obj = AnyTO.class.cast(rowModel.getObject());
+                    if (obj.getVirAttrMap().containsKey(name)) {
+                        values = obj.getVirAttrMap().get(name).getValues();
+                    }
                 }
                 break;
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
index fc51315..14e3e33 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.java
@@ -142,11 +142,11 @@ public class ConnObjectPanel extends Panel {
         } else if (CollectionUtils.isEmpty(attrTO.getValues())) {
             field = new AjaxTextFieldPanel(id, schemaName, new Model<String>());
         } else if (ConnIdSpecialAttributeName.PASSWORD.equals(schemaName)) {
-            field = new AjaxTextFieldPanel(id, schemaName, new Model<String>("********"));
+            field = new AjaxTextFieldPanel(id, schemaName, new Model<>("********"));
         } else if (attrTO.getValues().size() == 1) {
-            field = new AjaxTextFieldPanel(id, schemaName, new Model<String>(attrTO.getValues().get(0)));
+            field = new AjaxTextFieldPanel(id, schemaName, new Model<>(attrTO.getValues().get(0)));
         } else {
-            field = new MultiFieldPanel.Builder<String>(new ListModel<String>(attrTO.getValues())).build(
+            field = new MultiFieldPanel.Builder<>(new ListModel<>(attrTO.getValues())).build(
                     id,
                     schemaName,
                     new AjaxTextFieldPanel("panel", schemaName, new Model<String>()));

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
index c3412fd..96a1157 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/Resources.java
@@ -52,7 +52,7 @@ public class Resources extends WizardStep {
                 entityTO.getResources().clear();
                 entityTO.getResources().addAll(object);
             }
-        }, new ListModel<>(CollectionUtils.collect(new ResourceRestClient().getAll(),
+        }, new ListModel<>(CollectionUtils.collect(new ResourceRestClient().list(),
                         EntityTOUtils.<String, ResourceTO>keyTransformer(),
                         new ArrayList<String>()))).hideLabel().setOutputMarkupId(true));
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
index 14d1d24..c529728 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/wizards/any/StatusPanel.java
@@ -32,8 +32,6 @@ import org.apache.syncope.client.console.commons.status.StatusUtils;
 import org.apache.syncope.client.console.panels.ListViewPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel;
 import org.apache.syncope.client.console.panels.MultilevelPanel.SecondLevel;
-import org.apache.syncope.client.console.rest.GroupRestClient;
-import org.apache.syncope.client.console.rest.UserRestClient;
 import org.apache.syncope.client.console.wicket.markup.html.form.ActionLink;
 import org.apache.syncope.common.lib.to.AnyTO;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
@@ -54,10 +52,6 @@ public class StatusPanel extends Panel {
 
     private static final Logger LOG = LoggerFactory.getLogger(StatusPanel.class);
 
-    private final UserRestClient userRestClient = new UserRestClient();
-
-    private final GroupRestClient groupRestClient = new GroupRestClient();
-
     private Map<String, StatusBean> initialStatusBeanMap;
 
     private final StatusUtils statusUtils;
@@ -70,7 +64,7 @@ public class StatusPanel extends Panel {
             final IModel<List<StatusBean>> model,
             final PageReference pageRef) {
         super(id);
-        statusUtils = new StatusUtils(any instanceof GroupTO ? groupRestClient : userRestClient);
+        statusUtils = new StatusUtils();
         init(any, model,
                 CollectionUtils.collect(statusUtils.getConnectorObjects(any),
                         new SerializableTransformer<ConnObjectWrapper, Pair<ConnObjectTO, ConnObjectWrapper>>() {
@@ -92,7 +86,7 @@ public class StatusPanel extends Panel {
             final List<Pair<ConnObjectTO, ConnObjectWrapper>> connObjects,
             final PageReference pageRef) {
         super(id);
-        statusUtils = new StatusUtils(any instanceof GroupTO ? groupRestClient : userRestClient);
+        statusUtils = new StatusUtils();
         init(any, model, connObjects, pageRef);
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjectDetails.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjectDetails.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjectDetails.html
new file mode 100644
index 0000000..627cc8b
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjectDetails.html
@@ -0,0 +1,23 @@
+<!--
+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>
+    <span wicket:id="details"></span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.html b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.html
new file mode 100644
index 0000000..7935999
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.html
@@ -0,0 +1,24 @@
+<!--
+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 class="panel-group box-group" wicket:id="anyTypes"></div>
+    <span wicket:id="connObjects"></span>
+  </wicket:panel>
+</html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.properties
new file mode 100644
index 0000000..e21c540
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects.properties
@@ -0,0 +1,17 @@
+# 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.
+connObject.view=Back to list

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_it.properties
new file mode 100644
index 0000000..7a3259d
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_it.properties
@@ -0,0 +1,17 @@
+# 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.
+connObject.view=Torna alla lista

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_pt_BR.properties
new file mode 100644
index 0000000..28ceac3
--- /dev/null
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/panels/ConnObjects_pt_BR.properties
@@ -0,0 +1,17 @@
+# 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.
+connObject.view=Volte para a lista

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html
index ac755e8..f74731a 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/AbstractTasks.html
@@ -17,7 +17,6 @@ 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></head>
   <wicket:panel>
     <span wicket:id="tasks">[TASKS]</span>
   </wicket:panel>

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.html b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.html
index 6e191e6..54ff764 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/tasks/TaskExecutionDetails.html
@@ -17,11 +17,8 @@ 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></head>
-  <body>
-    <wicket:panel>
-      <div wicket:id="executions"></div>
-      <wicket:child />
-    </wicket:panel>
-  </body>
+  <wicket:panel>
+    <div wicket:id="executions"></div>
+    <wicket:child/>
+  </wicket:panel>
 </html>

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
index bba937b..26b96c7 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.html
@@ -36,6 +36,7 @@ under the License.
         <ul class="menu">
           <li><i class="fa fa-minus"></i><a href="#" wicket:id="delete"><wicket:message key="resource.menu.remove"/></a></li>
           <li><i class="fa fa-pencil"></i><a href="#" wicket:id="edit"><wicket:message key="resource.menu.edit"/></a></li>
+          <li><i class="fa fa-search"></i><a href="#" wicket:id="explore"><wicket:message key="resource.menu.explore"/></a></li>
           <li><i class="fa fa-arrow-right"></i><a href="#" wicket:id="propagation"><wicket:message key="task.propagation.list"/></a></li>
           <li><i class="fa fa-chevron-circle-left"></i><a href="#" wicket:id="pull"><wicket:message key="task.pull.list"/></a></li>
           <li><i class="fa fa-chevron-circle-right"></i><a href="#" wicket:id="push"><wicket:message key="task.push.list"/></a></li>

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
index a76ec45..d36837e 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel.properties
@@ -25,8 +25,10 @@ resource.edit=Edit resource {0}
 resource.menu.add=Add new resource
 resource.menu.remove=Remove resource
 resource.menu.edit=Edit resource
+resource.menu.explore=Explore resource
 
 task.custom.list=Custom tasks
 task.propagation.list=Propagation tasks
 task.pull.list=Pull tasks
 task.push.list=Push tasks
+resource.explore.list=Explore ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
index 279e80d..f89a848 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_it.properties
@@ -30,3 +30,5 @@ task.custom.list=Task personalizzati
 task.propagation.list=Task di propagazione
 task.pull.list=Pull task
 task.push.list=Push task
+resource.menu.explore=Esplora risorsa
+resource.explore.list=Esplora ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
index 5a1aa78..f44b440 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/topology/TopologyTogglePanel_pt_BR.properties
@@ -30,3 +30,5 @@ task.custom.list=Custom tasks
 task.propagation.list=Propagation tasks
 task.pull.list=Pull tasks
 task.push.list=Push tasks
+resource.menu.explore=Explorar recurso
+resource.explore.list=Explorar ${key}

http://git-wip-us.apache.org/repos/asf/syncope/blob/91befa20/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
----------------------------------------------------------------------
diff --git a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
index 63f511b..4eee0d9 100644
--- a/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
+++ b/client/console/src/main/resources/org/apache/syncope/client/console/wizards/any/ConnObjectPanel.html
@@ -17,7 +17,6 @@ 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></head>
   <wicket:panel>
     <div class="form-group" wicket:id="propView">
       <span wicket:id="value">[ATTIRIBUTE]</span>


Mime
View raw message