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 2019/11/29 07:50:36 UTC
[syncope] 03/03: [SYNCOPE-1519]: use hasAttrs instead of findAttrs
in SchemaDataBinderImpl.java (#142)
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 5df443c0be57273ad2b3d34e1df9f1f26c59b7ea
Author: DmitriyBrashevets <47...@users.noreply.github.com>
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 cea2564..44aea82 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
@@ -31,6 +31,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 81dee85..50f6f4e 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;
import org.springframework.context.annotation.Lazy;
@@ -104,6 +108,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 db4156b..38350c4 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) {