You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2017/06/27 12:20:28 UTC

[2/2] syncope git commit: [SYNCOPE-1126] Explore resource for realms too

[SYNCOPE-1126] Explore resource for realms too


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

Branch: refs/heads/master
Commit: 636985db65a8c1b6dd7af781966a7f84d3a83c2a
Parents: ee802ac
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Jun 27 14:20:07 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Jun 27 14:20:17 2017 +0200

----------------------------------------------------------------------
 .../console/panels/ConnObjectListViewPanel.java |  7 ++-
 .../client/console/panels/ConnObjects.java      | 37 +++++++--------
 .../console/topology/TopologyTogglePanel.java   |  2 +-
 .../syncope/common/lib/SyncopeConstants.java    |  2 +
 .../syncope/core/logic/ResourceLogic.java       | 47 ++++++++++++++------
 .../jpa/validation/entity/AnyTypeValidator.java |  4 +-
 .../core/provisioning/api/Connector.java        |  6 +--
 .../provisioning/java/ConnectorFacadeProxy.java |  7 +--
 fit/core-reference/pom.xml                      |  3 ++
 9 files changed, 66 insertions(+), 49 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
index 60daaf7..1399c3e 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/ConnObjectListViewPanel.java
@@ -113,8 +113,7 @@ public abstract class ConnObjectListViewPanel extends Panel {
             public void onClick(final AjaxRequestTarget target) {
                 final List<ConnObjectTO> listOfItems = reloadItems(resource, anyType, nextPageCookie);
                 target.add(arrows);
-                send(ConnObjectListViewPanel.this, Broadcast.DEPTH,
-                        new ListViewReload<ConnObjectTO>(listOfItems, target));
+                send(ConnObjectListViewPanel.this, Broadcast.DEPTH, new ListViewReload<>(listOfItems, target));
             }
 
             @Override
@@ -131,11 +130,11 @@ public abstract class ConnObjectListViewPanel extends Panel {
             final String anyType,
             final String cookie) {
 
-        final Pair<String, List<ConnObjectTO>> items = new ResourceRestClient().listConnObjects(resource,
+        Pair<String, List<ConnObjectTO>> items = new ResourceRestClient().listConnObjects(resource,
                 anyType,
                 SIZE,
                 cookie,
-                new SortParam<String>(ConnIdSpecialName.UID, true));
+                new SortParam<>(ConnIdSpecialName.UID, true));
 
         nextPageCookie = items.getLeft();
         return items.getRight();

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/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
index 17d5036..14a2b9c 100644
--- 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
@@ -26,8 +26,10 @@ 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.SyncopeConstants;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.ProvisionTO;
+import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
@@ -44,21 +46,21 @@ public class ConnObjects extends Panel implements ModalPanel {
 
     private final MultilevelPanel connObjects;
 
-    public ConnObjects(final BaseModal<?> baseModal,
-            final String resource,
-            final PageReference pageReference) {
-
+    public ConnObjects(final String resource, final PageReference pageRef) {
         super(BaseModal.CONTENT_ID);
 
-        List<String> availableAnyTypes = CollectionUtils.
-                collect(new ResourceRestClient().read(resource).getProvisions(),
-                        new Transformer<ProvisionTO, String>() {
+        ResourceTO resourceTO = new ResourceRestClient().read(resource);
+        List<String> availableAnyTypes = CollectionUtils.collect(resourceTO.getProvisions(),
+                new Transformer<ProvisionTO, String>() {
 
-                    @Override
-                    public String transform(final ProvisionTO provision) {
-                        return provision.getAnyType();
-                    }
-                }, new ArrayList<String>());
+            @Override
+            public String transform(final ProvisionTO provision) {
+                return provision.getAnyType();
+            }
+        }, new ArrayList<String>());
+        if (resourceTO.getOrgUnit() != null) {
+            availableAnyTypes.add(SyncopeConstants.REALM_ANYTYPE);
+        }
 
         anyTypes = new AjaxDropDownChoicePanel<>("anyTypes", "anyTypes", new Model<String>());
         anyTypes.setChoices(availableAnyTypes);
@@ -87,7 +89,7 @@ public class ConnObjects extends Panel implements ModalPanel {
 
         };
         connObjects.setFirstLevel(new NextableConnObjectDirectoryPanel(
-                baseModal, connObjects, resource, anyTypes.getField().getModelObject(), pageReference));
+                connObjects, resource, anyTypes.getField().getModelObject(), pageRef));
         connObjects.setOutputMarkupId(true);
         add(connObjects);
 
@@ -98,7 +100,7 @@ public class ConnObjects extends Panel implements ModalPanel {
             @Override
             protected void onUpdate(final AjaxRequestTarget target) {
                 connObjects.setFirstLevel(new NextableConnObjectDirectoryPanel(
-                        baseModal, connObjects, resource, anyTypes.getField().getModelObject(), pageReference));
+                        connObjects, resource, anyTypes.getField().getModelObject(), pageRef));
                 target.add(connObjects);
             }
         });
