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 2019/10/23 14:49:20 UTC

[syncope] branch 2_1_X updated: [SYNCOPE-1501] Returning full Connector schema details, not just names

This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/2_1_X by this push:
     new b28f6a0  [SYNCOPE-1501] Returning full Connector schema details, not just names
b28f6a0 is described below

commit b28f6a07b319124722084bd2b0cbd743baf0487a
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Wed Oct 23 16:45:59 2019 +0200

    [SYNCOPE-1501] Returning full Connector schema details, not just names
---
 .../client/console/panels/VirSchemaDetails.java    | 21 +++++----------
 .../client/console/rest/ConnectorRestClient.java   |  6 ++++-
 .../syncope/common/lib/to/ConnIdObjectClassTO.java |  5 ++--
 .../apache/syncope/core/logic/ConnectorLogic.java  | 30 ++++++++++++++++++++--
 .../java/pushpull/AbstractRealmResultHandler.java  |  2 --
 .../pushpull/DefaultRealmPullResultHandler.java    | 21 +++++++--------
 .../pushpull/DefaultRealmPushResultHandler.java    | 11 ++++----
 7 files changed, 58 insertions(+), 38 deletions(-)

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 5b27c83..8068d64 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
@@ -19,11 +19,9 @@
 package org.apache.syncope.client.console.panels;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.stream.Collectors;
 import org.apache.syncope.client.console.SyncopeConsoleSession;
 import org.apache.syncope.client.console.commons.Constants;
@@ -33,8 +31,7 @@ import org.apache.syncope.client.console.wicket.ajax.form.IndicatorAjaxFormCompo
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
-import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
-import org.apache.syncope.common.lib.to.ConnInstanceTO;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.EntityTO;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.to.VirSchemaTO;
@@ -159,16 +156,10 @@ public class VirSchemaDetails extends AbstractSchemaDetailsPanel {
     }
 
     private List<String> getExtAttrNames() {
-        ConnInstanceTO connInstanceTO = new ConnInstanceTO();
-        connInstanceTO.setKey(selectedResource.getConnector());
-        connInstanceTO.getConf().addAll(selectedResource.getConfOverride());
-
-        Optional<ConnIdObjectClassTO> connIdObjectClass = connRestClient.buildObjectClassInfo(connInstanceTO, false).
-                stream().filter(object -> object.getType().equals(anyTypes.get(anyType.getModelObject()))).
-                findAny();
-
-        return connIdObjectClass.isPresent()
-                ? connIdObjectClass.get().getAttributes()
-                : Collections.<String>emptyList();
+        return connectorRestClient.getExtAttrNames(
+                SyncopeConstants.ROOT_REALM,
+                anyTypes.get(anyType.getModelObject()),
+                selectedResource.getConnector(),
+                selectedResource.getConfOverride());
     }
 }
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index d8b3fdf..72eb977 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -31,6 +31,7 @@ import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ConnBundleTO;
 import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
+import org.apache.syncope.common.lib.to.PlainSchemaTO;
 import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.rest.api.service.ConnectorService;
 import org.springframework.beans.BeanUtils;
