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,