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 2015/07/21 11:36:08 UTC
[1/3] syncope git commit: Cleanup
Repository: syncope
Updated Branches:
refs/heads/SYNCOPE-652 93b2e3847 -> a6cf6a68f
Cleanup
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/ef4069a9
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/ef4069a9
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/ef4069a9
Branch: refs/heads/SYNCOPE-652
Commit: ef4069a9adc0c47d1f29da6b1a700b59488761e2
Parents: 93b2e38
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jul 17 12:07:31 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jul 17 12:07:31 2015 +0200
----------------------------------------------------------------------
.../org/apache/syncope/core/misc/security/AuthContextUtils.java | 1 -
.../org/apache/syncope/core/persistence/jpa/inner/UserTest.java | 4 ----
2 files changed, 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/ef4069a9/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
----------------------------------------------------------------------
diff --git a/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java b/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
index 980201a..932627d 100644
--- a/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
+++ b/core/misc/src/main/java/org/apache/syncope/core/misc/security/AuthContextUtils.java
@@ -69,7 +69,6 @@ public final class AuthContextUtils {
public static String getDomain() {
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
-
String domainKey = auth != null && auth.getDetails() instanceof SyncopeAuthenticationDetails
? SyncopeAuthenticationDetails.class.cast(auth.getDetails()).getDomain()
: null;
http://git-wip-us.apache.org/repos/asf/syncope/blob/ef4069a9/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
index 1077239..a709638 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/UserTest.java
@@ -70,10 +70,6 @@ public class UserTest extends AbstractTest {
List<User> list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 1, 2);
assertEquals("did not get expected number of users", 2, list.size());
- System.out.println("SSSSSSSSSSSSSSSSSS\n" + userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, -1, -1));
- System.out.println("SSSSSSSSSSSSSSSSSS\n" + userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 1,2));
- System.out.println("SSSSSSSSSSSSSSSSSS\n" + userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 2,2));
-
// get second page
list = userDAO.findAll(SyncopeConstants.FULL_ADMIN_REALMS, 2, 2);
assertEquals("did not get expected number of users", 2, list.size());
[3/3] syncope git commit: [SYNCOPE-652] Cleaning up OpenJPA slices
Posted by il...@apache.org.
[SYNCOPE-652] Cleaning up OpenJPA slices
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/a6cf6a68
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/a6cf6a68
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/a6cf6a68
Branch: refs/heads/SYNCOPE-652
Commit: a6cf6a68f443fde895282071c3f3ff275264a8e9
Parents: 0379272
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Jul 21 11:35:52 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Jul 21 11:35:52 2015 +0200
----------------------------------------------------------------------
.../syncope/common/lib/to/AbstractSchemaTO.java | 11 ++
.../rest/api/service/AnyTypeClassService.java | 2 +-
.../apache/syncope/core/logic/SchemaLogic.java | 33 ++--
core/persistence-jpa/pom.xml | 4 -
.../core/persistence/jpa/dao/AbstractDAO.java | 38 +----
.../persistence/jpa/dao/JPAAnyTypeClassDAO.java | 14 +-
.../jpa/dao/JPAExternalResourceDAO.java | 4 -
.../persistence/jpa/entity/JPADerSchema.java | 3 +-
.../persistence/jpa/entity/JPAPlainSchema.java | 3 +-
.../persistence/jpa/entity/JPAVirSchema.java | 3 +-
.../jpa/slice/DomainDistributionPolicy.java | 36 -----
.../jpa/slice/DomainFinderTargetPolicy.java | 38 -----
.../jpa/slice/DomainQueryTargetPolicy.java | 41 -----
.../src/main/resources/persistence.properties | 3 +-
.../resources/persistenceContextEMFactory.xml | 31 +---
.../core/persistence/jpa/inner/TaskTest.java | 27 ++++
.../persistence/jpa/outer/AnyTypeClassTest.java | 36 +++++
.../src/test/resources/persistence.properties | 3 +-
.../provisioning/api/data/SchemaDataBinder.java | 18 +--
.../java/data/AnyTypeClassDataBinderImpl.java | 27 +++-
.../java/data/SchemaDataBinderImpl.java | 155 ++++++++++++++-----
.../fit/core/reference/AnyTypeClassITCase.java | 24 ++-
pom.xml | 13 +-
23 files changed, 292 insertions(+), 275 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
----------------------------------------------------------------------
diff --git a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
index afd6e6b..f426f8c 100644
--- a/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
+++ b/common/lib/src/main/java/org/apache/syncope/common/lib/to/AbstractSchemaTO.java
@@ -35,6 +35,8 @@ public abstract class AbstractSchemaTO extends AbstractBaseBean {
private String key;
+ private String anyTypeClass;
+
public String getKey() {
return key;
}
@@ -43,4 +45,13 @@ public abstract class AbstractSchemaTO extends AbstractBaseBean {
public void setKey(final String key) {
this.key = key;
}
+
+ public String getAnyTypeClass() {
+ return anyTypeClass;
+ }
+
+ public void setAnyTypeClass(final String anyTypeClass) {
+ this.anyTypeClass = anyTypeClass;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/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
index 18bf1c4..43c3d23 100644
--- 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
@@ -38,7 +38,7 @@ import org.apache.syncope.common.lib.to.AnyTypeClassTO;
/**
* REST operations for any type classes.
*/
-@Path("anyTypeClassClasses")
+@Path("anyTypeClasses")
public interface AnyTypeClassService extends JAXRSService {
/**
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
index befa8bf..3da4a76 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/SchemaLogic.java
@@ -39,7 +39,6 @@ import org.apache.syncope.core.persistence.api.dao.NotFoundException;
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.DerSchema;
-import org.apache.syncope.core.persistence.api.entity.EntityFactory;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
import org.apache.syncope.core.provisioning.api.data.SchemaDataBinder;
@@ -62,9 +61,6 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> {
@Autowired
private SchemaDataBinder binder;
- @Autowired
- private EntityFactory entityFactory;
-
private boolean doesSchemaExist(final SchemaType schemaType, final String name) {
boolean found;
@@ -104,27 +100,19 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> {
T created;
switch (schemaType) {
case VIRTUAL:
- VirSchema virSchema = entityFactory.newEntity(VirSchema.class);
- binder.create((VirSchemaTO) schemaTO, virSchema);
- virSchema = virSchemaDAO.save(virSchema);
+ VirSchema virSchema = virSchemaDAO.save(binder.create((VirSchemaTO) schemaTO));
created = (T) binder.getVirSchemaTO(virSchema);
break;
case DERIVED:
- DerSchema derSchema = entityFactory.newEntity(DerSchema.class);
- binder.create((DerSchemaTO) schemaTO, derSchema);
- derSchema = derSchemaDAO.save(derSchema);
-
+ DerSchema derSchema = derSchemaDAO.save(binder.create((DerSchemaTO) schemaTO));
created = (T) binder.getDerSchemaTO(derSchema);
break;
case PLAIN:
default:
- PlainSchema normalSchema = entityFactory.newEntity(PlainSchema.class);
- binder.create((PlainSchemaTO) schemaTO, normalSchema);
- normalSchema = plainSchemaDAO.save(normalSchema);
-
- created = (T) binder.getPlainSchemaTO(normalSchema);
+ PlainSchema plainSchema = plainSchemaDAO.save(binder.create((PlainSchemaTO) schemaTO));
+ created = (T) binder.getPlainSchemaTO(plainSchema);
}
return created;
}
@@ -241,8 +229,7 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> {
throw new NotFoundException("Virtual Schema '" + schemaTO.getKey() + "'");
}
- binder.update((VirSchemaTO) schemaTO, virSchema);
- virSchemaDAO.save(virSchema);
+ virSchemaDAO.save(binder.update((VirSchemaTO) schemaTO, virSchema));
break;
case DERIVED:
@@ -251,19 +238,17 @@ public class SchemaLogic extends AbstractTransactionalLogic<AbstractSchemaTO> {
throw new NotFoundException("Derived schema '" + schemaTO.getKey() + "'");
}
- binder.update((DerSchemaTO) schemaTO, derSchema);
- derSchemaDAO.save(derSchema);
+ derSchemaDAO.save(binder.update((DerSchemaTO) schemaTO, derSchema));
break;
case PLAIN:
default:
- PlainSchema schema = plainSchemaDAO.find(schemaTO.getKey());
- if (schema == null) {
+ PlainSchema plainSchema = plainSchemaDAO.find(schemaTO.getKey());
+ if (plainSchema == null) {
throw new NotFoundException("Schema '" + schemaTO.getKey() + "'");
}
- binder.update((PlainSchemaTO) schemaTO, schema);
- plainSchemaDAO.save(schema);
+ plainSchemaDAO.save(binder.update((PlainSchemaTO) schemaTO, plainSchema));
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/pom.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/pom.xml b/core/persistence-jpa/pom.xml
index 0ab9e82..f60f3da 100644
--- a/core/persistence-jpa/pom.xml
+++ b/core/persistence-jpa/pom.xml
@@ -55,10 +55,6 @@ under the License.
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-persistence-jdbc</artifactId>
</dependency>
- <dependency>
- <groupId>org.apache.openjpa</groupId>
- <artifactId>openjpa-slice</artifactId>
- </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
index c2d5ae6..f4916c7 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractDAO.java
@@ -19,13 +19,10 @@
package org.apache.syncope.core.persistence.jpa.dao;
import java.util.List;
-import javax.persistence.CacheRetrieveMode;
-import javax.persistence.CacheStoreMode;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import org.apache.commons.lang3.StringUtils;
-import org.apache.openjpa.slice.SlicePersistence;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.core.persistence.api.dao.DAO;
import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
@@ -41,38 +38,10 @@ public abstract class AbstractDAO<E extends Entity<KEY>, KEY> implements DAO<E,
protected static final Logger LOG = LoggerFactory.getLogger(DAO.class);
- private static final String CACHE_STORE_MODE = "javax.persistence.cache.storeMode";
-
- private static final String CACHE_RETRIEVE_MODE = "javax.persistence.cache.retrieveMode";
-
@Value("#{entityManager}")
@PersistenceContext(type = PersistenceContextType.TRANSACTION)
protected EntityManager entityManager;
- protected CacheRetrieveMode getCacheRetrieveMode() {
- return entityManager.getProperties().containsKey(CACHE_RETRIEVE_MODE)
- ? (CacheRetrieveMode) entityManager.getProperties().get(CACHE_RETRIEVE_MODE)
- : CacheRetrieveMode.BYPASS;
- }
-
- protected void setCacheRetrieveMode(final CacheRetrieveMode retrieveMode) {
- if (retrieveMode != null) {
- entityManager.getProperties().put(CACHE_RETRIEVE_MODE, retrieveMode);
- }
- }
-
- protected CacheStoreMode getCacheStoreMode() {
- return entityManager.getProperties().containsKey(CACHE_STORE_MODE)
- ? (CacheStoreMode) entityManager.getProperties().get(CACHE_STORE_MODE)
- : CacheStoreMode.BYPASS;
- }
-
- protected void setCacheStoreMode(final CacheStoreMode storeMode) {
- if (storeMode != null) {
- entityManager.getProperties().put(CACHE_STORE_MODE, storeMode);
- }
- }
-
protected String toOrderByStatement(final Class<? extends Entity<KEY>> beanClass, final String prefix,
final List<OrderByClause> orderByClauses) {
@@ -96,12 +65,7 @@ public abstract class AbstractDAO<E extends Entity<KEY>, KEY> implements DAO<E,
@Override
public String getDomain(final E entity) {
- try {
- return SlicePersistence.getSlice(entity);
- } catch (Exception e) {
- LOG.debug("While fetching slice for {}", entity, e);
- return SyncopeConstants.MASTER_DOMAIN;
- }
+ return SyncopeConstants.MASTER_DOMAIN;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
index 3339c9a..58b547d 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnyTypeClassDAO.java
@@ -63,7 +63,19 @@ public class JPAAnyTypeClassDAO extends AbstractDAO<AnyTypeClass, String> implem
@Override
public AnyTypeClass save(final AnyTypeClass anyTypeClass) {
- return entityManager.merge(anyTypeClass);
+ AnyTypeClass merge = entityManager.merge(anyTypeClass);
+
+ for (PlainSchema schema : merge.getPlainSchemas()) {
+ schema.setAnyTypeClass(merge);
+ }
+ for (DerSchema schema : merge.getDerSchemas()) {
+ schema.setAnyTypeClass(merge);
+ }
+ for (VirSchema schema : merge.getVirSchemas()) {
+ schema.setAnyTypeClass(merge);
+ }
+
+ return merge;
}
@Override
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
index 35a5b00..17553a2 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAExternalResourceDAO.java
@@ -33,7 +33,6 @@ import org.apache.syncope.core.persistence.api.dao.GroupDAO;
import org.apache.syncope.core.persistence.api.dao.TaskDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
import org.apache.syncope.core.persistence.api.entity.AccountPolicy;
-import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.resource.MappingItem;
import org.apache.syncope.core.persistence.api.entity.Policy;
@@ -70,9 +69,6 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource, String
@Autowired
private ConnectorRegistry connRegistry;
- @Autowired
- private AnyUtilsFactory anyUtilsFactory;
-
@Override
public ExternalResource find(final String name) {
return entityManager.find(JPAExternalResource.class, name);
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
index 62fc5d6..944afc4 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPADerSchema.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.persistence.jpa.entity;
import javax.persistence.Cacheable;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@@ -42,7 +43,7 @@ public class JPADerSchema extends AbstractEntity<String> implements DerSchema {
@Id
private String name;
- @OneToOne
+ @OneToOne(fetch = FetchType.EAGER)
private JPAAnyTypeClass anyTypeClass;
@Column(nullable = false)
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
index d4935e9..68eeacf 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAPlainSchema.java
@@ -24,6 +24,7 @@ import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.OneToOne;
@@ -54,7 +55,7 @@ public class JPAPlainSchema extends AbstractEntity<String> implements PlainSchem
@Id
private String name;
- @OneToOne
+ @OneToOne(fetch = FetchType.EAGER)
private JPAAnyTypeClass anyTypeClass;
@Column(nullable = false)
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
index d268aff..6c1dd73 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAVirSchema.java
@@ -21,6 +21,7 @@ package org.apache.syncope.core.persistence.jpa.entity;
import javax.persistence.Basic;
import javax.persistence.Cacheable;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@@ -44,7 +45,7 @@ public class JPAVirSchema extends AbstractEntity<String> implements VirSchema {
@Id
private String name;
- @OneToOne
+ @OneToOne(fetch = FetchType.EAGER)
private JPAAnyTypeClass anyTypeClass;
@Basic
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainDistributionPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainDistributionPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainDistributionPolicy.java
deleted file mode 100644
index 2e61b06..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainDistributionPolicy.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * 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.core.persistence.jpa.slice;
-
-import java.util.List;
-import org.apache.openjpa.slice.DistributionPolicy;
-import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.syncope.core.misc.security.AuthContextUtils;
-import org.apache.syncope.core.persistence.api.entity.Domain;
-
-public class DomainDistributionPolicy implements DistributionPolicy {
-
- @Override
- public String distribute(final Object pc, final List<String> slices, final Object context) {
- return (pc instanceof Domain)
- ? SyncopeConstants.MASTER_DOMAIN
- : AuthContextUtils.getDomain();
- }
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainFinderTargetPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainFinderTargetPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainFinderTargetPolicy.java
deleted file mode 100644
index c6cad6e..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainFinderTargetPolicy.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.core.persistence.jpa.slice;
-
-import java.util.List;
-import org.apache.openjpa.slice.FinderTargetPolicy;
-import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.syncope.core.misc.security.AuthContextUtils;
-import org.apache.syncope.core.persistence.jpa.entity.JPADomain;
-
-public class DomainFinderTargetPolicy implements FinderTargetPolicy {
-
- @Override
- public String[] getTargets(final Class<?> cls, final Object oid, final List<String> slices, final Object context) {
- return new String[] {
- JPADomain.class.equals(cls)
- ? SyncopeConstants.MASTER_DOMAIN
- : AuthContextUtils.getDomain()
- };
- }
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainQueryTargetPolicy.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainQueryTargetPolicy.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainQueryTargetPolicy.java
deleted file mode 100644
index 193ef2b..0000000
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/slice/DomainQueryTargetPolicy.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.core.persistence.jpa.slice;
-
-import java.util.List;
-import java.util.Map;
-import org.apache.openjpa.slice.QueryTargetPolicy;
-import org.apache.syncope.common.lib.SyncopeConstants;
-import org.apache.syncope.core.misc.security.AuthContextUtils;
-import org.apache.syncope.core.persistence.jpa.entity.JPADomain;
-
-public class DomainQueryTargetPolicy implements QueryTargetPolicy {
-
- @Override
- public String[] getTargets(final String query, final Map<Object, Object> params, final String language,
- final List<String> slices, final Object context) {
-
- return new String[] {
- query.contains(JPADomain.class.getSimpleName())
- ? SyncopeConstants.MASTER_DOMAIN
- : AuthContextUtils.getDomain()
- };
- }
-
-}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/resources/persistence.properties
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/persistence.properties b/core/persistence-jpa/src/main/resources/persistence.properties
index 054808d..57f1af0 100644
--- a/core/persistence-jpa/src/main/resources/persistence.properties
+++ b/core/persistence-jpa/src/main/resources/persistence.properties
@@ -26,4 +26,5 @@ jpa.orm=META-INF/spring-orm.xml
quartz.jobstore=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
quartz.sql=tables_postgres.sql
audit.sql=audit.sql
-database.schema=
\ No newline at end of file
+database.schema=
+
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/main/resources/persistenceContextEMFactory.xml
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/resources/persistenceContextEMFactory.xml b/core/persistence-jpa/src/main/resources/persistenceContextEMFactory.xml
index d3a7e45..5983ca6 100644
--- a/core/persistence-jpa/src/main/resources/persistenceContextEMFactory.xml
+++ b/core/persistence-jpa/src/main/resources/persistenceContextEMFactory.xml
@@ -21,7 +21,7 @@ under the License.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
-
+
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="packagesToScan" value="org.apache.syncope.core.persistence.jpa.entity"/>
@@ -47,43 +47,22 @@ under the License.
</property>
<property name="jpaPropertyMap">
<map>
- <entry key="openjpa.Log" value="DefaultLevel=INFO, Runtime=TRACE, Tool=TRACE, SQL=TRACE"/>
-
<!--<entry key="openjpa.Log" value="SQL=TRACE"/>
<entry key="openjpa.ConnectionFactoryProperties"
value="PrintParameters=true, PrettyPrint=true, PrettyPrintLineLength=80"/>-->
-
+
<entry key="openjpa.NontransactionalWrite" value="false"/>
<entry key="openjpa.AutoDetach" value="close, commit, nontx-read, rollback"/>
<entry key="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
<entry key="openjpa.jdbc.MappingDefaults"
value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"/>
-
+
<entry key="openjpa.DataCache" value="true"/>
- <entry key="openjpa.QueryCache" value="false"/>
- <entry key="openjpa.QueryCompilationCache" value="false"/>
+ <entry key="openjpa.QueryCache" value="true"/>
<entry key="openjpa.RemoteCommitProvider" value="sjvm"/>
-
- <entry key="openjpa.BrokerFactory" value="slice"/>
- <entry key="openjpa.BrokerImpl" value="org.apache.openjpa.slice.DistributedBrokerImpl"/>
- <entry key="openjpa.slice.Lenient" value="false"/>
-
- <entry key="openjpa.slice.DistributionPolicy"
- value="org.apache.syncope.core.persistence.jpa.slice.DomainDistributionPolicy"/>
- <entry key="openjpa.slice.QueryTargetPolicy"
- value="org.apache.syncope.core.persistence.jpa.slice.DomainQueryTargetPolicy"/>
- <entry key="openjpa.slice.FinderTargetPolicy"
- value="org.apache.syncope.core.persistence.jpa.slice.DomainFinderTargetPolicy"/>
-
- <entry key="openjpa.slice.Names" value="Master"/>
- <entry key="openjpa.slice.Master" value="Master"/>
- <entry key="openjpa.slice.Lenient" value="false"/>
-
- <entry key="openjpa.slice.Master.ConnectionFactory" value-ref="dataSource"/>
- <entry key="openjpa.slice.Master.jdbc.DBDictionary" value="${jpa.dialect}"/>
</map>
</property>
</bean>
-</beans>
+</beans>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
index 4f4b02c..a3bfedd 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/TaskTest.java
@@ -22,7 +22,9 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@@ -33,8 +35,10 @@ import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.TaskDAO;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
+import org.apache.syncope.core.persistence.api.dao.search.OrderByClause;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.task.PropagationTask;
+import org.apache.syncope.core.persistence.api.entity.task.Task;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.jpa.AbstractTest;
import org.identityconnectors.framework.common.objects.Attribute;
@@ -63,6 +67,29 @@ public class TaskTest extends AbstractTest {
}
@Test
+ public void findPaginated() {
+ List<Task> tasks = taskDAO.findAll(1, 2, Collections.<OrderByClause>emptyList(), TaskType.PROPAGATION);
+ assertNotNull(tasks);
+ assertEquals(2, tasks.size());
+
+ for (Task task : tasks) {
+ assertNotNull(task);
+ }
+
+ tasks = taskDAO.findAll(2, 2, Collections.<OrderByClause>emptyList(), TaskType.PROPAGATION);
+ assertNotNull(tasks);
+ assertEquals(2, tasks.size());
+
+ for (Task task : tasks) {
+ assertNotNull(task);
+ }
+
+ tasks = taskDAO.findAll(1000, 2, Collections.<OrderByClause>emptyList(), TaskType.PROPAGATION);
+ assertNotNull(tasks);
+ assertTrue(tasks.isEmpty());
+ }
+
+ @Test
public void findAll() {
assertEquals(5, taskDAO.findAll(TaskType.PROPAGATION).size());
assertEquals(1, taskDAO.findAll(TaskType.NOTIFICATION).size());
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/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 29b97a3..d0f0213 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
@@ -23,6 +23,8 @@ import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
+import javax.persistence.EntityManager;
+import org.apache.syncope.common.lib.types.AttrSchemaType;
import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
import org.apache.syncope.core.persistence.api.dao.PlainSchemaDAO;
import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
@@ -41,6 +43,40 @@ public class AnyTypeClassTest extends AbstractTest {
@Autowired
private AnyTypeClassDAO anyTypeClassDAO;
+ @Autowired
+ private EntityManager entityManager;
+
+ @Test
+ public void create() {
+ PlainSchema newSchema = entityFactory.newEntity(PlainSchema.class);
+ newSchema.setKey("new_plain_schema");
+ newSchema.setType(AttrSchemaType.String);
+
+ plainSchemaDAO.save(newSchema);
+
+ plainSchemaDAO.flush();
+
+ newSchema = plainSchemaDAO.find(newSchema.getKey());
+ assertNotNull(newSchema);
+
+ AnyTypeClass newClass = entityFactory.newEntity(AnyTypeClass.class);
+ newClass.setKey("new class");
+ newClass.add(newSchema);
+
+ anyTypeClassDAO.save(newClass);
+
+ anyTypeClassDAO.flush();
+
+ newClass = anyTypeClassDAO.find(newClass.getKey());
+ assertNotNull(newClass);
+ assertEquals(1, newClass.getPlainSchemas().size());
+ assertEquals(newSchema, newClass.getPlainSchemas().get(0));
+ assertEquals(newClass, newClass.getPlainSchemas().get(0).getAnyTypeClass());
+
+ newSchema = plainSchemaDAO.find(newSchema.getKey());
+ assertNotNull(newSchema.getAnyTypeClass());
+ }
+
@Test
public void delete() {
AnyTypeClass minimalUser = anyTypeClassDAO.find("minimal user");
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/persistence-jpa/src/test/resources/persistence.properties
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/test/resources/persistence.properties b/core/persistence-jpa/src/test/resources/persistence.properties
index 6993a0b..31ea1b0 100644
--- a/core/persistence-jpa/src/test/resources/persistence.properties
+++ b/core/persistence-jpa/src/test/resources/persistence.properties
@@ -27,4 +27,5 @@ quartz.jobstore=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
quartz.scheduler.idleWaitTime=5000
quartz.sql=tables_h2.sql
audit.sql=audit.sql
-database.schema=
\ No newline at end of file
+database.schema=
+
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/SchemaDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/SchemaDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/SchemaDataBinder.java
index dcb8f9f..b185ca8 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/SchemaDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/SchemaDataBinder.java
@@ -27,22 +27,22 @@ import org.apache.syncope.core.persistence.api.entity.VirSchema;
public interface SchemaDataBinder {
- <T extends PlainSchema> void create(PlainSchemaTO schemaTO, T schema);
+ PlainSchema create(PlainSchemaTO schemaTO);
- <T extends DerSchema> T create(DerSchemaTO derSchemaTO, T derSchema);
+ DerSchema create(DerSchemaTO schemaTO);
- <T extends VirSchema> T create(VirSchemaTO virSchemaTO, T virSchema);
+ VirSchema create(VirSchemaTO schemaTO);
- <T extends DerSchema> DerSchemaTO getDerSchemaTO(T derSchema);
+ DerSchemaTO getDerSchemaTO(DerSchema schema);
- <T extends PlainSchema> PlainSchemaTO getPlainSchemaTO(T schema);
+ PlainSchemaTO getPlainSchemaTO(PlainSchema schema);
- <T extends VirSchema> VirSchemaTO getVirSchemaTO(T virSchema);
+ VirSchemaTO getVirSchemaTO(VirSchema schema);
- <T extends PlainSchema> void update(PlainSchemaTO schemaTO, T schema);
+ PlainSchema update(PlainSchemaTO schemaTO, PlainSchema schema);
- <T extends DerSchema> T update(DerSchemaTO derSchemaTO, T derSchema);
+ DerSchema update(DerSchemaTO schemaTO, DerSchema derSchema);
- <T extends VirSchema> T update(VirSchemaTO virSchemaTO, T virSchema);
+ VirSchema update(VirSchemaTO schemaTO, VirSchema virSchema);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/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 5917190..8a33e12 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
@@ -63,31 +63,46 @@ public class AnyTypeClassDataBinderImpl implements AnyTypeClassDataBinder {
anyTypeClass.setKey(anyTypeClassTO.getKey());
}
+ for (PlainSchema schema : plainSchemaDAO.findByAnyTypeClass(anyTypeClass)) {
+ schema.setAnyTypeClass(null);
+ }
+
anyTypeClass.getPlainSchemas().clear();
for (String schemaName : anyTypeClassTO.getPlainSchemas()) {
PlainSchema schema = plainSchemaDAO.find(schemaName);
- if (schema == null) {
- LOG.debug("Invalid " + PlainSchema.class.getSimpleName() + "{}, ignoring...", schemaName);
+ if (schema == null || schema.getAnyTypeClass() != null) {
+ LOG.debug("Invalid or already in use" + PlainSchema.class.getSimpleName()
+ + "{}, ignoring...", schemaName);
} else {
anyTypeClass.add(schema);
}
}
+ for (DerSchema schema : derSchemaDAO.findByAnyTypeClass(anyTypeClass)) {
+ schema.setAnyTypeClass(null);
+ }
+
anyTypeClass.getDerSchemas().clear();
for (String schemaName : anyTypeClassTO.getDerSchemas()) {
DerSchema schema = derSchemaDAO.find(schemaName);
- if (schema == null) {
- LOG.debug("Invalid " + DerSchema.class.getSimpleName() + "{}, ignoring...", schemaName);
+ if (schema == null || schema.getAnyTypeClass() != null) {
+ LOG.debug("Invalid or already in use" + DerSchema.class.getSimpleName()
+ + "{}, ignoring...", schemaName);
} else {
anyTypeClass.add(schema);
}
}
+ for (VirSchema schema : virSchemaDAO.findByAnyTypeClass(anyTypeClass)) {
+ schema.setAnyTypeClass(null);
+ }
+
anyTypeClass.getVirSchemas().clear();
for (String schemaName : anyTypeClassTO.getVirSchemas()) {
VirSchema schema = virSchemaDAO.find(schemaName);
- if (schema == null) {
- LOG.debug("Invalid " + VirSchema.class.getSimpleName() + "{}, ignoring...", schemaName);
+ if (schema == null || schema.getAnyTypeClass() != null) {
+ LOG.debug("Invalid or already in use" + VirSchema.class.getSimpleName()
+ + "{}, ignoring...", schemaName);
} else {
anyTypeClass.add(schema);
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
index f20a265..0794f8c 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/SchemaDataBinderImpl.java
@@ -33,44 +33,88 @@ import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.api.entity.VirSchema;
import org.apache.syncope.core.misc.spring.BeanUtils;
import org.apache.syncope.core.misc.jexl.JexlUtils;
+import org.apache.syncope.core.persistence.api.dao.AnyTypeClassDAO;
+import org.apache.syncope.core.persistence.api.dao.DerSchemaDAO;
+import org.apache.syncope.core.persistence.api.dao.VirSchemaDAO;
+import org.apache.syncope.core.persistence.api.entity.AnyTypeClass;
import org.apache.syncope.core.persistence.api.entity.AnyUtils;
import org.apache.syncope.core.persistence.api.entity.AnyUtilsFactory;
+import org.apache.syncope.core.persistence.api.entity.EntityFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class SchemaDataBinderImpl implements SchemaDataBinder {
+ private static final Logger LOG = LoggerFactory.getLogger(SchemaDataBinder.class);
+
+ private static final String[] IGNORE_PROPERTIES = { "anyTypeClass" };
+
+ @Autowired
+ private AnyTypeClassDAO anyTypeClassDAO;
+
@Autowired
- private PlainSchemaDAO schemaDAO;
+ private PlainSchemaDAO plainSchemaDAO;
+
+ @Autowired
+ private DerSchemaDAO derSchemaDAO;
+
+ @Autowired
+ private VirSchemaDAO virSchemaDAO;
+
+ @Autowired
+ private EntityFactory entityFactory;
@Autowired
private AnyUtilsFactory anyUtilsFactory;
// --------------- PLAIN -----------------
- private <T extends PlainSchema> void fill(final T schema, final PlainSchemaTO schemaTO) {
+ private PlainSchema fill(final PlainSchema schema, final PlainSchemaTO schemaTO) {
if (!JexlUtils.isExpressionValid(schemaTO.getMandatoryCondition())) {
SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidValues);
sce.getElements().add(schemaTO.getMandatoryCondition());
throw sce;
}
- BeanUtils.copyProperties(schemaTO, schema);
+ BeanUtils.copyProperties(schemaTO, schema, IGNORE_PROPERTIES);
+
+ PlainSchema merged = plainSchemaDAO.save(schema);
+
+ if (schemaTO.getAnyTypeClass() != null
+ && (merged.getAnyTypeClass() == null
+ || !schemaTO.getAnyTypeClass().equals(merged.getAnyTypeClass().getKey()))) {
+
+ AnyTypeClass anyTypeClass = anyTypeClassDAO.find(schemaTO.getAnyTypeClass());
+ if (anyTypeClass == null) {
+ LOG.debug("Invalid " + AnyTypeClass.class.getSimpleName()
+ + "{}, ignoring...", schemaTO.getAnyTypeClass());
+ } else {
+ anyTypeClass.add(merged);
+ merged.setAnyTypeClass(anyTypeClass);
+ }
+ } else if (schemaTO.getAnyTypeClass() == null && merged.getAnyTypeClass() != null) {
+ merged.getAnyTypeClass().remove(merged);
+ merged.setAnyTypeClass(null);
+ }
+
+ return merged;
}
@Override
- public <T extends PlainSchema> void create(final PlainSchemaTO schemaTO, final T schema) {
- fill(schema, schemaTO);
+ public PlainSchema create(final PlainSchemaTO schemaTO) {
+ return fill(entityFactory.newEntity(PlainSchema.class), schemaTO);
}
@Override
- public <T extends PlainSchema> void update(final PlainSchemaTO schemaTO, final T schema) {
+ public PlainSchema update(final PlainSchemaTO schemaTO, final PlainSchema schema) {
SyncopeClientCompositeException scce = SyncopeClientException.buildComposite();
boolean hasAttrs = false;
for (AnyTypeKind anyTypeKind : AnyTypeKind.values()) {
AnyUtils anyUtils = anyUtilsFactory.getInstance(anyTypeKind);
- hasAttrs |= schemaDAO.findAttrs(schema, anyUtils.plainAttrClass()).isEmpty();
+ hasAttrs |= plainSchemaDAO.findAttrs(schema, anyUtils.plainAttrClass()).isEmpty();
}
if (hasAttrs) {
@@ -92,30 +136,31 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
throw scce;
}
- fill(schema, schemaTO);
+ return fill(schema, schemaTO);
}
@Override
- public <T extends PlainSchema> PlainSchemaTO getPlainSchemaTO(final T schema) {
+ public PlainSchemaTO getPlainSchemaTO(final PlainSchema schema) {
PlainSchemaTO schemaTO = new PlainSchemaTO();
- BeanUtils.copyProperties(schema, schemaTO);
+ BeanUtils.copyProperties(schema, schemaTO, IGNORE_PROPERTIES);
+ schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey());
return schemaTO;
}
// --------------- DERIVED -----------------
- private <T extends DerSchema> T populate(final T derSchema, final DerSchemaTO derSchemaTO) {
+ private DerSchema fill(final DerSchema schema, final DerSchemaTO schemaTO) {
SyncopeClientCompositeException scce = SyncopeClientException.buildComposite();
- if (StringUtils.isBlank(derSchemaTO.getExpression())) {
+ if (StringUtils.isBlank(schemaTO.getExpression())) {
SyncopeClientException requiredValuesMissing =
SyncopeClientException.build(ClientExceptionType.RequiredValuesMissing);
requiredValuesMissing.getElements().add("expression");
scce.addException(requiredValuesMissing);
- } else if (!JexlUtils.isExpressionValid(derSchemaTO.getExpression())) {
+ } else if (!JexlUtils.isExpressionValid(schemaTO.getExpression())) {
SyncopeClientException e = SyncopeClientException.build(ClientExceptionType.InvalidValues);
- e.getElements().add(derSchemaTO.getExpression());
+ e.getElements().add(schemaTO.getExpression());
scce.addException(e);
}
@@ -124,51 +169,91 @@ public class SchemaDataBinderImpl implements SchemaDataBinder {
throw scce;
}
- BeanUtils.copyProperties(derSchemaTO, derSchema);
+ BeanUtils.copyProperties(schemaTO, schema, IGNORE_PROPERTIES);
+
+ DerSchema merged = derSchemaDAO.save(schema);
+
+ if (schemaTO.getAnyTypeClass() != null
+ && (merged.getAnyTypeClass() == null
+ || !schemaTO.getAnyTypeClass().equals(merged.getAnyTypeClass().getKey()))) {
+
+ AnyTypeClass anyTypeClass = anyTypeClassDAO.find(schemaTO.getAnyTypeClass());
+ if (anyTypeClass == null) {
+ LOG.debug("Invalid " + AnyTypeClass.class.getSimpleName()
+ + "{}, ignoring...", schemaTO.getAnyTypeClass());
+ } else {
+ anyTypeClass.add(merged);
+ merged.setAnyTypeClass(anyTypeClass);
+ }
+ } else if (schemaTO.getAnyTypeClass() == null && merged.getAnyTypeClass() != null) {
+ merged.getAnyTypeClass().remove(merged);
+ merged.setAnyTypeClass(null);
+ }
- return derSchema;
+ return merged;
}
@Override
- public <T extends DerSchema> T create(final DerSchemaTO derSchemaTO, final T derSchema) {
- return populate(derSchema, derSchemaTO);
+ public DerSchema create(final DerSchemaTO schemaTO) {
+ return fill(entityFactory.newEntity(DerSchema.class), schemaTO);
}
@Override
- public <T extends DerSchema> T update(final DerSchemaTO derSchemaTO, final T derSchema) {
- return populate(derSchema, derSchemaTO);
+ public DerSchema update(final DerSchemaTO schemaTO, final DerSchema schema) {
+ return fill(schema, schemaTO);
}
@Override
- public <T extends DerSchema> DerSchemaTO getDerSchemaTO(final T derSchema) {
- DerSchemaTO derSchemaTO = new DerSchemaTO();
- BeanUtils.copyProperties(derSchema, derSchemaTO);
+ public DerSchemaTO getDerSchemaTO(final DerSchema schema) {
+ DerSchemaTO schemaTO = new DerSchemaTO();
+ BeanUtils.copyProperties(schema, schemaTO, IGNORE_PROPERTIES);
+ schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey());
- return derSchemaTO;
+ return schemaTO;
}
// --------------- VIRTUAL -----------------
- private <T extends VirSchema> T fill(final T virSchema, final VirSchemaTO virSchemaTO) {
- BeanUtils.copyProperties(virSchemaTO, virSchema);
+ private VirSchema fill(final VirSchema schema, final VirSchemaTO schemaTO) {
+ BeanUtils.copyProperties(schemaTO, schema, IGNORE_PROPERTIES);
+
+ VirSchema merged = virSchemaDAO.save(schema);
+
+ if (schemaTO.getAnyTypeClass() != null
+ && (merged.getAnyTypeClass() == null
+ || !schemaTO.getAnyTypeClass().equals(merged.getAnyTypeClass().getKey()))) {
+
+ AnyTypeClass anyTypeClass = anyTypeClassDAO.find(schemaTO.getAnyTypeClass());
+ if (anyTypeClass == null) {
+ LOG.debug("Invalid " + AnyTypeClass.class.getSimpleName()
+ + "{}, ignoring...", schemaTO.getAnyTypeClass());
+ } else {
+ anyTypeClass.add(merged);
+ merged.setAnyTypeClass(anyTypeClass);
+ }
+ } else if (schemaTO.getAnyTypeClass() == null && merged.getAnyTypeClass() != null) {
+ merged.getAnyTypeClass().remove(merged);
+ merged.setAnyTypeClass(null);
+ }
- return virSchema;
+ return merged;
}
@Override
- public <T extends VirSchema> T create(final VirSchemaTO virSchemaTO, final T virSchema) {
- return fill(virSchema, virSchemaTO);
+ public VirSchema create(final VirSchemaTO schemaTO) {
+ return fill(entityFactory.newEntity(VirSchema.class), schemaTO);
}
@Override
- public <T extends VirSchema> T update(final VirSchemaTO virSchemaTO, final T virSchema) {
- return fill(virSchema, virSchemaTO);
+ public VirSchema update(final VirSchemaTO schemaTO, final VirSchema schema) {
+ return fill(schema, schemaTO);
}
@Override
- public <T extends VirSchema> VirSchemaTO getVirSchemaTO(final T virSchema) {
- VirSchemaTO virSchemaTO = new VirSchemaTO();
- BeanUtils.copyProperties(virSchema, virSchemaTO);
+ public VirSchemaTO getVirSchemaTO(final VirSchema schema) {
+ VirSchemaTO schemaTO = new VirSchemaTO();
+ BeanUtils.copyProperties(schema, schemaTO, IGNORE_PROPERTIES);
+ schemaTO.setAnyTypeClass(schema.getAnyTypeClass() == null ? null : schema.getAnyTypeClass().getKey());
- return virSchemaTO;
+ return schemaTO;
}
}
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/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 557f4b3..6e88c71 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
@@ -21,6 +21,7 @@ package org.apache.syncope.fit.core.reference;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -28,6 +29,7 @@ import java.util.List;
import javax.ws.rs.core.Response;
import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.AnyTypeClassTO;
+import org.apache.syncope.common.lib.to.DerSchemaTO;
import org.apache.syncope.common.lib.to.PlainSchemaTO;
import org.apache.syncope.common.lib.types.AttrSchemaType;
import org.apache.syncope.common.lib.types.ClientExceptionType;
@@ -58,9 +60,21 @@ public class AnyTypeClassITCase extends AbstractITCase {
@Test
public void crud() {
+ // 1. create sample schemas
+ PlainSchemaTO plainSchema = new PlainSchemaTO();
+ plainSchema.setKey("new_plain_schema" + getUUIDString());
+ plainSchema.setType(AttrSchemaType.String);
+ plainSchema = createSchema(SchemaType.PLAIN, plainSchema);
+
+ DerSchemaTO derSchema = new DerSchemaTO();
+ derSchema.setKey("new_der_schema" + getUUIDString());
+ derSchema.setExpression(plainSchema.getKey() + " + '_' + derived_dx");
+ derSchema = createSchema(SchemaType.DERIVED, derSchema);
+
+ // 2. actual CRUD
AnyTypeClassTO newClass = new AnyTypeClassTO();
newClass.setKey("new class" + getUUIDString());
- newClass.getPlainSchemas().add("firstname");
+ newClass.getPlainSchemas().add(plainSchema.getKey());
Response response = anyTypeClassService.create(newClass);
assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusInfo().getStatusCode());
@@ -71,7 +85,7 @@ public class AnyTypeClassITCase extends AbstractITCase {
assertTrue(newClass.getDerSchemas().isEmpty());
assertTrue(newClass.getVirSchemas().isEmpty());
- newClass.getDerSchemas().add("cn");
+ newClass.getDerSchemas().add(derSchema.getKey());
anyTypeClassService.update(newClass);
newClass = anyTypeClassService.read(newClass.getKey());
@@ -80,6 +94,9 @@ public class AnyTypeClassITCase extends AbstractITCase {
assertFalse(newClass.getDerSchemas().isEmpty());
assertTrue(newClass.getVirSchemas().isEmpty());
+ assertEquals(newClass.getKey(), schemaService.read(SchemaType.PLAIN, plainSchema.getKey()).getAnyTypeClass());
+ assertEquals(newClass.getKey(), schemaService.read(SchemaType.DERIVED, derSchema.getKey()).getAnyTypeClass());
+
anyTypeClassService.delete(newClass.getKey());
try {
@@ -88,6 +105,9 @@ public class AnyTypeClassITCase extends AbstractITCase {
} catch (SyncopeClientException e) {
assertEquals(ClientExceptionType.NotFound, e.getType());
}
+
+ assertNull(schemaService.read(SchemaType.PLAIN, plainSchema.getKey()).getAnyTypeClass());
+ assertNull(schemaService.read(SchemaType.DERIVED, derSchema.getKey()).getAnyTypeClass());
}
@Test
http://git-wip-us.apache.org/repos/asf/syncope/blob/a6cf6a68/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 95dc8e7..f30ec4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -335,7 +335,7 @@ under the License.
<spring.version>4.1.7.RELEASE</spring.version>
<spring-security.version>4.0.1.RELEASE</spring-security.version>
- <openjpa.version>2.4.1-SNAPSHOT</openjpa.version>
+ <openjpa.version>2.4.0</openjpa.version>
<commons-dbcp.version>2.1</commons-dbcp.version>
<hibernate-validator.version>5.1.3.Final</hibernate-validator.version>
@@ -533,11 +533,6 @@ under the License.
<artifactId>openjpa-persistence-jdbc</artifactId>
<version>${openjpa.version}</version>
</dependency>
- <dependency>
- <groupId>org.apache.openjpa</groupId>
- <artifactId>openjpa-slice</artifactId>
- <version>${openjpa.version}</version>
- </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
@@ -1111,6 +1106,12 @@ under the License.
</plugin>
<plugin>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-java2wadl-plugin</artifactId>
+ <version>${cxf.version}</version>
+ </plugin>
+
+ <plugin>
<groupId>org.apache.openjpa</groupId>
<artifactId>openjpa-maven-plugin</artifactId>
<version>${openjpa.version}</version>
[2/3] syncope git commit: Fix as per CXF-6499
Posted by il...@apache.org.
Fix as per CXF-6499
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/03792725
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/03792725
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/03792725
Branch: refs/heads/SYNCOPE-652
Commit: 03792725c6caebfab70c51b56a50246e866e9b72
Parents: ef4069a
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Fri Jul 17 15:27:14 2015 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Fri Jul 17 15:27:14 2015 +0200
----------------------------------------------------------------------
core/rest-cxf/src/main/resources/restCXFContext.xml | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/03792725/core/rest-cxf/src/main/resources/restCXFContext.xml
----------------------------------------------------------------------
diff --git a/core/rest-cxf/src/main/resources/restCXFContext.xml b/core/rest-cxf/src/main/resources/restCXFContext.xml
index 5818422..b26ed2e 100644
--- a/core/rest-cxf/src/main/resources/restCXFContext.xml
+++ b/core/rest-cxf/src/main/resources/restCXFContext.xml
@@ -85,6 +85,7 @@ under the License.
<property name="useJaxbContextForQnames" value="true"/>
<property name="ignoreMessageWriters" value="true"/>
<property name="addResourceAndMethodIds" value="true"/>
+ <property name="usePathParamsToCompareOperations" value="false"/>
<property name="javaDocPath" value="/WEB-INF/lib/syncope-common-rest-api-${syncope.version}-javadoc.jar"/>
</bean>