@@ -108,20 +110,13 @@ public class ConnObjects extends Panel implements ModalPanel {
 
         private static final long serialVersionUID = 956427874406567048L;
 
-        private final BaseModal<?> baseModal;
-
-        private final PageReference pageRef;
-
         NextableConnObjectDirectoryPanel(
-                final BaseModal<?> baseModal,
                 final MultilevelPanel multiLevelPanelRef,
                 final String resource,
                 final String anyType,
                 final PageReference pageRef) {
 
             super(MultilevelPanel.FIRST_LEVEL_ID, resource, anyType, pageRef);
-            this.baseModal = baseModal;
-            this.pageRef = pageRef;
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/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 0851437..cf75204 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
@@ -443,7 +443,7 @@ public class TopologyTogglePanel extends TogglePanel<Serializable> {
 
             @Override
             public void onClick(final AjaxRequestTarget target) {
-                target.add(propTaskModal.setContent(new ConnObjects(propTaskModal, node.getKey(), pageRef)));
+                target.add(propTaskModal.setContent(new ConnObjects(node.getKey(), pageRef)));
                 propTaskModal.header(new StringResourceModel("resource.explore.list", Model.of(node)));
                 propTaskModal.show(true);
             }

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
index 9b804bc..9ce9b06 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeConstants.java
@@ -32,6 +32,8 @@ public final class SyncopeConstants {
 
     public static final String ROOT_REALM = "/";
 
+    public static final String REALM_ANYTYPE = "REALM";
+
     public static final Set<String> FULL_ADMIN_REALMS = Collections.singleton("/");
 
     public static final String UNAUTHENTICATED = "unauthenticated";

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index 4520775..b07a92b 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -34,6 +34,7 @@ import org.apache.commons.lang3.tuple.ImmutableTriple;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.lang3.tuple.Triple;
 import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.ConnObjectTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
@@ -66,6 +67,8 @@ import org.identityconnectors.framework.common.objects.Attribute;
 import org.identityconnectors.framework.common.objects.AttributeUtil;
 import org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.identityconnectors.framework.common.objects.Name;
+import org.identityconnectors.framework.common.objects.ObjectClass;
+import org.identityconnectors.framework.common.objects.OperationOptions;
 import org.identityconnectors.framework.common.objects.SearchResult;
 import org.identityconnectors.framework.common.objects.Uid;
 import org.identityconnectors.framework.spi.SearchResultsHandler;
@@ -269,8 +272,8 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
         Any<?> any = init.getMiddle().getKind() == AnyTypeKind.USER
                 ? userDAO.find(anyKey)
                 : init.getMiddle().getKind() == AnyTypeKind.ANY_OBJECT
-                        ? anyObjectDAO.find(anyKey)
-                        : groupDAO.find(anyKey);
+                ? anyObjectDAO.find(anyKey)
+                : groupDAO.find(anyKey);
         if (any == null) {
             throw new NotFoundException(init.getMiddle() + " " + anyKey);
         }
@@ -320,22 +323,40 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
     public Pair<SearchResult, List<ConnObjectTO>> listConnObjects(final String key, final String anyTypeKey,
             final int size, final String pagedResultsCookie, final List<OrderByClause> orderBy) {
 
-        Triple<ExternalResource, AnyType, Provision> init = connObjectInit(key, anyTypeKey);
-
-        Connector connector = connFactory.getConnector(init.getLeft());
+        ExternalResource resource;
+        ObjectClass objectClass;
+        OperationOptions options;
+        if (SyncopeConstants.REALM_ANYTYPE.equals(anyTypeKey)) {
+            resource = resourceDAO.find(key);
+            if (resource == null) {
+                throw new NotFoundException("Resource '" + key + "'");
+            }
+            if (resource.getOrgUnit() == null) {
+                throw new NotFoundException("Realm provisioning for resource '" + key + "'");
+            }
 
-        Set<MappingItem> linkinMappingItems = new HashSet<>();
-        for (VirSchema virSchema : virSchemaDAO.findByProvision(init.getRight())) {
-            linkinMappingItems.add(virSchema.asLinkingMappingItem());
+            objectClass = resource.getOrgUnit().getObjectClass();
+            options = MappingUtils.buildOperationOptions(resource.getOrgUnit());
+        } else {
+            Triple<ExternalResource, AnyType, Provision> init = connObjectInit(key, anyTypeKey);
+            resource = init.getLeft();
+            objectClass = init.getRight().getObjectClass();
+            init.getRight().getMapping().getItems();
+
+            Set<MappingItem> linkinMappingItems = new HashSet<>();
+            for (VirSchema virSchema : virSchemaDAO.findByProvision(init.getRight())) {
+                linkinMappingItems.add(virSchema.asLinkingMappingItem());
+            }
+            Iterator<MappingItem> mapItems = IteratorUtils.chainedIterator(
+                    init.getRight().getMapping().getItems().iterator(),
+                    linkinMappingItems.iterator());
+            options = MappingUtils.buildOperationOptions(mapItems);
         }
-        Iterator<MappingItem> mapItems = IteratorUtils.chainedIterator(
-                init.getRight().getMapping().getItems().iterator(),
-                linkinMappingItems.iterator());
 
         final SearchResult[] searchResult = new SearchResult[1];
         final List<ConnObjectTO> connObjects = new ArrayList<>();
 
-        connector.search(init.getRight().getObjectClass(), null, new SearchResultsHandler() {
+        connFactory.getConnector(resource).search(objectClass, null, new SearchResultsHandler() {
 
             private int count;
 
@@ -351,7 +372,7 @@ public class ResourceLogic extends AbstractTransactionalLogic<ResourceTO> {
                 count++;
                 return count < size;
             }
-        }, size, pagedResultsCookie, orderBy, mapItems);
+        }, size, pagedResultsCookie, orderBy, options);
 
         return ImmutablePair.of(searchResult[0], connObjects);
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyTypeValidator.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyTypeValidator.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyTypeValidator.java
index 5619295..639061a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyTypeValidator.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/validation/entity/AnyTypeValidator.java
@@ -19,6 +19,7 @@
 package org.apache.syncope.core.persistence.jpa.validation.entity;
 
 import javax.validation.ConstraintValidatorContext;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.EntityViolationType;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
@@ -42,7 +43,8 @@ public class AnyTypeValidator extends AbstractValidator<AnyTypeCheck, AnyType> {
             case ANY_OBJECT:
             default:
                 isValid = !AnyTypeKind.USER.name().equalsIgnoreCase(object.getKey())
-                        && !AnyTypeKind.GROUP.name().equalsIgnoreCase(object.getKey());
+                        && !AnyTypeKind.GROUP.name().equalsIgnoreCase(object.getKey())
+                        && !SyncopeConstants.REALM_ANYTYPE.equalsIgnoreCase(object.getKey());
         }
 
         if (!isValid) {

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
index c54cf71..694ab30 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/Connector.java
@@ -18,12 +18,10 @@
  */
 package org.apache.syncope.core.provisioning.api;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
 import org.apache.syncope.core.persistence.api.entity.ConnInstance;
-import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
 import org.identityconnectors.framework.common.objects.Attribute;
 import org.identityconnectors.framework.common.objects.ConnectorObject;
 import org.identityconnectors.framework.common.objects.ObjectClass;
@@ -173,7 +171,7 @@ public interface Connector {
      * query results
      * @param orderBy the sort keys which should be used for ordering the {@link ConnectorObject} returned by
      * search request
-     * @param mapItems mapping items
+     * @param options ConnId's OperationOptions
      */
     void search(
             ObjectClass objectClass,
@@ -182,7 +180,7 @@ public interface Connector {
             int pageSize,
             String pagedResultsCookie,
             List<OrderByClause> orderBy,
-            Iterator<? extends MappingItem> mapItems);
+            OperationOptions options);
 
     /**
      * Builds metadata description of ConnId {@link ObjectClass}.

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
index c763447..8184c5d 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorFacadeProxy.java
@@ -21,7 +21,6 @@ package org.apache.syncope.core.provisioning.java;
 import java.io.File;
 import java.net.URI;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.Future;
@@ -36,9 +35,7 @@ import org.apache.syncope.core.provisioning.api.utils.ConnPoolConfUtils;
 import org.apache.syncope.core.provisioning.api.Connector;
 import org.apache.syncope.core.provisioning.api.TimeoutException;
 import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
-import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
 import org.apache.syncope.core.provisioning.api.pushpull.ReconciliationFilterBuilder;
-import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
 import org.apache.syncope.core.spring.ApplicationContextProvider;
 import org.identityconnectors.common.security.GuardedByteArray;
 import org.identityconnectors.common.security.GuardedString;
@@ -469,7 +466,7 @@ public class ConnectorFacadeProxy implements Connector {
             final int pageSize,
             final String pagedResultsCookie,
             final List<OrderByClause> orderBy,
-            final Iterator<? extends MappingItem> mapItems) {
+            final OperationOptions options) {
 
         OperationOptionsBuilder builder = new OperationOptionsBuilder().setPageSize(pageSize);
         if (pagedResultsCookie != null) {
@@ -483,7 +480,7 @@ public class ConnectorFacadeProxy implements Connector {
             }
         }, new ArrayList<SortKey>(orderBy.size())));
 
-        builder.setAttributesToGet(MappingUtils.buildOperationOptions(mapItems).getAttributesToGet());
+        builder.setAttributesToGet(options.getAttributesToGet());
 
         search(objectClass, filter, handler, builder.build());
     }

http://git-wip-us.apache.org/repos/asf/syncope/blob/636985db/fit/core-reference/pom.xml
----------------------------------------------------------------------
diff --git a/fit/core-reference/pom.xml b/fit/core-reference/pom.xml
index de67c2d..c5ae9e3 100644
--- a/fit/core-reference/pom.xml
+++ b/fit/core-reference/pom.xml
@@ -401,6 +401,9 @@ under the License.
               <includes>
                 <include>**/*ITCase.java</include>
               </includes>
+              <excludes>
+                <exclude>**/*Test.java</exclude>
+              </excludes>
             </configuration>
             <executions>
               <execution>