@@ -92,7 +93,10 @@ public class ConnectorRestClient extends BaseRestClient {
                 filter(object -> object.getType().equalsIgnoreCase(objectClass)).
                 findAny();
 
-        return connIdObjectClass.isPresent() ? connIdObjectClass.get().getAttributes() : new ArrayList<>();
+        return connIdObjectClass.isPresent()
+                ? connIdObjectClass.get().getAttributes().stream().
+                        map(PlainSchemaTO::getKey).collect(Collectors.toList())
+                : Collections.emptyList();
     }
 
     /**
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
index 5b9c0ee..feba9d0 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
@@ -42,7 +42,7 @@ public class ConnIdObjectClassTO implements Serializable {
 
     private boolean auxiliary;
 
-    private final List<String> attributes = new ArrayList<>();
+    private final List<PlainSchemaTO> attributes = new ArrayList<>();
 
     public String getType() {
         return type;
@@ -71,8 +71,7 @@ public class ConnIdObjectClassTO implements Serializable {
     @XmlElementWrapper(name = "attributes")
     @XmlElement(name = "attribute")
     @JsonProperty("attributes")
-    public List<String> getAttributes() {
+    public List<PlainSchemaTO> getAttributes() {
         return attributes;
     }
-
 }
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index c5bbdf8..ad35758 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -25,11 +25,14 @@ import java.util.Locale;
 import java.util.Set;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.ConnBundleTO;
 import org.apache.syncope.common.lib.to.ConnIdObjectClassTO;
 import org.apache.syncope.common.lib.to.ConnInstanceTO;
+import org.apache.syncope.common.lib.to.PlainSchemaTO;
+import org.apache.syncope.common.lib.types.AttrSchemaType;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
@@ -46,7 +49,6 @@ import org.apache.syncope.core.spring.security.DelegatedAdministrationException;
 import org.identityconnectors.common.l10n.CurrentLocale;
 import org.identityconnectors.framework.api.ConfigurationProperties;
 import org.identityconnectors.framework.api.ConnectorKey;
-import org.identityconnectors.framework.common.objects.AttributeInfo;
 import org.identityconnectors.framework.common.objects.AttributeUtil;
 import org.identityconnectors.framework.common.objects.ObjectClassInfo;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -224,7 +226,31 @@ public class ConnectorLogic extends AbstractTransactionalLogic<ConnInstanceTO> {
 
             connIdObjectClassTO.getAttributes().addAll(info.getAttributeInfo().stream().
                     filter(attrInfo -> includeSpecial || !AttributeUtil.isSpecialName(attrInfo.getName())).
-                    map(AttributeInfo::getName).
+                    map(attrInfo -> {
+                        PlainSchemaTO schema = new PlainSchemaTO();
+                        schema.setKey(attrInfo.getName());
+                        schema.setMandatoryCondition(BooleanUtils.toStringTrueFalse(attrInfo.isRequired()));
+                        schema.setMultivalue(attrInfo.isMultiValued());
+                        schema.setReadonly(!attrInfo.isUpdateable());
+
+                        if (attrInfo.getType().equals(int.class) || attrInfo.getType().equals(Integer.class)
+                                || attrInfo.getType().equals(long.class) || attrInfo.getType().equals(Long.class)) {
+
+                            schema.setType(AttrSchemaType.Long);
+                        } else if (attrInfo.getType().equals(float.class) || attrInfo.getType().equals(Float.class)
+                                || attrInfo.getType().equals(double.class) || attrInfo.getType().equals(Double.class)) {
+
+                            schema.setType(AttrSchemaType.Double);
+                        } else if (attrInfo.getType().equals(boolean.class)
+                                || attrInfo.getType().equals(Boolean.class)) {
+
+                            schema.setType(AttrSchemaType.Boolean);
+                        } else {
+                            schema.setType(AttrSchemaType.String);
+                        }
+
+                        return schema;
+                    }).
                     collect(Collectors.toList()));
 
             return connIdObjectClassTO;
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractRealmResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractRealmResultHandler.java
index e914ce3..d650e46 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractRealmResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractRealmResultHandler.java
@@ -37,8 +37,6 @@ public abstract class AbstractRealmResultHandler<T extends ProvisioningTask, A e
 
     protected static final Logger LOG = LoggerFactory.getLogger(SyncopeResultHandler.class);
 
-    protected static final String REALM_TYPE = "REALM";
-
     @Autowired
     protected RealmDAO realmDAO;
 
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
index 003ed0b..9fac105 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
@@ -25,6 +25,7 @@ import java.util.Set;
 import java.util.function.Function;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.syncope.common.lib.SyncopeClientException;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.lib.types.AnyTypeKind;
 import org.apache.syncope.common.lib.types.AuditElements;
@@ -112,7 +113,7 @@ public class DefaultRealmPullResultHandler
             ProvisioningReport ignoreResult = new ProvisioningReport();
             ignoreResult.setOperation(ResourceOperation.NONE);
             ignoreResult.setStatus(ProvisioningReport.Status.IGNORE);
-            ignoreResult.setAnyType(REALM_TYPE);
+            ignoreResult.setAnyType(SyncopeConstants.REALM_ANYTYPE);
             ignoreResult.setKey(null);
             ignoreResult.setName(delta.getObject().getName().getNameValue());
             profile.getResults().add(ignoreResult);
@@ -149,7 +150,7 @@ public class DefaultRealmPullResultHandler
 
         ProvisioningReport result = new ProvisioningReport();
         result.setOperation(ResourceOperation.CREATE);
-        result.setAnyType(REALM_TYPE);
+        result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
         result.setStatus(ProvisioningReport.Status.SUCCESS);
         result.setName(realmTO.getFullPath());
 
@@ -187,7 +188,7 @@ public class DefaultRealmPullResultHandler
 
         ProvisioningReport result = new ProvisioningReport();
         result.setOperation(ResourceOperation.CREATE);
-        result.setAnyType(REALM_TYPE);
+        result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
         result.setStatus(ProvisioningReport.Status.SUCCESS);
         result.setName(realmTO.getFullPath());
 
@@ -293,7 +294,7 @@ public class DefaultRealmPullResultHandler
 
             ProvisioningReport result = new ProvisioningReport();
             result.setOperation(ResourceOperation.UPDATE);
-            result.setAnyType(REALM_TYPE);
+            result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
             result.setStatus(ProvisioningReport.Status.SUCCESS);
             result.setKey(realm.getKey());
             result.setName(realm.getFullPath());
@@ -371,7 +372,7 @@ public class DefaultRealmPullResultHandler
 
             ProvisioningReport result = new ProvisioningReport();
             result.setOperation(ResourceOperation.DELETE);
-            result.setAnyType(REALM_TYPE);
+            result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
             result.setStatus(ProvisioningReport.Status.SUCCESS);
             result.setKey(realm.getKey());
             result.setName(realm.getFullPath());
@@ -459,7 +460,7 @@ public class DefaultRealmPullResultHandler
 
             ProvisioningReport result = new ProvisioningReport();
             result.setOperation(ResourceOperation.NONE);
-            result.setAnyType(REALM_TYPE);
+            result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
             result.setStatus(ProvisioningReport.Status.SUCCESS);
             result.setKey(realm.getKey());
             result.setName(realm.getFullPath());
@@ -540,7 +541,7 @@ public class DefaultRealmPullResultHandler
                 result.setKey(realm.getKey());
                 result.setName(realm.getFullPath());
                 result.setOperation(ResourceOperation.DELETE);
-                result.setAnyType(REALM_TYPE);
+                result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
                 result.setStatus(ProvisioningReport.Status.SUCCESS);
 
                 if (!profile.isDryRun()) {
@@ -614,7 +615,7 @@ public class DefaultRealmPullResultHandler
         result.setKey(null);
         result.setName(delta.getObject().getUid().getUidValue());
         result.setOperation(ResourceOperation.NONE);
-        result.setAnyType(REALM_TYPE);
+        result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
         result.setStatus(ProvisioningReport.Status.SUCCESS);
 
         if (!profile.isDryRun()) {
@@ -737,7 +738,7 @@ public class DefaultRealmPullResultHandler
         notificationManager.createTasks(
                 AuthContextUtils.getUsername(),
                 AuditElements.EventCategoryType.PULL,
-                REALM_TYPE.toLowerCase(),
+                SyncopeConstants.REALM_ANYTYPE.toLowerCase(),
                 profile.getTask().getResource().getKey(),
                 event,
                 result,
@@ -748,7 +749,7 @@ public class DefaultRealmPullResultHandler
         auditManager.audit(
                 AuthContextUtils.getUsername(),
                 AuditElements.EventCategoryType.PULL,
-                REALM_TYPE.toLowerCase(),
+                SyncopeConstants.REALM_ANYTYPE.toLowerCase(),
                 profile.getTask().getResource().getKey(),
                 event,
                 result,
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
index 22c646d..746b8ef 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPushResultHandler.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Stream;
 import org.apache.commons.lang3.exception.ExceptionUtils;
+import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.lib.types.AuditElements;
 import org.apache.syncope.common.lib.types.AuditElements.Result;
@@ -81,7 +82,7 @@ public class DefaultRealmPushResultHandler
         } catch (IgnoreProvisionException e) {
             ProvisioningReport result = new ProvisioningReport();
             result.setOperation(ResourceOperation.NONE);
-            result.setAnyType(realm == null ? null : REALM_TYPE);
+            result.setAnyType(realm == null ? null : SyncopeConstants.REALM_ANYTYPE);
             result.setStatus(ProvisioningReport.Status.IGNORE);
             result.setKey(realmKey);
             profile.getResults().add(result);
@@ -199,7 +200,7 @@ public class DefaultRealmPushResultHandler
         profile.getResults().add(result);
 
         result.setKey(realm.getKey());
-        result.setAnyType(REALM_TYPE);
+        result.setAnyType(SyncopeConstants.REALM_ANYTYPE);
         result.setName(realm.getFullPath());
 
         LOG.debug("Propagating Realm with key {} towards {}", realm.getKey(), profile.getTask().getResource());
@@ -238,13 +239,13 @@ public class DefaultRealmPushResultHandler
 
             boolean notificationsAvailable = notificationManager.notificationsAvailable(
                     AuditElements.EventCategoryType.PUSH,
-                    REALM_TYPE.toLowerCase(),
+                    SyncopeConstants.REALM_ANYTYPE.toLowerCase(),
                     profile.getTask().getResource().getKey(),
                     operation);
             boolean auditRequested = auditManager.auditRequested(
                     AuthContextUtils.getUsername(),
                     AuditElements.EventCategoryType.PUSH,
-                    REALM_TYPE.toLowerCase(),
+                    SyncopeConstants.REALM_ANYTYPE.toLowerCase(),
                     profile.getTask().getResource().getKey(),
                     operation);
             try {
@@ -428,7 +429,7 @@ public class DefaultRealmPushResultHandler
                     jobMap.put(AfterHandlingEvent.JOBMAP_KEY, new AfterHandlingEvent(
                             AuthContextUtils.getUsername(),
                             AuditElements.EventCategoryType.PUSH,
-                            REALM_TYPE.toLowerCase(),
+                            SyncopeConstants.REALM_ANYTYPE.toLowerCase(),
                             profile.getTask().getResource().getKey(),
                             operation,
                             resultStatus,