This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_1_X by this push:
new 36bc6f0 [SYNCOPE-1519]: use hasAttrs instead of findAttrs in
SchemaDataBinderImpl.java (#142)
36bc6f0 is described below
commit 36bc6f0eb0b2ff17b1258693b95a0e351009d9e8
Author: DmitriyBrashevets <[email protected]>
AuthorDate: Fri Nov 29 10:17:05 2019 +0300
[SYNCOPE-1519]: use hasAttrs instead of findAttrs in
SchemaDataBinderImpl.java (#142)
---
.../core/persistence/api/dao/PlainSchemaDAO.java | 2 ++
.../persistence/jpa/dao/JPAJSONPlainSchemaDAO.java | 6 +++++
.../persistence/jpa/dao/JPAPlainSchemaDAO.java | 29 ++++++++++++++++++++++
.../java/data/SchemaDataBinderImpl.java | 2 +-
4 files changed, 38 insertions(+), 1 deletion(-)
diff --git
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainSchemaDAO.java
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainSchemaDAO.java
index 7f066ac..1554876 100644
---
a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainSchemaDAO.java
+++
b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PlainSchemaDAO.java
@@ -27,5 +27,7 @@ public interface PlainSchemaDAO extends
SchemaDAO<PlainSchema> {
<T extends PlainAttr<?>> List<T> findAttrs(PlainSchema schema, Class<T>
reference);
+ <T extends PlainAttr<?>> boolean hasAttrs(PlainSchema schema, Class<T>
reference);
+
List<PlainSchema> findByValidator(Implementation validator);
}
diff --git
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
index 63349ba..0ed8b8b 100644
---
a/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
+++
b/core/persistence-jpa-json/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAJSONPlainSchemaDAO.java
@@ -32,6 +32,12 @@ public class JPAJSONPlainSchemaDAO extends JPAPlainSchemaDAO
{
}
@Override
+ public <T extends PlainAttr<?>> boolean hasAttrs(final PlainSchema schema,
final Class<T> plainAttrTable) {
+ // not possible
+ return false;
+ }
+
+ @Override
protected void deleteAttrs(final PlainSchema schema) {
// nothing to do
}
diff --git
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
index 46df742..aebab3d 100644
---
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
+++
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPlainSchemaDAO.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.jpa.dao;
import java.util.Collection;
import java.util.List;
+import javax.persistence.Query;
import javax.persistence.TypedQuery;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
@@ -32,6 +33,9 @@ import
org.apache.syncope.core.persistence.api.entity.Implementation;
import org.apache.syncope.core.persistence.api.entity.PlainAttr;
import org.apache.syncope.core.persistence.api.entity.PlainSchema;
import org.apache.syncope.core.persistence.jpa.entity.JPAPlainSchema;
+import org.apache.syncope.core.persistence.jpa.entity.anyobject.JPAAPlainAttr;
+import org.apache.syncope.core.persistence.jpa.entity.group.JPAGPlainAttr;
+import org.apache.syncope.core.persistence.jpa.entity.user.JPAUPlainAttr;
import org.springframework.beans.factory.annotation.Autowired;
public class JPAPlainSchemaDAO extends AbstractDAO<PlainSchema> implements
PlainSchemaDAO {
@@ -102,6 +106,18 @@ public class JPAPlainSchemaDAO extends
AbstractDAO<PlainSchema> implements Plain
}
@Override
+ public <T extends PlainAttr<?>> boolean hasAttrs(final PlainSchema schema,
final Class<T> reference) {
+ String plainAttrTable = getPlainAttrTable(reference);
+ Query query = entityManager()
+ .createNativeQuery("SELECT COUNT(" + plainAttrTable + ".id)
FROM " + JPAPlainSchema.TABLE
+ + " JOIN " + plainAttrTable + " ON " +
JPAPlainSchema.TABLE + ".id = " + plainAttrTable
+ + ".schema_id WHERE " + JPAPlainSchema.TABLE + ".id =
?1");
+ query.setParameter(1, schema.getKey());
+
+ return (long) query.getSingleResult() > 0;
+ }
+
+ @Override
public PlainSchema save(final PlainSchema schema) {
return entityManager().merge(schema);
}
@@ -135,4 +151,17 @@ public class JPAPlainSchemaDAO extends
AbstractDAO<PlainSchema> implements Plain
entityManager().remove(schema);
}
+
+ private <T extends PlainAttr<?>> String getPlainAttrTable(final Class<T>
plainAttrClass) {
+ if (plainAttrClass.equals(JPAGPlainAttr.class)) {
+ return JPAGPlainAttr.TABLE;
+ }
+ if (plainAttrClass.equals(JPAAPlainAttr.class)) {
+ return JPAAPlainAttr.TABLE;
+ }
+ if (plainAttrClass.equals(JPAUPlainAttr.class)) {
+ return JPAUPlainAttr.TABLE;
+ }
+ return JPAUPlainAttr.TABLE;
+ }
}
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 623c3df..fa08a25 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
@@ -177,7 +177,7 @@ public class SchemaDataBinderImpl implements
SchemaDataBinder {
boolean hasAttrs = false;
for (AnyTypeKind anyTypeKind : AnyTypeKind.values()) {
AnyUtils anyUtils = anyUtilsFactory.getInstance(anyTypeKind);
- hasAttrs |= plainSchemaDAO.findAttrs(schema,
anyUtils.plainAttrClass()).isEmpty();
+ hasAttrs |= plainSchemaDAO.hasAttrs(schema,
anyUtils.plainAttrClass());
}
if (hasAttrs) {