Return-Path: X-Original-To: apmail-syncope-commits-archive@www.apache.org Delivered-To: apmail-syncope-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 673F3183B2 for ; Fri, 5 Jun 2015 15:11:37 +0000 (UTC) Received: (qmail 13070 invoked by uid 500); 5 Jun 2015 15:11:37 -0000 Delivered-To: apmail-syncope-commits-archive@syncope.apache.org Received: (qmail 12981 invoked by uid 500); 5 Jun 2015 15:11:37 -0000 Mailing-List: contact commits-help@syncope.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@syncope.apache.org Delivered-To: mailing list commits@syncope.apache.org Received: (qmail 12481 invoked by uid 99); 5 Jun 2015 15:11:37 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 05 Jun 2015 15:11:37 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id E688EE1104; Fri, 5 Jun 2015 15:11:36 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: ilgrosso@apache.org To: commits@syncope.apache.org Date: Fri, 05 Jun 2015 15:11:56 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [21/21] syncope git commit: [SYNCOPE-666] All tests are green, time to add more [SYNCOPE-666] All tests are green, time to add more Project: http://git-wip-us.apache.org/repos/asf/syncope/repo Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/dd88efbd Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/dd88efbd Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/dd88efbd Branch: refs/heads/SYNCOPE-666 Commit: dd88efbd0ec6fabb98728a84a6fe103f285433d7 Parents: d8c9479 Author: Francesco Chicchiriccò Authored: Fri Jun 5 17:11:22 2015 +0200 Committer: Francesco Chicchiriccò Committed: Fri Jun 5 17:11:22 2015 +0200 ---------------------------------------------------------------------- .travis.yml | 3 +- .../console/rest/ConnectorRestClient.java | 2 +- .../syncope/common/lib/AnyOperations.java | 91 ++++ .../lib/SyncopeClientCompositeException.java | 14 +- .../common/lib/SyncopeClientException.java | 8 +- .../common/lib/jaxb/GenericMapEntryType.java | 59 +++ .../syncope/common/lib/jaxb/GenericMapType.java | 49 +++ .../common/lib/jaxb/XmlGenericMapAdapter.java | 52 +++ .../apache/syncope/common/lib/mod/AnyMod.java | 18 + .../common/lib/report/UserReportletConf.java | 1 + .../common/lib/search/SearchableFields.java | 9 +- .../lib/to/AbstractProvisioningTaskTO.java | 8 +- .../syncope/common/lib/to/AnyObjectTO.java | 57 +++ .../org/apache/syncope/common/lib/to/AnyTO.java | 59 +-- .../syncope/common/lib/to/AnyTypeClassTO.java | 73 ++++ .../apache/syncope/common/lib/to/AnyTypeTO.java | 66 +++ .../apache/syncope/common/lib/to/AttrTO.java | 13 +- .../syncope/common/lib/to/BulkActionResult.java | 88 +--- .../apache/syncope/common/lib/to/GroupTO.java | 43 +- .../syncope/common/lib/to/MembershipTO.java | 10 +- .../syncope/common/lib/to/NotificationTO.java | 9 + .../syncope/common/lib/to/PushTaskTO.java | 11 +- .../syncope/common/lib/to/RelationshipTO.java | 10 - .../syncope/common/lib/to/ResourceTO.java | 14 +- .../syncope/common/lib/to/SyncTaskTO.java | 10 + .../apache/syncope/common/lib/to/UserTO.java | 64 +++ .../common/lib/to/WorkflowFormPropertyTO.java | 7 + .../syncope/common/lib/types/AnyTypeKind.java | 20 +- .../common/lib/types/ClientExceptionType.java | 4 +- .../syncope/common/lib/types/Entitlement.java | 20 + .../rest/api/service/AnyTypeClassService.java | 97 +++++ .../common/rest/api/service/AnyTypeService.java | 97 +++++ .../common/rest/api/service/RoleService.java | 26 +- .../common/rest/api/service/SchemaService.java | 2 +- .../common/rest/api/service/UserService.java | 2 +- .../rest/api/service/WorkflowService.java | 2 +- .../syncope/core/logic/AnyTypeClassLogic.java | 131 ++++++ .../apache/syncope/core/logic/AnyTypeLogic.java | 131 ++++++ .../core/logic/LogicInvocationHandler.java | 13 +- .../syncope/core/logic/ResourceLogic.java | 2 +- .../apache/syncope/core/logic/UserLogic.java | 4 +- .../core/logic/init/JobInstanceLoaderImpl.java | 36 +- .../core/logic/report/UserReportlet.java | 39 +- .../syncope/core/misc/ConnObjectUtils.java | 269 +++--------- .../apache/syncope/core/misc/MappingUtils.java | 25 +- .../syncope/core/misc/jexl/JexlUtils.java | 12 +- .../api/dao/UnallowedSchemaException.java | 29 ++ .../api/entity/anyobject/AnyObject.java | 4 +- .../api/entity/task/ProvisioningTask.java | 4 +- .../core/persistence/api/entity/user/User.java | 3 +- .../persistence/jpa/dao/AbstractAnyDAO.java | 3 +- .../persistence/jpa/dao/JPADerSchemaDAO.java | 4 +- .../persistence/jpa/dao/JPAPlainSchemaDAO.java | 4 +- .../persistence/jpa/dao/JPAVirSchemaDAO.java | 4 +- .../persistence/jpa/entity/AbstractAttr.java | 3 +- .../persistence/jpa/entity/AbstractDerAttr.java | 12 - .../persistence/jpa/entity/AbstractVirAttr.java | 12 - .../jpa/entity/anyobject/JPAADerAttr.java | 9 + .../jpa/entity/anyobject/JPAAVirAttr.java | 9 + .../jpa/entity/anyobject/JPAAnyObject.java | 4 +- .../jpa/entity/group/JPAGDerAttr.java | 9 + .../jpa/entity/group/JPAGVirAttr.java | 9 + .../jpa/entity/task/JPAAnyTemplate.java | 4 +- .../jpa/entity/task/JPAPushTask.java | 6 +- .../jpa/entity/task/JPASyncTask.java | 6 +- .../jpa/entity/user/JPAUDerAttr.java | 9 + .../jpa/entity/user/JPAUPlainAttr.java | 3 - .../jpa/entity/user/JPAUVirAttr.java | 9 + .../persistence/jpa/entity/user/JPAUser.java | 5 +- .../resources/META-INF/spring-orm-oracle.xml | 50 +++ .../resources/META-INF/spring-orm-sqlserver.xml | 50 +++ .../src/main/resources/META-INF/spring-orm.xml | 50 +++ .../persistence/jpa/entity/VirAttrTest.java | 4 +- .../jpa/relationship/AnyTypeTest.java | 7 +- .../src/test/resources/content.xml | 49 ++- .../core/provisioning/api/VirAttrHandler.java | 71 ++++ .../api/data/AnyTypeClassDataBinder.java | 31 ++ .../api/data/AnyTypeDataBinder.java | 31 ++ .../DefaultAnyObjectProvisioningManager.java | 15 + .../java/DefaultGroupProvisioningManager.java | 17 + .../java/DefaultUserProvisioningManager.java | 3 + .../core/provisioning/java/VirAttrHandler.java | 238 ----------- .../provisioning/java/VirAttrHandlerImpl.java | 411 +++++++++++++++++++ .../java/data/AbstractAnyDataBinder.java | 262 +++++++----- .../java/data/AnyObjectDataBinderImpl.java | 99 ++++- .../java/data/AnyTypeClassDataBinderImpl.java | 115 ++++++ .../java/data/AnyTypeDataBinderImpl.java | 90 ++++ .../java/data/ConfigurationDataBinderImpl.java | 4 +- .../java/data/GroupDataBinderImpl.java | 6 +- .../java/data/NotificationDataBinderImpl.java | 30 +- .../java/data/ResourceDataBinderImpl.java | 40 +- .../java/data/RoleDataBinderImpl.java | 2 +- .../java/data/SchemaDataBinderImpl.java | 2 +- .../java/data/TaskDataBinderImpl.java | 177 ++++---- .../java/data/UserDataBinderImpl.java | 122 ++++-- .../notification/NotificationManagerImpl.java | 18 +- .../AbstractPropagationTaskExecutor.java | 20 +- .../LDAPMembershipPropagationActions.java | 4 +- .../propagation/PropagationManagerImpl.java | 24 +- .../java/sync/AbstractProvisioningJob.java | 3 +- .../java/sync/AbstractPushResultHandler.java | 6 +- .../java/sync/AbstractSyncResultHandler.java | 29 +- .../java/sync/AbstractSyncopeResultHandler.java | 5 +- .../java/sync/GroupSyncResultHandlerImpl.java | 6 +- .../java/sync/LDAPMembershipSyncActions.java | 8 +- .../provisioning/java/sync/PushJobImpl.java | 36 +- .../provisioning/java/sync/SyncJobImpl.java | 12 +- .../core/provisioning/java/sync/SyncUtils.java | 62 ++- .../java/data/ResourceDataBinderTest.java | 2 +- .../rest/cxf/RestServiceExceptionMapper.java | 3 + .../cxf/service/AnyTypeClassServiceImpl.java | 67 +++ .../rest/cxf/service/AnyTypeServiceImpl.java | 67 +++ .../rest/cxf/service/ConnectorServiceImpl.java | 9 +- .../core/rest/cxf/service/GroupServiceImpl.java | 34 +- .../rest/cxf/service/ResourceServiceImpl.java | 12 +- .../core/rest/cxf/service/TaskServiceImpl.java | 14 +- .../core/rest/cxf/service/UserServiceImpl.java | 46 ++- .../activiti/ActivitiUserWorkflowAdapter.java | 12 +- .../core/workflow/activiti/ActivitiUtils.java | 39 ++ .../workflow/activiti/SyncopeUserManager.java | 4 +- .../main/resources/workflowActivitiContext.xml | 2 + .../camel/processor/GroupUpdateProcessor.java | 23 +- .../camel/processor/UserUpdateProcessor.java | 12 +- .../main/resources/all/provisioning.properties | 2 +- .../src/main/resources/userWorkflow.bpmn20.xml | 12 +- .../fit/core/reference/AbstractITCase.java | 12 +- .../fit/core/reference/AbstractTaskITCase.java | 16 +- .../fit/core/reference/CamelRouteITCase.java | 8 + .../fit/core/reference/ConfigurationITCase.java | 92 ----- .../fit/core/reference/ConnectorITCase.java | 6 +- .../core/reference/ExceptionMapperITCase.java | 9 + .../syncope/fit/core/reference/GroupITCase.java | 51 ++- .../fit/core/reference/PlainSchemaITCase.java | 30 +- .../fit/core/reference/PushTaskITCase.java | 70 ++-- .../fit/core/reference/ResourceITCase.java | 20 +- .../fit/core/reference/SyncTaskITCase.java | 55 ++- .../syncope/fit/core/reference/UserITCase.java | 51 ++- .../fit/core/reference/UserWorkflowITCase.java | 29 +- .../fit/core/reference/VirAttrITCase.java | 7 +- 139 files changed, 3540 insertions(+), 1429 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/.travis.yml ---------------------------------------------------------------------- diff --git a/.travis.yml b/.travis.yml index e17fd2c..0e6f5c4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,6 @@ jdk: # default install is mvn install --quiet -DskipTests=true install: mvn --show-version --quiet -P all,skipTests #invoker.streamLogs: we cannot access to log files through Travis web ui, so display everything in the console -#script: mvn --show-version --quiet clean install -Dinvoker.streamLogs=true -script: mvn --show-version --quiet -PskipTests -Dinvoker.streamLogs=true +script: mvn --show-version --quiet clean install -Dinvoker.streamLogs=true notifications: webhooks: http://rovere.tirasa.net/cgi-bin/travis.cgi http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/client/console/src/main/java/org/apache/syncope/client/console/rest/ConnectorRestClient.java ---------------------------------------------------------------------- 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 a093dbd..e6f8488 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 @@ -172,7 +172,7 @@ public class ConnectorRestClient extends BaseRestClient { try { check = getService(ResourceService.class).check(resourceTO); } catch (Exception e) { - LOG.error("Connector not found {}", resourceTO.getConnectorId(), e); + LOG.error("Connector not found {}", resourceTO.getConnector(), e); } return check; http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java index cab3239..e8bcedb 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/AnyOperations.java @@ -29,13 +29,17 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.SerializationUtils; import org.apache.commons.lang3.StringUtils; import org.apache.syncope.common.lib.mod.AnyMod; +import org.apache.syncope.common.lib.mod.AnyObjectMod; import org.apache.syncope.common.lib.mod.AttrMod; import org.apache.syncope.common.lib.mod.ReferenceMod; import org.apache.syncope.common.lib.mod.GroupMod; import org.apache.syncope.common.lib.mod.UserMod; +import org.apache.syncope.common.lib.to.AnyObjectTO; import org.apache.syncope.common.lib.to.AnyTO; import org.apache.syncope.common.lib.to.AttrTO; import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.common.lib.to.MembershipTO; +import org.apache.syncope.common.lib.to.RelationshipTO; import org.apache.syncope.common.lib.to.UserTO; /** @@ -193,6 +197,63 @@ public final class AnyOperations { /** * Calculate modifications needed by first in order to be equal to second. * + * @param updated updated AnyObjectTO + * @param original original AnyObjectTO + * @return AnyObjectMod containing differences + */ + public static AnyObjectMod diff(final AnyObjectTO updated, final AnyObjectTO original) { + return diff(updated, original, false); + } + + /** + * Calculate modifications needed by first in order to be equal to second. + * + * @param updated updated AnyObjectTO + * @param original original AnyObjectTO + * @param incremental perform incremental diff (without removing existing info) + * @return AnyObjectMod containing differences + */ + public static AnyObjectMod diff(final AnyObjectTO updated, final AnyObjectTO original, final boolean incremental) { + AnyObjectMod result = new AnyObjectMod(); + + diff(updated, original, result, incremental); + + // 1. relationships + Map updatedRels = updated.getRelationshipMap(); + Map originalRels = original.getRelationshipMap(); + + for (Map.Entry entry : updatedRels.entrySet()) { + if (!originalRels.containsKey(entry.getKey())) { + result.getRelationshipsToAdd().add(entry.getKey()); + } + } + if (!incremental) { + Set originalGroups = new HashSet<>(originalRels.keySet()); + originalGroups.removeAll(updatedRels.keySet()); + result.getRelationshipsToRemove().addAll(originalGroups); + } + + // 2. memberships + Map updatedMembs = updated.getMembershipMap(); + Map originalMembs = original.getMembershipMap(); + + for (Map.Entry entry : updatedMembs.entrySet()) { + if (!originalMembs.containsKey(entry.getKey())) { + result.getMembershipsToAdd().add(entry.getKey()); + } + } + if (!incremental) { + Set originalGroups = new HashSet<>(originalMembs.keySet()); + originalGroups.removeAll(updatedMembs.keySet()); + result.getMembershipsToRemove().addAll(originalGroups); + } + + return result; + } + + /** + * Calculate modifications needed by first in order to be equal to second. + * * @param updated updated UserTO * @param original original UserTO * @return UserMod containing differences @@ -248,6 +309,36 @@ public final class AnyOperations { result.getRolesToRemove().addAll(CollectionUtils.subtract(original.getRoles(), updated.getRoles())); result.getRolesToAdd().addAll(CollectionUtils.subtract(updated.getRoles(), original.getRoles())); + // 5. relationships + Map updatedRels = updated.getRelationshipMap(); + Map originalRels = original.getRelationshipMap(); + + for (Map.Entry entry : updatedRels.entrySet()) { + if (!originalRels.containsKey(entry.getKey())) { + result.getRelationshipsToAdd().add(entry.getKey()); + } + } + if (!incremental) { + Set originalGroups = new HashSet<>(originalRels.keySet()); + originalGroups.removeAll(updatedRels.keySet()); + result.getRelationshipsToRemove().addAll(originalGroups); + } + + // 6. memberships + Map updatedMembs = updated.getMembershipMap(); + Map originalMembs = original.getMembershipMap(); + + for (Map.Entry entry : updatedMembs.entrySet()) { + if (!originalMembs.containsKey(entry.getKey())) { + result.getMembershipsToAdd().add(entry.getKey()); + } + } + if (!incremental) { + Set originalGroups = new HashSet<>(originalMembs.keySet()); + originalGroups.removeAll(updatedMembs.keySet()); + result.getMembershipsToRemove().addAll(originalGroups); + } + return result; } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java index d139bda..ebdc5ae 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientCompositeException.java @@ -21,6 +21,8 @@ package org.apache.syncope.common.lib; import java.util.HashSet; import java.util.Iterator; import java.util.Set; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.syncope.common.lib.types.ClientExceptionType; public class SyncopeClientCompositeException extends SyncopeClientException { @@ -66,7 +68,17 @@ public class SyncopeClientCompositeException extends SyncopeClientException { + ClientExceptionType.class.getName() + " set"); } - return exceptions.add(exception); + SyncopeClientException alreadyAdded = CollectionUtils.find(exceptions, new Predicate() { + + @Override + public boolean evaluate(final SyncopeClientException ex) { + return ex.getType() == exception.getType(); + } + }); + + return alreadyAdded == null + ? exceptions.add(exception) + : alreadyAdded.getElements().addAll(exception.getElements()); } @Override http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientException.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientException.java b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientException.java index 8d015f2..f17d5e5 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientException.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/SyncopeClientException.java @@ -18,8 +18,8 @@ */ package org.apache.syncope.common.lib; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import org.apache.syncope.common.lib.types.ClientExceptionType; public class SyncopeClientException extends RuntimeException { @@ -28,7 +28,7 @@ public class SyncopeClientException extends RuntimeException { private ClientExceptionType type; - private final List elements = new ArrayList<>(); + private final Set elements = new HashSet<>(); public static SyncopeClientException build(final ClientExceptionType type) { if (type == ClientExceptionType.Composite) { @@ -66,7 +66,7 @@ public class SyncopeClientException extends RuntimeException { this.type = type; } - public List getElements() { + public Set getElements() { return elements; } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapEntryType.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapEntryType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapEntryType.java new file mode 100644 index 0000000..2d30612 --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapEntryType.java @@ -0,0 +1,59 @@ +/* + * Copyright 2011 John Yeary . + * Copyright 2011 Bluelotus Software, LLC. + * + * Licensed 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. + */ +/* + * $Id: MapEntryType.java 399 2011-12-03 04:22:50Z jyeary $ + */ +package org.apache.syncope.common.lib.jaxb; + +import java.util.Map; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; + +@XmlAccessorType(XmlAccessType.PROPERTY) +public class GenericMapEntryType { + + private K key; + + private V value; + + public GenericMapEntryType() { + } + + public GenericMapEntryType(final Map.Entry e) { + key = e.getKey(); + value = e.getValue(); + } + + @XmlElement + public K getKey() { + return key; + } + + public void setKey(final K key) { + this.key = key; + } + + @XmlElement + public V getValue() { + return value; + } + + public void setValue(final V value) { + this.value = value; + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java new file mode 100644 index 0000000..491a860 --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/GenericMapType.java @@ -0,0 +1,49 @@ +/* + * Copyright 2011 John Yeary . + * Copyright 2011 Bluelotus Software, LLC. + * + * Licensed 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. + */ +/* + * $Id: MapType.java 399 2011-12-03 04:22:50Z jyeary $ + */ +package org.apache.syncope.common.lib.jaxb; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +public class GenericMapType { + + private final List> entry = new ArrayList<>(); + + public GenericMapType() { + } + + public GenericMapType(final Map map) { + for (Map.Entry e : map.entrySet()) { + entry.add(new GenericMapEntryType<>(e)); + } + } + + public List> getEntry() { + return entry; + } + + public void setEntry(final List> entry) { + this.entry.clear(); + if (entry != null) { + this.entry.addAll(entry); + } + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java new file mode 100644 index 0000000..1b10d5f --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/jaxb/XmlGenericMapAdapter.java @@ -0,0 +1,52 @@ +/* + * Copyright 2011 John Yeary . + * Copyright 2011 Bluelotus Software, LLC. + * + * Licensed 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. + */ +/* + * $Id: XmlGenericMapAdapter.java 399 2011-12-03 04:22:50Z jyeary $ + */ +package org.apache.syncope.common.lib.jaxb; + +import java.util.HashMap; +import java.util.Map; +import javax.xml.bind.annotation.adapters.XmlAdapter; + +public class XmlGenericMapAdapter extends XmlAdapter, Map> { + + @Override + public Map unmarshal(final GenericMapType v) throws Exception { + Map map = new HashMap<>(); + + for (GenericMapEntryType mapEntryType : v.getEntry()) { + map.put(mapEntryType.getKey(), mapEntryType.getValue()); + } + + return map; + } + + @Override + public GenericMapType marshal(final Map v) throws Exception { + GenericMapType mapType = new GenericMapType<>(); + + for (Map.Entry entry : v.entrySet()) { + GenericMapEntryType mapEntryType = new GenericMapEntryType<>(); + mapEntryType.setKey(entry.getKey()); + mapEntryType.setValue(entry.getValue()); + mapType.getEntry().add(mapEntryType); + } + + return mapType; + } +} http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AnyMod.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AnyMod.java b/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AnyMod.java index ec508c9..e5fcb85 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AnyMod.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/mod/AnyMod.java @@ -35,6 +35,10 @@ public abstract class AnyMod extends AbstractBaseBean { private String realm; + protected final Set auxClassesToAdd = new HashSet<>(); + + protected final Set auxClassesToRemove = new HashSet<>(); + protected final Set plainAttrsToUpdate = new HashSet<>(); protected final Set plainAttrsToRemove = new HashSet<>(); @@ -67,6 +71,20 @@ public abstract class AnyMod extends AbstractBaseBean { this.realm = realm; } + @XmlElementWrapper(name = "auxClassesToAdd") + @XmlElement(name = "class") + @JsonProperty("auxClassesToAdd") + public Set getAuxClassesToAdd() { + return auxClassesToAdd; + } + + @XmlElementWrapper(name = "auxClassesToRemove") + @XmlElement(name = "class") + @JsonProperty("auxClassesToRemove") + public Set getAuxClassesToRemove() { + return auxClassesToRemove; + } + @XmlElementWrapper(name = "plainAttrsToRemove") @XmlElement(name = "attribute") @JsonProperty("plainAttrsToRemove") http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java b/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java index 72daf7b..afc459e 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/report/UserReportletConf.java @@ -44,6 +44,7 @@ public class UserReportletConf extends AbstractAnyReportletConf { changePwdDate, passwordHistorySize, failedLoginCount, + relationships, memberships, resources http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java index 9a68a8d..6443eea 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/search/SearchableFields.java @@ -25,10 +25,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; import org.apache.commons.lang3.ArrayUtils; -import org.apache.syncope.common.lib.to.AnyObjectTO; import org.apache.syncope.common.lib.to.AnyTO; -import org.apache.syncope.common.lib.to.GroupTO; -import org.apache.syncope.common.lib.to.UserTO; import org.apache.syncope.common.lib.types.AnyTypeKind; public final class SearchableFields { @@ -38,11 +35,7 @@ public final class SearchableFields { }; public static List get(final AnyTypeKind anyTypeKind) { - return get(anyTypeKind == AnyTypeKind.USER - ? UserTO.class - : anyTypeKind == AnyTypeKind.GROUP - ? GroupTO.class - : AnyObjectTO.class); + return get(anyTypeKind.getToClass()); } public static List get(final Class anyRef) { http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractProvisioningTaskTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractProvisioningTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractProvisioningTaskTO.java index c1dcf1c..cd63bcd 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractProvisioningTaskTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractProvisioningTaskTO.java @@ -19,8 +19,8 @@ package org.apache.syncope.common.lib.to; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; +import java.util.Set; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; @@ -50,7 +50,7 @@ public class AbstractProvisioningTaskTO extends SchedTaskTO { private MatchingRule matchingRule; - private final List actionsClassNames = new ArrayList<>(); + private final Set actionsClassNames = new HashSet<>(); public String getResource() { return resource; @@ -95,7 +95,7 @@ public class AbstractProvisioningTaskTO extends SchedTaskTO { @XmlElementWrapper(name = "actionsClassNames") @XmlElement(name = "actionsClassName") @JsonProperty("actionsClassNames") - public List getActionsClassNames() { + public Set getActionsClassNames() { return actionsClassNames; } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java index 6d2eb1b..f5599de 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyObjectTO.java @@ -18,6 +18,15 @@ */ package org.apache.syncope.common.lib.to; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; @@ -27,4 +36,52 @@ public class AnyObjectTO extends AnyTO { private static final long serialVersionUID = 8841697496476959639L; + private final List relationships = new ArrayList<>(); + + private final List memberships = new ArrayList<>(); + + private final List dynGroups = new ArrayList<>(); + + @XmlElementWrapper(name = "relationships") + @XmlElement(name = "relationship") + @JsonProperty("relationships") + public List getRelationships() { + return relationships; + } + + @JsonIgnore + public Map getRelationshipMap() { + Map result = new HashMap<>(getRelationships().size()); + for (RelationshipTO membership : getRelationships()) { + result.put(membership.getRightKey(), membership); + } + result = Collections.unmodifiableMap(result); + + return result; + } + + @XmlElementWrapper(name = "memberships") + @XmlElement(name = "membership") + @JsonProperty("memberships") + public List getMemberships() { + return memberships; + } + + @JsonIgnore + public Map getMembershipMap() { + Map result = new HashMap<>(getMemberships().size()); + for (MembershipTO membership : getMemberships()) { + result.put(membership.getRightKey(), membership); + } + result = Collections.unmodifiableMap(result); + + return result; + } + + @XmlElementWrapper(name = "dynGroups") + @XmlElement(name = "role") + @JsonProperty("dynGroups") + public List getDynGroups() { + return dynGroups; + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java index bac9947..56b1c44 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTO.java @@ -20,6 +20,7 @@ package org.apache.syncope.common.lib.to; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonTypeInfo; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -30,9 +31,14 @@ import java.util.Map; import java.util.Set; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlSeeAlso; import javax.xml.bind.annotation.XmlType; +@XmlRootElement(name = "any") @XmlType +@XmlSeeAlso({ UserTO.class, GroupTO.class, AnyObjectTO.class }) +@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "@class") public abstract class AnyTO extends ConnObjectTO { private static final long serialVersionUID = -754311920679872084L; @@ -45,6 +51,8 @@ public abstract class AnyTO extends ConnObjectTO { private String status; + private final List auxClasses = new ArrayList<>(); + private final Set derAttrs = new LinkedHashSet<>(); private final Set virAttrs = new LinkedHashSet<>(); @@ -53,12 +61,6 @@ public abstract class AnyTO extends ConnObjectTO { private final List propagationStatusTOs = new ArrayList<>(); - private final List relationships = new ArrayList<>(); - - private final List memberships = new ArrayList<>(); - - private final List dynGroups = new ArrayList<>(); - public long getKey() { return key; } @@ -91,6 +93,13 @@ public abstract class AnyTO extends ConnObjectTO { this.status = status; } + @XmlElementWrapper(name = "auxClasses") + @XmlElement(name = "class") + @JsonProperty("auxClasses") + public List getAuxClasses() { + return auxClasses; + } + @XmlElementWrapper(name = "derAttrs") @XmlElement(name = "attribute") @JsonProperty("derAttrs") @@ -139,42 +148,4 @@ public abstract class AnyTO extends ConnObjectTO { return propagationStatusTOs; } - @XmlElementWrapper(name = "relationships") - @XmlElement(name = "relationship") - @JsonProperty("relationships") - public List getRelationships() { - return relationships; - } - - @XmlElementWrapper(name = "memberships") - @XmlElement(name = "membership") - @JsonProperty("memberships") - public List getMemberships() { - return memberships; - } - - @JsonIgnore - public Map getMembershipMap() { - Map result; - - if (getMemberships() == null) { - result = Collections.emptyMap(); - } else { - result = new HashMap<>(getMemberships().size()); - for (MembershipTO membership : getMemberships()) { - result.put(membership.getRightKey(), membership); - } - result = Collections.unmodifiableMap(result); - } - - return result; - } - - @XmlElementWrapper(name = "dynGroups") - @XmlElement(name = "role") - @JsonProperty("dynGroups") - public List getDynGroups() { - return dynGroups; - } - } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java new file mode 100644 index 0000000..1afbe4d --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeClassTO.java @@ -0,0 +1,73 @@ +/* + * 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.common.lib.to; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import org.apache.syncope.common.lib.AbstractBaseBean; + +@XmlRootElement(name = "anyTypeClass") +@XmlType +public class AnyTypeClassTO extends AbstractBaseBean { + + private static final long serialVersionUID = -591757688607551266L; + + private String name; + + private final List plainSchemas = new ArrayList<>(); + + private final List derSchemas = new ArrayList<>(); + + private final List virSchemas = new ArrayList<>(); + + public String getKey() { + return name; + } + + public void setKey(final String key) { + this.name = key; + } + + @XmlElementWrapper(name = "plainSchemas") + @XmlElement(name = "schema") + @JsonProperty("plainSchemas") + public List getPlainSchemas() { + return plainSchemas; + } + + @XmlElementWrapper(name = "derSchemas") + @XmlElement(name = "schema") + @JsonProperty("derSchemas") + public List getDerSchemas() { + return derSchemas; + } + + @XmlElementWrapper(name = "virSchemas") + @XmlElement(name = "schema") + @JsonProperty("virSchemas") + public List getVirSchemas() { + return virSchemas; + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java new file mode 100644 index 0000000..9618bf5 --- /dev/null +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AnyTypeTO.java @@ -0,0 +1,66 @@ +/* + * 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.common.lib.to; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.List; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlType; +import org.apache.syncope.common.lib.AbstractBaseBean; +import org.apache.syncope.common.lib.types.AnyTypeKind; + +@XmlRootElement(name = "anyType") +@XmlType +public class AnyTypeTO extends AbstractBaseBean { + + private static final long serialVersionUID = 6771657557616874373L; + + private String name; + + private AnyTypeKind kind; + + private final List classes = new ArrayList<>(); + + public String getKey() { + return name; + } + + public void setKey(final String key) { + this.name = key; + } + + public AnyTypeKind getKind() { + return kind; + } + + public void setKind(final AnyTypeKind kind) { + this.kind = kind; + } + + @XmlElementWrapper(name = "classes") + @XmlElement(name = "class") + @JsonProperty("classes") + public List getClasses() { + return classes; + } + +} http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java index 829f309..cf385b4 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AttrTO.java @@ -41,21 +41,12 @@ public class AttrTO extends AbstractBaseBean { /** * Set of (string) values of this attribute. */ - private final List values; + private final List values = new ArrayList<>(); /** * Whether this attribute is read-only or not. */ - private boolean readonly; - - /** - * Default constructor. - */ - public AttrTO() { - super(); - values = new ArrayList(); - readonly = false; - } + private boolean readonly = false; /** * @return the name of the schema that this attribute is referring to http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java index 9726a25..9b44b3f 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/BulkActionResult.java @@ -25,15 +25,18 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import javax.xml.bind.annotation.XmlElement; -import javax.xml.bind.annotation.XmlElementWrapper; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlEnum; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.syncope.common.lib.AbstractBaseBean; +import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter; @XmlRootElement(name = "bulkActionResult") @XmlType +@XmlAccessorType(XmlAccessType.FIELD) public class BulkActionResult extends AbstractBaseBean { private static final long serialVersionUID = 2868894178821778133L; @@ -52,86 +55,25 @@ public class BulkActionResult extends AbstractBaseBean { } - private final List results = new ArrayList<>(); - - @XmlElementWrapper(name = "result") - @XmlElement(name = "item") - @JsonProperty("result") - public List getResult() { - return results; - } - + @XmlJavaTypeAdapter(XmlGenericMapAdapter.class) @JsonIgnore - public void add(final Object id, final Status status) { - if (id != null) { - results.add(new Result(id.toString(), status)); - } - } + private final Map results = new HashMap<>(); - @JsonIgnore - public void add(final Object id, final String status) { - if (id != null) { - results.add(new Result(id.toString(), Status.valueOf(status.toUpperCase()))); - } - } - - @JsonIgnore - public Map getResultMap() { - final Map res = new HashMap<>(); - - for (Result result : results) { - res.put(result.getKey(), result.getValue()); - } - - return Collections.unmodifiableMap(res); + @JsonProperty + public Map getResults() { + return results; } @JsonIgnore public List getResultByStatus(final Status status) { - final List res = new ArrayList<>(); + final List result = new ArrayList<>(); - for (Result result : results) { - if (result.getValue() == status) { - res.add(result.getKey()); + for (Map.Entry entry : results.entrySet()) { + if (entry.getValue() == status) { + result.add(entry.getKey()); } } - return Collections.unmodifiableList(res); - } - - public static class Result extends AbstractBaseBean { - - private static final long serialVersionUID = -1149681964161193232L; - - private String key; - - private Status value; - - public Result() { - super(); - } - - public Result(final String key, final Status value) { - super(); - - this.key = key; - this.value = value; - } - - public String getKey() { - return key; - } - - public Status getValue() { - return value; - } - - public void setKey(final String key) { - this.key = key; - } - - public void setValue(final Status value) { - this.value = value; - } + return Collections.unmodifiableList(result); } } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java index 873b15d..a5a33ca 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/GroupTO.java @@ -18,13 +18,13 @@ */ package org.apache.syncope.common.lib.to; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonIgnore; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import org.apache.syncope.common.lib.types.AnyTypeKind; @XmlRootElement(name = "group") @XmlType -@JsonIgnoreProperties({ "displayName" }) public class GroupTO extends AnyTO { private static final long serialVersionUID = -7785920258290147542L; @@ -35,9 +35,19 @@ public class GroupTO extends AnyTO { private Long groupOwner; - private String aDynMembershipCond; + private String adynMembershipCond; - private String uDynMembershipCond; + private String udynMembershipCond; + + @Override + public String getType() { + return AnyTypeKind.GROUP.name(); + } + + @Override + public void setType(final String type) { + // fixed + } public String getName() { return name; @@ -64,19 +74,36 @@ public class GroupTO extends AnyTO { } public String getADynMembershipCond() { - return aDynMembershipCond; + return adynMembershipCond; } public void setADynMembershipCond(final String aDynMembershipCond) { - this.aDynMembershipCond = aDynMembershipCond; + this.adynMembershipCond = aDynMembershipCond; } public String getUDynMembershipCond() { - return uDynMembershipCond; + return udynMembershipCond; } public void setUDynMembershipCond(final String uDynMembershipCond) { - this.uDynMembershipCond = uDynMembershipCond; + this.udynMembershipCond = uDynMembershipCond; } + @JsonIgnore + public String getDisplayName() { + return getKey() + " " + getName(); + } + + public static long fromDisplayName(final String displayName) { + long result = 0; + if (displayName != null && !displayName.isEmpty() && displayName.indexOf(' ') != -1) { + try { + result = Long.valueOf(displayName.split(" ")[0]); + } catch (NumberFormatException e) { + // ignore + } + } + + return result; + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java index 5c435e4..ef70589 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/MembershipTO.java @@ -20,6 +20,7 @@ package org.apache.syncope.common.lib.to; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import org.apache.syncope.common.lib.types.AnyTypeKind; @XmlRootElement(name = "membership") @XmlType @@ -29,9 +30,14 @@ public class MembershipTO extends RelationshipTO { private String groupName; + public MembershipTO() { + super(); + super.setRightType(AnyTypeKind.GROUP.name()); + } + @Override - public String getRightType() { - return "group"; + public void setRightType(final String rightType) { + // ignore } public String getGroupName() { http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java index 662a465..7cb6556 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/NotificationTO.java @@ -18,21 +18,27 @@ */ package org.apache.syncope.common.lib.to; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.syncope.common.lib.AbstractBaseBean; +import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter; import org.apache.syncope.common.lib.types.IntMappingType; import org.apache.syncope.common.lib.types.TraceLevel; @XmlRootElement(name = "notification") @XmlType +@XmlAccessorType(XmlAccessType.FIELD) public class NotificationTO extends AbstractBaseBean { private static final long serialVersionUID = -6145117115632592612L; @@ -41,6 +47,8 @@ public class NotificationTO extends AbstractBaseBean { private final List events = new ArrayList<>(); + @XmlJavaTypeAdapter(XmlGenericMapAdapter.class) + @JsonIgnore private final Map abouts = new HashMap<>(); private String recipients; @@ -63,6 +71,7 @@ public class NotificationTO extends AbstractBaseBean { private boolean active; + @JsonProperty public Map getAbouts() { return abouts; } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java index e1839af..dd3347a 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/PushTaskTO.java @@ -18,21 +18,30 @@ */ package org.apache.syncope.common.lib.to; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashMap; import java.util.Map; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter; @XmlRootElement(name = "pushTask") @XmlType +@XmlAccessorType(XmlAccessType.FIELD) public class PushTaskTO extends AbstractProvisioningTaskTO { private static final long serialVersionUID = -2143537546915809018L; + @XmlJavaTypeAdapter(XmlGenericMapAdapter.class) + @JsonIgnore private final Map filters = new HashMap<>(); + @JsonProperty public Map getFilters() { return filters; } - } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java index 2585b2b..d769719 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/RelationshipTO.java @@ -28,8 +28,6 @@ public class RelationshipTO extends AbstractBaseBean { private static final long serialVersionUID = 360672942026613929L; - private long key; - private String leftType; private long leftKey; @@ -38,14 +36,6 @@ public class RelationshipTO extends AbstractBaseBean { private long rightKey; - public long getKey() { - return key; - } - - public void setKey(final long key) { - this.key = key; - } - public String getLeftType() { return leftType; } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java index fb97113..dcec457 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/ResourceTO.java @@ -48,7 +48,7 @@ public class ResourceTO extends AbstractAnnotatedBean { /** * The resource type is identified by the associated connector. */ - private Long connectorId; + private Long connector; /** * Convenience information: display name for the connector id. @@ -83,10 +83,6 @@ public class ResourceTO extends AbstractAnnotatedBean { private final Set connConfProperties = new HashSet<>(); - private String usyncToken; - - private String rsyncToken; - private final List propagationActionsClassNames = new ArrayList<>(); public ResourceTO() { @@ -117,12 +113,12 @@ public class ResourceTO extends AbstractAnnotatedBean { this.enforceMandatoryCondition = enforceMandatoryCondition; } - public Long getConnectorId() { - return connectorId; + public Long getConnector() { + return connector; } - public void setConnectorId(final Long connectorId) { - this.connectorId = connectorId; + public void setConnector(final Long connector) { + this.connector = connector; } public String getConnectorDisplayName() { http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java index 4974505..a6a7a8a 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/SyncTaskTO.java @@ -18,19 +18,28 @@ */ package org.apache.syncope.common.lib.to; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashMap; import java.util.Map; +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; +import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter; @XmlRootElement(name = "syncTask") @XmlType +@XmlAccessorType(XmlAccessType.FIELD) public class SyncTaskTO extends AbstractProvisioningTaskTO { private static final long serialVersionUID = -2143537546915809017L; private String destinationRealm; + @XmlJavaTypeAdapter(XmlGenericMapAdapter.class) + @JsonIgnore private final Map templates = new HashMap<>(); private boolean fullReconciliation; @@ -43,6 +52,7 @@ public class SyncTaskTO extends AbstractProvisioningTaskTO { this.destinationRealm = destinationRealm; } + @JsonProperty public Map getTemplates() { return templates; } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java index 5de7b01..dd5ebee 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/UserTO.java @@ -18,17 +18,22 @@ */ package org.apache.syncope.common.lib.to; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Collections; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; +import org.apache.syncope.common.lib.types.AnyTypeKind; @XmlRootElement(name = "user") @XmlType @@ -58,6 +63,22 @@ public class UserTO extends AnyTO { private String securityAnswer; + private final List relationships = new ArrayList<>(); + + private final List memberships = new ArrayList<>(); + + private final List dynGroups = new ArrayList<>(); + + @Override + public String getType() { + return AnyTypeKind.USER.name(); + } + + @Override + public void setType(final String type) { + // fixed + } + public String getPassword() { return password; } @@ -148,6 +169,49 @@ public class UserTO extends AnyTO { this.securityAnswer = securityAnswer; } + @XmlElementWrapper(name = "relationships") + @XmlElement(name = "relationship") + @JsonProperty("relationships") + public List getRelationships() { + return relationships; + } + + @JsonIgnore + public Map getRelationshipMap() { + Map result = new HashMap<>(getRelationships().size()); + for (RelationshipTO membership : getRelationships()) { + result.put(membership.getRightKey(), membership); + } + result = Collections.unmodifiableMap(result); + + return result; + } + + @XmlElementWrapper(name = "memberships") + @XmlElement(name = "membership") + @JsonProperty("memberships") + public List getMemberships() { + return memberships; + } + + @JsonIgnore + public Map getMembershipMap() { + Map result = new HashMap<>(getMemberships().size()); + for (MembershipTO membership : getMemberships()) { + result.put(membership.getRightKey(), membership); + } + result = Collections.unmodifiableMap(result); + + return result; + } + + @XmlElementWrapper(name = "dynGroups") + @XmlElement(name = "role") + @JsonProperty("dynGroups") + public List getDynGroups() { + return dynGroups; + } + @Override public String toString() { return new ReflectionToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) { http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java index 5b67c92..9fa5928 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/WorkflowFormPropertyTO.java @@ -18,11 +18,15 @@ */ package org.apache.syncope.common.lib.to; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; import java.util.HashMap; import java.util.Map; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; import org.apache.syncope.common.lib.AbstractBaseBean; +import org.apache.syncope.common.lib.jaxb.XmlGenericMapAdapter; import org.apache.syncope.common.lib.types.WorkflowFormPropertyType; @XmlRootElement(name = "workflowFormProperty") @@ -47,6 +51,8 @@ public class WorkflowFormPropertyTO extends AbstractBaseBean { private String datePattern; + @XmlJavaTypeAdapter(XmlGenericMapAdapter.class) + @JsonIgnore private final Map enumValues = new HashMap<>(); public String getId() { @@ -113,6 +119,7 @@ public class WorkflowFormPropertyTO extends AbstractBaseBean { this.datePattern = datePattern; } + @JsonProperty public Map getEnumValues() { return enumValues; } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java index c7b4e47..ee35e28 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/AnyTypeKind.java @@ -19,12 +19,26 @@ package org.apache.syncope.common.lib.types; import javax.xml.bind.annotation.XmlEnum; +import org.apache.syncope.common.lib.to.AnyObjectTO; +import org.apache.syncope.common.lib.to.AnyTO; +import org.apache.syncope.common.lib.to.GroupTO; +import org.apache.syncope.common.lib.to.UserTO; @XmlEnum public enum AnyTypeKind { - USER, - GROUP, - ANY_OBJECT; + USER(UserTO.class), + GROUP(GroupTO.class), + ANY_OBJECT(AnyObjectTO.class); + + private final Class toClass; + + private AnyTypeKind(final Class toClass) { + this.toClass = toClass; + } + + public Class getToClass() { + return toClass; + } } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java index 498f603..8e96942 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/ClientExceptionType.java @@ -40,6 +40,7 @@ public enum ClientExceptionType { InvalidProvision(Response.Status.BAD_REQUEST), InvalidReport(Response.Status.BAD_REQUEST), InvalidReportExec(Response.Status.BAD_REQUEST), + InvalidAnyType(Response.Status.BAD_REQUEST), InvalidAnyObject(Response.Status.BAD_REQUEST), InvalidGroup(Response.Status.BAD_REQUEST), InvalidSchemaDefinition(Response.Status.BAD_REQUEST), @@ -49,7 +50,7 @@ public enum ClientExceptionType { InvalidPlainSchema(Response.Status.BAD_REQUEST), InvalidDerSchema(Response.Status.BAD_REQUEST), InvalidVirSchema(Response.Status.BAD_REQUEST), - InvalidSchemaMapping(Response.Status.BAD_REQUEST), + InvalidMapping(Response.Status.BAD_REQUEST), InvalidRealm(Response.Status.BAD_REQUEST), InvalidUser(Response.Status.BAD_REQUEST), InvalidExternalResource(Response.Status.BAD_REQUEST), @@ -65,6 +66,7 @@ public enum ClientExceptionType { GroupOwnership(Response.Status.BAD_REQUEST), Scheduling(Response.Status.BAD_REQUEST), Unauthorized(Response.Status.UNAUTHORIZED), + UnallowedSchemas(Response.Status.BAD_REQUEST), Unknown(Response.Status.BAD_REQUEST), Workflow(Response.Status.BAD_REQUEST); http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java ---------------------------------------------------------------------- diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java b/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java index 81caa77..6ffe318 100644 --- a/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java +++ b/common/lib/src/main/java/org/apache/syncope/common/lib/types/Entitlement.java @@ -36,6 +36,26 @@ public final class Entitlement { public static final String REALM_DELETE = "REALM_DELETE"; + public static final String ANYTYPECLASS_LIST = "ANYTYPECLASS_LIST"; + + public static final String ANYTYPECLASS_CREATE = "ANYTYPECLASS_CREATE"; + + public static final String ANYTYPECLASS_READ = "ANYTYPECLASS_READ"; + + public static final String ANYTYPECLASS_UPDATE = "ANYTYPECLASS_UPDATE"; + + public static final String ANYTYPECLASS_DELETE = "ANYTYPECLASS_DELETE"; + + public static final String ANYTYPE_LIST = "ANYTYPE_LIST"; + + public static final String ANYTYPE_CREATE = "ANYTYPE_CREATE"; + + public static final String ANYTYPE_READ = "ANYTYPE_READ"; + + public static final String ANYTYPE_UPDATE = "ANYTYPE_UPDATE"; + + public static final String ANYTYPE_DELETE = "ANYTYPE_DELETE"; + public static final String ROLE_LIST = "ROLE_LIST"; public static final String ROLE_CREATE = "ROLE_CREATE"; http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeClassService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeClassService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeClassService.java new file mode 100644 index 0000000..21831cf --- /dev/null +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeClassService.java @@ -0,0 +1,97 @@ +/* + * 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.common.rest.api.service; + +import java.util.List; +import javax.validation.constraints.NotNull; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.apache.cxf.jaxrs.model.wadl.Description; +import org.apache.cxf.jaxrs.model.wadl.Descriptions; +import org.apache.cxf.jaxrs.model.wadl.DocTarget; +import org.apache.syncope.common.lib.to.AnyTypeClassTO; + +/** + * REST operations for any type classes. + */ +@Path("anyTypeClassClasses") +public interface AnyTypeClassService extends JAXRSService { + + /** + * Returns a list of all anyTypeClasss. + * + * @return list of all anyTypeClasss. + */ + @GET + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + List list(); + + /** + * Returns anyTypeClass with matching key. + * + * @param key anyTypeClass key to be read + * @return anyTypeClass with matching key + */ + @GET + @Path("{key}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + AnyTypeClassTO read(@NotNull @PathParam("key") String key); + + /** + * Creates a new anyTypeClass. + * + * @param anyTypeClassTO anyTypeClass to be created + * @return Response object featuring Location header of created anyTypeClass + */ + @Descriptions({ + @Description(target = DocTarget.RESPONSE, + value = "Featuring Location header of created anyTypeClass") + }) + @POST + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + Response create(@NotNull AnyTypeClassTO anyTypeClassTO); + + /** + * Updates the anyTypeClass matching the provided key. + * + * @param key anyTypeClass key to be updated + * @param anyTypeClassTO anyTypeClass to be stored + */ + @PUT + @Path("{key}") + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + void update(@NotNull @PathParam("key") String key, @NotNull AnyTypeClassTO anyTypeClassTO); + + /** + * Deletes the anyTypeClass matching the provided key. + * + * @param key anyTypeClass key to be deleted + */ + @DELETE + @Path("{key}") + void delete(@NotNull @PathParam("key") String key); +} http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeService.java new file mode 100644 index 0000000..ddedd25 --- /dev/null +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/AnyTypeService.java @@ -0,0 +1,97 @@ +/* + * 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.common.rest.api.service; + +import java.util.List; +import javax.validation.constraints.NotNull; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.apache.cxf.jaxrs.model.wadl.Description; +import org.apache.cxf.jaxrs.model.wadl.Descriptions; +import org.apache.cxf.jaxrs.model.wadl.DocTarget; +import org.apache.syncope.common.lib.to.AnyTypeTO; + +/** + * REST operations for any types. + */ +@Path("anyTypes") +public interface AnyTypeService extends JAXRSService { + + /** + * Returns a list of all anyTypes. + * + * @return list of all anyTypes. + */ + @GET + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + List list(); + + /** + * Returns anyType with matching key. + * + * @param key anyType key to be read + * @return anyType with matching key + */ + @GET + @Path("{key}") + @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + AnyTypeTO read(@NotNull @PathParam("key") String key); + + /** + * Creates a new anyType. + * + * @param anyTypeTO anyType to be created + * @return Response object featuring Location header of created anyType + */ + @Descriptions({ + @Description(target = DocTarget.RESPONSE, + value = "Featuring Location header of created anyType") + }) + @POST + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + Response create(@NotNull AnyTypeTO anyTypeTO); + + /** + * Updates the anyType matching the provided key. + * + * @param key anyType key to be updated + * @param anyTypeTO anyType to be stored + */ + @PUT + @Path("{key}") + @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) + void update(@NotNull @PathParam("key") String key, @NotNull AnyTypeTO anyTypeTO); + + /** + * Deletes the anyType matching the provided key. + * + * @param key anyType key to be deleted + */ + @DELETE + @Path("{key}") + void delete(@NotNull @PathParam("key") String key); +} http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java index 172af5f..881e1bc 100644 --- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/RoleService.java @@ -51,15 +51,15 @@ public interface RoleService extends JAXRSService { List list(); /** - * Returns role with matching id. + * Returns role with matching key. * - * @param roleKey role id to be read - * @return role with matching id + * @param key role key to be read + * @return role with matching key */ @GET - @Path("{roleKey}") + @Path("{key}") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - RoleTO read(@NotNull @PathParam("roleKey") Long roleKey); + RoleTO read(@NotNull @PathParam("key") Long key); /** * Creates a new role. @@ -76,22 +76,22 @@ public interface RoleService extends JAXRSService { Response create(@NotNull RoleTO roleTO); /** - * Updates the role matching the provided id. + * Updates the role matching the provided key. * - * @param roleKey role id to be updated + * @param key role key to be updated * @param roleTO role to be stored */ @PUT - @Path("{roleKey}") + @Path("{key}") @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) - void update(@NotNull @PathParam("roleKey") Long roleKey, @NotNull RoleTO roleTO); + void update(@NotNull @PathParam("key") Long key, @NotNull RoleTO roleTO); /** - * Deletes the role matching the provided id. + * Deletes the role matching the provided key. * - * @param roleKey role id to be deleted + * @param key role key to be deleted */ @DELETE - @Path("{roleKey}") - void delete(@NotNull @PathParam("roleKey") Long roleKey); + @Path("{key}") + void delete(@NotNull @PathParam("key") Long key); } http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java index 4ffb3f6..352e310 100644 --- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/SchemaService.java @@ -39,7 +39,7 @@ import org.apache.syncope.common.lib.types.SchemaType; /** * REST operations for attribute schemas. */ -@Path("schemas/{kind}/{type}") +@Path("schemas/{type}") public interface SchemaService extends JAXRSService { /** http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java index 9e280a5..8f9363cb 100644 --- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/UserService.java @@ -81,7 +81,7 @@ public interface UserService extends JAXRSService { }) @OPTIONS @Path("{username}/userKey") - Response getUserId(@NotNull @PathParam("username") String username); + Response getUserKey(@NotNull @PathParam("username") String username); /** * Reads the user matching the provided userKey. http://git-wip-us.apache.org/repos/asf/syncope/blob/dd88efbd/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java ---------------------------------------------------------------------- diff --git a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java index fc48429..68858c7 100644 --- a/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java +++ b/common/rest-api/src/main/java/org/apache/syncope/common/rest/api/service/WorkflowService.java @@ -33,7 +33,7 @@ import org.apache.syncope.common.rest.api.RESTHeaders; /** * REST operations for workflow definition management. */ -@Path("workflows/{kind}") +@Path("workflows/{anyTypeKind}") public interface WorkflowService extends JAXRSService { /**