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 2016/01/22 17:44:44 UTC

[5/5] syncope git commit: [SYNCOPE-759] Fix

[SYNCOPE-759] Fix


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

Branch: refs/heads/master
Commit: 95709c9bd23e28e0564f93d663de313c4c35caf1
Parents: 02abafa
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jan 22 17:44:25 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jan 22 17:44:25 2016 +0100

----------------------------------------------------------------------
 .../syncope/core/logic/AnyTypeClassLogic.java       | 11 +++++++++++
 .../org/apache/syncope/core/logic/AnyTypeLogic.java | 10 ++++++++++
 .../persistence/api/dao/DuplicateException.java     |  2 +-
 .../fit/core/reference/AnyTypeClassITCase.java      | 16 ++++++++++++++++
 .../fit/core/reference/ExceptionMapperITCase.java   |  2 +-
 5 files changed, 39 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/95709c9b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
index daaaf56..180035f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeClassLogic.java
@@ -25,10 +25,13 @@ import org.apache.commons.collections4.CollectionUtils;
 import org.apache.commons.collections4.Transformer;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.syncope.common.lib.SyncopeClientException;
 import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.types.ClientExceptionType;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
+import org.apache.syncope.core.persistence.api.dao.DuplicateException;
 import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
 import org.apache.syncope.core.provisioning.api.data.AnyTypeClassDataBinder;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -69,6 +72,14 @@ public class AnyTypeClassLogic extends AbstractTransactionalLogic<AnyTypeClassTO
 
     @PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPECLASS_CREATE + "')")
     public AnyTypeClassTO create(final AnyTypeClassTO anyTypeClassTO) {
+        if (StringUtils.isBlank(anyTypeClassTO.getKey())) {
+            SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
+            sce.getElements().add(AnyTypeClass.class.getSimpleName() + " name");
+            throw sce;
+        }
+        if (anyTypeClassDAO.find(anyTypeClassTO.getKey()) != null) {
+            throw new DuplicateException(anyTypeClassTO.getKey());
+        }
         return binder.getAnyTypeClassTO(anyTypeClassDAO.save(binder.create(anyTypeClassTO)));
     }
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/95709c9b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
index 3116ae8..697fb07 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
@@ -32,6 +32,7 @@ import org.apache.syncope.common.lib.types.StandardEntitlement;
 import org.apache.syncope.core.misc.EntitlementsHolder;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
+import org.apache.syncope.core.persistence.api.dao.DuplicateException;
 import org.apache.syncope.core.persistence.api.entity.AnyType;
 import org.apache.syncope.core.provisioning.api.data.AnyTypeDataBinder;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -72,6 +73,15 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
 
     @PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPE_CREATE + "')")
     public AnyTypeTO create(final AnyTypeTO anyTypeTO) {
+        if (StringUtils.isBlank(anyTypeTO.getKey())) {
+            SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
+            sce.getElements().add(AnyType.class.getSimpleName() + " name");
+            throw sce;
+        }
+        if (anyTypeDAO.find(anyTypeTO.getKey()) != null) {
+            throw new DuplicateException(anyTypeTO.getKey());
+        }
+
         AnyTypeTO result = binder.getAnyTypeTO(anyTypeDAO.save(binder.create(anyTypeTO)));
         EntitlementsHolder.getInstance().addFor(result.getKey());
         return result;

http://git-wip-us.apache.org/repos/asf/syncope/blob/95709c9b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DuplicateException.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DuplicateException.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DuplicateException.java
index 5cd1da0..40c09f1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DuplicateException.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/DuplicateException.java
@@ -19,7 +19,7 @@
 package org.apache.syncope.core.persistence.api.dao;
 
 /**
- * Thrown when something is not found.
+ * Thrown when someone is attempting to create an entity with the same key of another existing entity.
  */
 public class DuplicateException extends RuntimeException {
 

http://git-wip-us.apache.org/repos/asf/syncope/blob/95709c9b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java
index 6e88c71..7bc9349 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeClassITCase.java
@@ -134,4 +134,20 @@ public class AnyTypeClassITCase extends AbstractITCase {
         assertNotNull(newClass);
         assertFalse(newClass.getPlainSchemas().contains(newSchema.getKey()));
     }
+
+    @Test
+    public void issueSYNCOPE759() {
+        AnyTypeClassTO minimalGroup = anyTypeClassService.read("minimal group");
+        assertNotNull(minimalGroup);
+
+        AnyTypeClassTO newAnyTypeClass = new AnyTypeClassTO();
+        newAnyTypeClass.setKey(minimalGroup.getKey());
+
+        try {
+            anyTypeClassService.create(newAnyTypeClass);
+            fail();
+        } catch (SyncopeClientException e) {
+            assertEquals(ClientExceptionType.EntityExists, e.getType());
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/syncope/blob/95709c9b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ExceptionMapperITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ExceptionMapperITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ExceptionMapperITCase.java
index da0295c..2679196 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ExceptionMapperITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ExceptionMapperITCase.java
@@ -67,7 +67,7 @@ public class ExceptionMapperITCase extends AbstractITCase {
         createSchema(SchemaType.PLAIN, schemaTO);
 
         AnyTypeClassTO typeClass = new AnyTypeClassTO();
-        typeClass.setKey("camelAttribute");
+        typeClass.setKey("camelAttribute" + getUUIDString());
         typeClass.getPlainSchemas().add(schemaTO.getKey());
         anyTypeClassService.create(typeClass);