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) {

Reply via email to