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:40 UTC
[1/5] syncope git commit: Reverting changes for SYNCOPE-755 as
SYNCOPE-754 has proven to be invalid
Repository: syncope
Updated Branches:
refs/heads/master 8b5bfca8e -> 95709c9bd
Reverting changes for SYNCOPE-755 as SYNCOPE-754 has proven to be invalid
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/e684e61d
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/e684e61d
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/e684e61d
Branch: refs/heads/master
Commit: e684e61d6b9ef7a8be5971b23d043c6deec885d6
Parents: 537da29
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jan 22 16:43:59 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jan 22 16:44:04 2016 +0100
----------------------------------------------------------------------
.../console/panels/AnyTypeDetailsPanel.java | 18 ++--------
.../syncope/common/lib/to/AnyTypeClassTO.java | 9 +++++
.../common/lib/types/ClientExceptionType.java | 1 +
.../persistence/api/entity/AnyTypeClass.java | 2 ++
.../core/persistence/jpa/dao/JPAAnyTypeDAO.java | 9 +++--
.../core/persistence/jpa/entity/JPAAnyType.java | 4 +--
.../persistence/jpa/entity/JPAAnyTypeClass.java | 10 ++++++
.../persistence/jpa/outer/AnyTypeClassTest.java | 1 -
.../core/persistence/jpa/outer/AnyTypeTest.java | 36 +++++++++++++++-----
.../java/data/AnyTypeClassDataBinderImpl.java | 28 +++++++++++++++
.../java/data/AnyTypeDataBinderImpl.java | 3 +-
.../fit/core/reference/AnyTypeITCase.java | 33 ++++++++++++++++++
12 files changed, 120 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
----------------------------------------------------------------------
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
index 8f99675..c83da38 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyTypeDetailsPanel.java
@@ -23,15 +23,13 @@ import java.util.Arrays;
import java.util.List;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
-import org.apache.syncope.client.console.SyncopeConsoleSession;
+import org.apache.syncope.client.console.rest.AnyTypeClassRestClient;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxDropDownChoicePanel;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxPalettePanel;
import org.apache.syncope.client.console.wicket.markup.html.form.AjaxTextFieldPanel;
import org.apache.syncope.common.lib.to.AnyTypeClassTO;
import org.apache.syncope.common.lib.to.AnyTypeTO;
import org.apache.syncope.common.lib.types.AnyTypeKind;
-import org.apache.syncope.common.rest.api.service.AnyTypeClassService;
-import org.apache.syncope.common.rest.api.service.AnyTypeService;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.panel.Panel;
@@ -43,11 +41,8 @@ public class AnyTypeDetailsPanel extends Panel {
private static final long serialVersionUID = 8131650329622035501L;
- private final AnyTypeTO anyTypeTO;
-
public AnyTypeDetailsPanel(final String id, final AnyTypeTO anyTypeTO) {
super(id);
- this.anyTypeTO = anyTypeTO;
final WebMarkupContainer container = new WebMarkupContainer("container");
container.setOutputMarkupId(true);
@@ -79,21 +74,12 @@ public class AnyTypeDetailsPanel extends Panel {
}
private List<String> getAvailableAnyTypeClasses() {
- final List<String> availableAnyTypeClasses = CollectionUtils.collect(
- SyncopeConsoleSession.get().getService(AnyTypeClassService.class).list(),
- new Transformer<AnyTypeClassTO, String>() {
+ return CollectionUtils.collect(new AnyTypeClassRestClient().list(), new Transformer<AnyTypeClassTO, String>() {
@Override
public String transform(final AnyTypeClassTO input) {
return input.getKey();
}
}, new ArrayList<String>());
-
- for (AnyTypeTO itemTO : SyncopeConsoleSession.get().getService(AnyTypeService.class).list()) {
- if (anyTypeTO.getKey() == null || !anyTypeTO.getKey().equals(itemTO.getKey())) {
- availableAnyTypeClasses.removeAll(itemTO.getClasses());
- }
- }
- return availableAnyTypeClasses;
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/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
index 508d2cb..8e515a8 100644
--- 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
@@ -36,6 +36,8 @@ public class AnyTypeClassTO extends AbstractBaseBean {
private String key;
+ private final List<String> types = new ArrayList<>();
+
private final List<String> plainSchemas = new ArrayList<>();
private final List<String> derSchemas = new ArrayList<>();
@@ -51,6 +53,13 @@ public class AnyTypeClassTO extends AbstractBaseBean {
this.key = key;
}
+ @XmlElementWrapper(name = "types")
+ @XmlElement(name = "type")
+ @JsonProperty("types")
+ public List<String> getTypes() {
+ return types;
+ }
+
@XmlElementWrapper(name = "plainSchemas")
@XmlElement(name = "schema")
@JsonProperty("plainSchemas")
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/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 dfc5fe2..d72d3d2 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
@@ -43,6 +43,7 @@ public enum ClientExceptionType {
InvalidRelationship(Response.Status.BAD_REQUEST),
InvalidRelationshipType(Response.Status.BAD_REQUEST),
InvalidAnyType(Response.Status.BAD_REQUEST),
+ InvalidAnyTypeClass(Response.Status.BAD_REQUEST),
InvalidAnyObject(Response.Status.BAD_REQUEST),
InvalidGroup(Response.Status.BAD_REQUEST),
InvalidSchemaDefinition(Response.Status.BAD_REQUEST),
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
index fdd00bb..e1e5411 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/AnyTypeClass.java
@@ -24,6 +24,8 @@ public interface AnyTypeClass extends Entity<String> {
void setKey(String key);
+ List<? extends AnyType> getTypes();
+
boolean add(PlainSchema schema);
boolean remove(PlainSchema schema);
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
index c4837ae..a980209 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeDAO.java
@@ -49,12 +49,11 @@ public class JPAAnyTypeDAO extends AbstractDAO<AnyType, String> implements AnyTy
return find(AnyTypeKind.GROUP.name());
}
+ @Override
public List<AnyType> findByTypeClass(final AnyTypeClass anyTypeClass) {
- StringBuilder queryString = new StringBuilder("SELECT e FROM ").
- append(JPAAnyType.class.getSimpleName()).
- append(" e WHERE :anyTypeClass MEMBER OF e.classes");
-
- TypedQuery<AnyType> query = entityManager().createQuery(queryString.toString(), AnyType.class);
+ TypedQuery<AnyType> query = entityManager().createQuery(
+ "SELECT e FROM " + JPAAnyType.class.getSimpleName() + " e WHERE :anyTypeClass MEMBER OF e.classes",
+ AnyType.class);
query.setParameter("anyTypeClass", anyTypeClass);
return query.getResultList();
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
index d50cdba..8f99efc 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyType.java
@@ -55,9 +55,9 @@ public class JPAAnyType extends AbstractEntity<String> implements AnyType {
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(joinColumns =
- @JoinColumn(name = "anyType_name"),
+ @JoinColumn(name = "anyType_name", referencedColumnName = "name"),
inverseJoinColumns =
- @JoinColumn(name = "anyTypeClass_name"))
+ @JoinColumn(name = "anyTypeClass_name", referencedColumnName = "name"))
private List<JPAAnyTypeClass> classes = new ArrayList<>();
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
index 6fba644..6a5e03e 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAAnyTypeClass.java
@@ -24,8 +24,10 @@ import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
+import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
+import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.DerSchema;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
@@ -43,6 +45,9 @@ public class JPAAnyTypeClass extends AbstractEntity<String> implements AnyTypeCl
@Id
private String name;
+ @ManyToMany(fetch = FetchType.EAGER, mappedBy = "classes")
+ private List<JPAAnyType> types = new ArrayList<>();
+
@OneToMany(fetch = FetchType.EAGER, mappedBy = "anyTypeClass")
private List<JPAPlainSchema> plainSchemas = new ArrayList<>();
@@ -63,6 +68,11 @@ public class JPAAnyTypeClass extends AbstractEntity<String> implements AnyTypeCl
}
@Override
+ public List<? extends AnyType> getTypes() {
+ return types;
+ }
+
+ @Override
public boolean add(final PlainSchema schema) {
checkType(schema, JPAPlainSchema.class);
return this.plainSchemas.add((JPAPlainSchema) schema);
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
index cef688b..c120757 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeClassTest.java
@@ -20,7 +20,6 @@ package org.apache.syncope.core.persistence.jpa.outer;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-
import static org.junit.Assert.assertTrue;
import org.apache.syncope.common.lib.types.AttrSchemaType;
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
index 0f25f20..d86b4b9 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/outer/AnyTypeTest.java
@@ -19,6 +19,7 @@
package org.apache.syncope.core.persistence.jpa.outer;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -41,21 +42,38 @@ public class AnyTypeTest extends AbstractTest {
private AnyTypeClassDAO anyTypeClassDAO;
@Test
- public void delete() {
- AnyType userType = anyTypeDAO.findUser();
- assertNotNull(userType);
-
+ public void manyToMany() {
AnyTypeClass other = anyTypeClassDAO.find("other");
assertNotNull(other);
- assertTrue(userType.getClasses().contains(other));
- int before = userType.getClasses().size();
+
+ AnyType user = anyTypeDAO.findUser();
+ assertTrue(user.getClasses().contains(other));
+
+ AnyType group = anyTypeDAO.findGroup();
+ assertFalse(group.getClasses().contains(other));
+
+ group.add(other);
+ anyTypeDAO.save(group);
+
+ anyTypeDAO.flush();
+
+ user = anyTypeDAO.findUser();
+ assertTrue(user.getClasses().contains(other));
+ int userClassesBefore = user.getClasses().size();
+
+ group = anyTypeDAO.findGroup();
+ assertTrue(group.getClasses().contains(other));
+ int groupClassesBefore = group.getClasses().size();
anyTypeClassDAO.delete("other");
anyTypeDAO.flush();
- userType = anyTypeDAO.findUser();
- assertNotNull(userType);
- assertEquals(before, userType.getClasses().size() + 1);
+ user = anyTypeDAO.findUser();
+ assertEquals(userClassesBefore, user.getClasses().size() + 1);
+
+ group = anyTypeDAO.findGroup();
+ assertEquals(groupClassesBefore, group.getClasses().size() + 1);
}
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java
index 047633d..b5bc11a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeClassDataBinderImpl.java
@@ -19,10 +19,16 @@
package org.apache.syncope.core.provisioning.java.data;
import java.util.Collections;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.Transformer;
+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.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.DerSchema;
@@ -49,6 +55,9 @@ public class AnyTypeClassDataBinderImpl implements AnyTypeClassDataBinder {
private VirSchemaDAO virSchemaDAO;
@Autowired
+ private AnyTypeDAO anyTypeDAO;
+
+ @Autowired
private EntityFactory entityFactory;
@Override
@@ -64,6 +73,20 @@ public class AnyTypeClassDataBinderImpl implements AnyTypeClassDataBinder {
anyTypeClass.setKey(anyTypeClassTO.getKey());
}
+ if (!CollectionUtils.disjunction(
+ CollectionUtils.collect(anyTypeClass.getTypes(), new Transformer<AnyType, String>() {
+
+ @Override
+ public String transform(final AnyType anyType) {
+ return anyType.getKey();
+ }
+ }), anyTypeClassTO.getTypes()).isEmpty()) {
+
+ SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidAnyTypeClass);
+ sce.getElements().add("Cannot update types from classes, do the other way round");
+ throw sce;
+ }
+
for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClasses(Collections.singletonList(anyTypeClass))) {
schema.setAnyTypeClass(null);
}
@@ -115,6 +138,11 @@ public class AnyTypeClassDataBinderImpl implements AnyTypeClassDataBinder {
AnyTypeClassTO anyTypeClassTO = new AnyTypeClassTO();
anyTypeClassTO.setKey(anyTypeClass.getKey());
+
+ for (AnyType anyType : anyTypeDAO.findByTypeClass(anyTypeClass)) {
+ anyTypeClassTO.getTypes().add(anyType.getKey());
+ }
+
for (PlainSchema schema : anyTypeClass.getPlainSchemas()) {
anyTypeClassTO.getPlainSchemas().add(schema.getKey());
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeDataBinderImpl.java
index 0e85d3a..f74efbc 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyTypeDataBinderImpl.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.provisioning.java.data;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.AnyTypeTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
import org.apache.syncope.core.persistence.api.entity.EntityFactory;
@@ -59,7 +60,7 @@ public class AnyTypeDataBinderImpl implements AnyTypeDataBinder {
}
if (anyType.getKind() != anyTypeTO.getKind()) {
SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidAnyType);
- sce.getElements().add("AnyTypeKind cannot be changed");
+ sce.getElements().add(AnyTypeKind.class.getSimpleName() + " cannot be changed");
throw sce;
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/e684e61d/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java
index 58b1004..b82aabd 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyTypeITCase.java
@@ -165,4 +165,37 @@ public class AnyTypeITCase extends AbstractITCase {
assertNotNull(other);
assertFalse(other.getClasses().contains(newClass.getKey()));
}
+
+ @Test
+ public void issueSYNCOPE754() {
+ AnyTypeClassTO other = anyTypeClassService.read("other");
+ assertNotNull(other);
+
+ AnyTypeTO group = anyTypeService.read(AnyTypeKind.GROUP.name());
+ try {
+ assertFalse(group.getClasses().contains("other"));
+ group.getClasses().add("other");
+
+ anyTypeService.update(group);
+
+ group = anyTypeService.read(AnyTypeKind.GROUP.name());
+ assertTrue(group.getClasses().contains("other"));
+
+ other = anyTypeClassService.read("other");
+ assertEquals(2, other.getTypes().size());
+ assertTrue(other.getTypes().contains(AnyTypeKind.USER.name()));
+ assertTrue(other.getTypes().contains(AnyTypeKind.GROUP.name()));
+
+ other.getTypes().remove(AnyTypeKind.GROUP.name());
+ try {
+ anyTypeClassService.update(other);
+ fail();
+ } catch (SyncopeClientException e) {
+ assertEquals(ClientExceptionType.InvalidAnyTypeClass, e.getType());
+ }
+ } finally {
+ group.getClasses().remove("other");
+ anyTypeService.update(group);
+ }
+ }
}
[4/5] syncope git commit: [SYNCOPE-756] Fix
Posted by il...@apache.org.
[SYNCOPE-756] Fix
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/02abafa8
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/02abafa8
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/02abafa8
Branch: refs/heads/master
Commit: 02abafa83422c5b657129dd587610556a0d8623a
Parents: e684e61
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jan 22 17:16:30 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jan 22 17:16:30 2016 +0100
----------------------------------------------------------------------
.../java/data/AnyObjectDataBinderImpl.java | 97 ++++++++++++--------
.../fit/core/reference/AnyObjectITCase.java | 15 +++
2 files changed, 75 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/02abafa8/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
index 19684b2..fbd090c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/AnyObjectDataBinderImpl.java
@@ -26,6 +26,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.Transformer;
+import org.apache.commons.lang3.StringUtils;
import org.apache.syncope.common.lib.SyncopeClientCompositeException;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.patch.AnyObjectPatch;
@@ -152,28 +153,39 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
searchDAO.search(SearchCond.getLeafCond(assignableCond), AnyTypeKind.ANY_OBJECT);
for (RelationshipTO relationshipTO : anyObjectTO.getRelationships()) {
- AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey());
- if (otherEnd == null) {
- LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey());
- } else if (assignableAnyObjects.contains(otherEnd)) {
- RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType());
- if (relationshipType == null) {
- LOG.debug("Ignoring invalid relationship type {}", relationshipTO.getType());
+ if (StringUtils.isBlank(relationshipTO.getRightType())
+ || AnyTypeKind.USER.name().equals(relationshipTO.getRightType())
+ || AnyTypeKind.GROUP.name().equals(relationshipTO.getRightType())) {
+
+ SyncopeClientException invalidAnyType =
+ SyncopeClientException.build(ClientExceptionType.InvalidAnyType);
+ invalidAnyType.getElements().add(AnyType.class.getSimpleName()
+ + " not allowed for relationship: " + relationshipTO.getRightType());
+ scce.addException(invalidAnyType);
+ } else {
+ AnyObject otherEnd = anyObjectDAO.find(relationshipTO.getRightKey());
+ if (otherEnd == null) {
+ LOG.debug("Ignoring invalid anyObject " + relationshipTO.getRightKey());
+ } else if (assignableAnyObjects.contains(otherEnd)) {
+ RelationshipType relationshipType = relationshipTypeDAO.find(relationshipTO.getType());
+ if (relationshipType == null) {
+ LOG.debug("Ignoring invalid relationship type {}", relationshipTO.getType());
+ } else {
+ ARelationship relationship = entityFactory.newEntity(ARelationship.class);
+ relationship.setType(relationshipType);
+ relationship.setRightEnd(anyObject);
+ relationship.setLeftEnd(anyObject);
+
+ anyObject.add(relationship);
+ }
} else {
- ARelationship relationship = entityFactory.newEntity(ARelationship.class);
- relationship.setType(relationshipType);
- relationship.setRightEnd(anyObject);
- relationship.setLeftEnd(anyObject);
+ LOG.error("{} cannot be assigned to {}", otherEnd, anyObject);
- anyObject.add(relationship);
+ SyncopeClientException unassignabled =
+ SyncopeClientException.build(ClientExceptionType.InvalidRelationship);
+ unassignabled.getElements().add("Cannot be assigned: " + otherEnd);
+ scce.addException(unassignabled);
}
- } else {
- LOG.error("{} cannot be assigned to {}", otherEnd, anyObject);
-
- SyncopeClientException unassignabled =
- SyncopeClientException.build(ClientExceptionType.InvalidRelationship);
- unassignabled.getElements().add("Cannot be assigned: " + otherEnd);
- scce.addException(unassignabled);
}
}
@@ -249,25 +261,36 @@ public class AnyObjectDataBinderImpl extends AbstractAnyDataBinder implements An
}
if (patch.getOperation() == PatchOperation.ADD_REPLACE) {
- AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey());
- if (otherEnd == null) {
- LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey());
- } else if (assignableAnyObjects.contains(otherEnd)) {
- relationship = entityFactory.newEntity(ARelationship.class);
- relationship.setType(relationshipType);
- relationship.setRightEnd(otherEnd);
- relationship.setLeftEnd(anyObject);
-
- anyObject.add(relationship);
-
- toBeProvisioned.addAll(otherEnd.getResourceNames());
+ if (StringUtils.isBlank(patch.getRelationshipTO().getRightType())
+ || AnyTypeKind.USER.name().equals(patch.getRelationshipTO().getRightType())
+ || AnyTypeKind.GROUP.name().equals(patch.getRelationshipTO().getRightType())) {
+
+ SyncopeClientException invalidAnyType =
+ SyncopeClientException.build(ClientExceptionType.InvalidAnyType);
+ invalidAnyType.getElements().add(AnyType.class.getSimpleName()
+ + " not allowed for relationship: " + patch.getRelationshipTO().getRightType());
+ scce.addException(invalidAnyType);
} else {
- LOG.error("{} cannot be assigned to {}", otherEnd, anyObject);
-
- SyncopeClientException unassignabled =
- SyncopeClientException.build(ClientExceptionType.InvalidRelationship);
- unassignabled.getElements().add("Cannot be assigned: " + otherEnd);
- scce.addException(unassignabled);
+ AnyObject otherEnd = anyObjectDAO.find(patch.getRelationshipTO().getRightKey());
+ if (otherEnd == null) {
+ LOG.debug("Ignoring invalid any object {}", patch.getRelationshipTO().getRightKey());
+ } else if (assignableAnyObjects.contains(otherEnd)) {
+ relationship = entityFactory.newEntity(ARelationship.class);
+ relationship.setType(relationshipType);
+ relationship.setRightEnd(otherEnd);
+ relationship.setLeftEnd(anyObject);
+
+ anyObject.add(relationship);
+
+ toBeProvisioned.addAll(otherEnd.getResourceNames());
+ } else {
+ LOG.error("{} cannot be assigned to {}", otherEnd, anyObject);
+
+ SyncopeClientException unassignabled =
+ SyncopeClientException.build(ClientExceptionType.InvalidRelationship);
+ unassignabled.getElements().add("Cannot be assigned: " + otherEnd);
+ scce.addException(unassignabled);
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/02abafa8/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java
index 192fa76..6cbcf39 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/AnyObjectITCase.java
@@ -34,6 +34,8 @@ import org.apache.syncope.common.lib.to.AnyObjectTO;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.to.MembershipTO;
import org.apache.syncope.common.lib.to.PagedResult;
+import org.apache.syncope.common.lib.to.RelationshipTO;
+import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.SchemaType;
import org.apache.syncope.common.rest.api.beans.AnyListQuery;
@@ -191,4 +193,17 @@ public class AnyObjectITCase extends AbstractITCase {
assertEquals(ClientExceptionType.NotFound, e.getType());
}
}
+
+ @Test
+ public void issueSYNCOPE756() {
+ AnyObjectTO anyObjectTO = getSampleTO("issueSYNCOPE756");
+ anyObjectTO.getRelationships().add(new RelationshipTO.Builder().right(AnyTypeKind.USER.name(), 1).build());
+
+ try {
+ createAnyObject(anyObjectTO).getAny();
+ fail();
+ } catch (SyncopeClientException e) {
+ assertEquals(ClientExceptionType.InvalidAnyType, e.getType());
+ }
+ }
}
[5/5] syncope git commit: [SYNCOPE-759] Fix
Posted by il...@apache.org.
[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);
[2/5] syncope git commit: Aligning property version label
Posted by il...@apache.org.
Aligning property version label
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/537da29e
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/537da29e
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/537da29e
Branch: refs/heads/master
Commit: 537da29eb8b71536f063f8c72c2e49d92a0a7b5c
Parents: 29726bb
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jan 22 16:43:29 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jan 22 16:44:04 2016 +0100
----------------------------------------------------------------------
pom.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/537da29e/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 279071b..b4e7f37 100644
--- a/pom.xml
+++ b/pom.xml
@@ -404,7 +404,7 @@ under the License.
<angular-ui-bootstrap.version>1.0.3</angular-ui-bootstrap.version>
<angular-ui-select.version>0.13.1</angular-ui-select.version>
<angular-sanitize.version>1.4.8</angular-sanitize.version>
- <angular-treasure-overlay-spinner>1.1.0</angular-treasure-overlay-spinner>
+ <angular-treasure-overlay-spinner.version>1.1.0</angular-treasure-overlay-spinner.version>
<ng-password-strength>0.2.1</ng-password-strength>
<lodash>4.0.0</lodash>
<kendo-ui-core.version>2014.2.716</kendo-ui-core.version>
@@ -1082,7 +1082,7 @@ under the License.
<dependency>
<groupId>org.webjars.bower</groupId>
<artifactId>angular-treasure-overlay-spinner</artifactId>
- <version>${angular-treasure-overlay-spinner}</version>
+ <version>${angular-treasure-overlay-spinner.version}</version>
</dependency>
<dependency>
<groupId>org.webjars.bower</groupId>
[3/5] syncope git commit: Fixing configuration set for mandatory
schema
Posted by il...@apache.org.
Fixing configuration set for mandatory schema
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/29726bb6
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/29726bb6
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/29726bb6
Branch: refs/heads/master
Commit: 29726bb6b8fc7d4e2564599e0f2d6ef2d99356ab
Parents: 8b5bfca
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jan 22 16:42:27 2016 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jan 22 16:44:04 2016 +0100
----------------------------------------------------------------------
.../syncope/core/logic/ConfigurationLogic.java | 2 +-
.../api/data/ConfigurationDataBinder.java | 3 +-
.../java/data/ConfigurationDataBinderImpl.java | 29 ++++++++++++++++++--
.../fit/core/reference/ConfigurationITCase.java | 27 ++++++++++++++++--
4 files changed, 52 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
index 4a7d4ca..5f2ef24 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/ConfigurationLogic.java
@@ -74,7 +74,7 @@ public class ConfigurationLogic extends AbstractTransactionalLogic<AttrTO> {
@PreAuthorize("hasRole('" + StandardEntitlement.CONFIGURATION_LIST + "')")
public List<AttrTO> list() {
- return binder.getConfTO(confDAO.get());
+ return binder.getConfTO();
}
@PreAuthorize("isAuthenticated()")
http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
index 020a6ae..e62407f 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ConfigurationDataBinder.java
@@ -21,13 +21,12 @@ package org.apache.syncope.core.provisioning.api.data;
import java.util.List;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
-import org.apache.syncope.core.persistence.api.entity.conf.Conf;
public interface ConfigurationDataBinder {
AttrTO getAttrTO(CPlainAttr attr);
- List<AttrTO> getConfTO(Conf conf);
+ List<AttrTO> getConfTO();
CPlainAttr getAttribute(AttrTO attributeTO);
http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
index c0f0485..00935f7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/ConfigurationDataBinderImpl.java
@@ -22,10 +22,14 @@ import java.util.ArrayList;
import org.apache.syncope.core.provisioning.api.data.ConfigurationDataBinder;
import java.util.Collections;
import java.util.List;
+import org.apache.commons.jexl3.JexlContext;
+import org.apache.commons.jexl3.MapContext;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.AttrTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
+import org.apache.syncope.core.misc.jexl.JexlUtils;
import org.apache.syncope.core.persistence.api.attrvalue.validation.InvalidPlainAttrValueException;
+import org.apache.syncope.core.persistence.api.dao.ConfDAO;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.entity.PlainAttrUniqueValue;
import org.apache.syncope.core.persistence.api.entity.PlainAttrValue;
@@ -33,16 +37,19 @@ import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttr;
import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttrUniqueValue;
import org.apache.syncope.core.persistence.api.entity.conf.CPlainAttrValue;
-import org.apache.syncope.core.persistence.api.entity.conf.Conf;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implements ConfigurationDataBinder {
+ @Autowired
+ private ConfDAO confDAO;
+
@Override
- public List<AttrTO> getConfTO(final Conf conf) {
+ public List<AttrTO> getConfTO() {
final List<AttrTO> attrTOs = new ArrayList<>();
- for (final CPlainAttr plainAttr : conf.getPlainAttrs()) {
+ for (final CPlainAttr plainAttr : confDAO.get().getPlainAttrs()) {
final AttrTO attrTO = new AttrTO();
attrTO.setSchema(plainAttr.getSchema().getKey());
attrTO.getValues().addAll(plainAttr.getValuesAsStrings());
@@ -73,6 +80,22 @@ public class ConfigurationDataBinderImpl extends AbstractAnyDataBinder implement
? Collections.<String>emptyList()
: Collections.singletonList(values.iterator().next()));
+ if (valuesProvided.isEmpty()) {
+ JexlContext jexlContext = new MapContext();
+ JexlUtils.addPlainAttrsToContext(confDAO.get().getPlainAttrs(), jexlContext);
+
+ if (!schema.isReadonly()
+ && Boolean.parseBoolean(JexlUtils.evaluate(schema.getMandatoryCondition(), jexlContext))) {
+
+ LOG.error("Mandatory schema " + schema.getKey() + " not provided with values");
+
+ SyncopeClientException reqValMissing = SyncopeClientException.build(
+ ClientExceptionType.RequiredValuesMissing);
+ reqValMissing.getElements().add(schema.getKey());
+ throw reqValMissing;
+ }
+ }
+
for (String value : valuesProvided) {
if (value == null || value.isEmpty()) {
LOG.debug("Null value for {}, ignoring", schema.getKey());
http://git-wip-us.apache.org/repos/asf/syncope/blob/29726bb6/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
----------------------------------------------------------------------
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
index 6bc000e..1fb3221 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/reference/ConfigurationITCase.java
@@ -55,10 +55,31 @@ public class ConfigurationITCase extends AbstractITCase {
testKey.setType(AttrSchemaType.String);
createSchema(SchemaType.PLAIN, testKey);
- AttrTO conf = new AttrTO();
- conf.setSchema(testKey.getKey());
- conf.getValues().add("testValue");
+ AttrTO conf = new AttrTO.Builder().schema(testKey.getKey()).value("testValue").build();
+
+ configurationService.set(conf);
+
+ AttrTO actual = configurationService.get(conf.getSchema());
+ assertEquals(actual, conf);
+ }
+ @Test
+ public void createRequired() {
+ PlainSchemaTO testKey = new PlainSchemaTO();
+ testKey.setKey("testKey" + getUUIDString());
+ testKey.setType(AttrSchemaType.String);
+ testKey.setMandatoryCondition("true");
+ createSchema(SchemaType.PLAIN, testKey);
+
+ AttrTO conf = new AttrTO.Builder().schema(testKey.getKey()).build();
+ try {
+ configurationService.set(conf);
+ fail();
+ } catch (SyncopeClientException e) {
+ assertEquals(ClientExceptionType.RequiredValuesMissing, e.getType());
+ }
+
+ conf.getValues().add("testValue");
configurationService.set(conf);
AttrTO actual = configurationService.get(conf.getSchema());