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:16 UTC

[syncope] branch master 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 master
in repository https://gitbox.apache.org/repos/asf/syncope.git


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

commit b2fb1e6a76ccec7d705b9a530b250ea0189bc4f5
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 |  4 +--
 .../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(+), 37 deletions(-)

diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
index 23baedd..0718e71 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/panels/VirSchemaDetails.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
 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.ui.commons.Constants;
@@ -32,8 +31,7 @@ import org.apache.syncope.client.ui.commons.ajax.form.IndicatorAjaxFormComponent
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxCheckBoxPanel;
 import org.apache.syncope.client.ui.commons.markup.html.form.AjaxDropDownChoicePanel;
 import org.apache.syncope.client.ui.commons.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;
@@ -151,17 +149,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 =
-                ConnectorRestClient.buildObjectClassInfo(connInstanceTO, false).stream().
-                        filter(object -> object.getType().equals(anyTypes.get(anyType.getModelObject()))).
-                        findAny();
-
-        return connIdObjectClass.isPresent()
-                ? connIdObjectClass.get().getAttributes()
-                : List.of();
+        return ConnectorRestClient.getExtAttrNames(
+                SyncopeConstants.ROOT_REALM,
+                anyTypes.get(anyType.getModelObject()),
+                selectedResource.getConnector(),
+                selectedResource.getConfOverride());
     }
 }
diff --git a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
index ff3f884..1af4738 100644
--- a/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
+++ b/client/idm/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java
@@ -30,6 +30,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;
@@ -94,7 +95,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/idm/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java b/common/idm/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
index 4a26454..feba9d0 100644
--- a/common/idm/lib/src/main/java/org/apache/syncope/common/lib/to/ConnIdObjectClassTO.java
+++ b/common/idm/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,7 +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/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
index 6493d66..bbd1442 100644
--- a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
+++ b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ConnectorLogic.java
@@ -26,11 +26,14 @@ import java.util.Objects;
 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.IdMEntitlement;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
@@ -47,7 +50,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;
@@ -223,7 +225,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 35a1180..b22a390 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
@@ -38,8 +38,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 d275ea2..6cdf297 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
@@ -24,6 +24,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;
@@ -111,7 +112,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);
@@ -148,7 +149,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());
 
@@ -186,7 +187,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());
 
@@ -292,7 +293,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());
@@ -370,7 +371,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());
@@ -458,7 +459,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());
@@ -539,7 +540,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()) {
@@ -613,7 +614,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()) {
@@ -736,7 +737,7 @@ public class DefaultRealmPullResultHandler
         notificationManager.createTasks(
                 AuthContextUtils.getUsername(),
                 AuditElements.EventCategoryType.PULL,
-                REALM_TYPE.toLowerCase(),
+                SyncopeConstants.REALM_ANYTYPE.toLowerCase(),
                 profile.getTask().getResource().getKey(),
                 event,
                 result,
@@ -747,7 +748,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 3576c8c..a79d7e2 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,