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 2017/06/27 15:16:36 UTC

[2/2] syncope git commit: [SYNCOPE-1131] Missing resource removal before delete (for realms)

[SYNCOPE-1131] Missing resource removal before delete (for realms)


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/cfb6c638
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/cfb6c638
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/cfb6c638

Branch: refs/heads/master
Commit: cfb6c638d570536233743cca16a5498dcceea6ce
Parents: c12106d
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Jun 27 17:16:19 2017 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Jun 27 17:16:27 2017 +0200

----------------------------------------------------------------------
 .../syncope/core/persistence/api/dao/RealmDAO.java  |  3 +++
 .../persistence/jpa/dao/JPAExternalResourceDAO.java | 16 ++++++++++++++++
 .../core/persistence/jpa/dao/JPARealmDAO.java       | 10 ++++++++++
 3 files changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/cfb6c638/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
index 42bd7b9..5cefafb 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/RealmDAO.java
@@ -22,6 +22,7 @@ import java.util.List;
 import java.util.regex.Pattern;
 import org.apache.syncope.core.persistence.api.entity.Policy;
 import org.apache.syncope.core.persistence.api.entity.Realm;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 
 public interface RealmDAO extends DAO<Realm> {
 
@@ -33,6 +34,8 @@ public interface RealmDAO extends DAO<Realm> {
 
     Realm findByFullPath(String fullPath);
 
+    List<Realm> findByResource(ExternalResource resource);
+
     <T extends Policy> List<Realm> findByPolicy(T policy);
 
     List<Realm> findAncestors(Realm realm);

http://git-wip-us.apache.org/repos/asf/syncope/blob/cfb6c638/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 222e645..03a0fe5 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
@@ -29,6 +29,7 @@ import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
 import org.apache.syncope.core.persistence.api.dao.NotFoundException;
 import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
 import org.apache.syncope.core.persistence.api.dao.GroupDAO;
+import org.apache.syncope.core.persistence.api.dao.RealmDAO;
 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.VirSchemaDAO;
@@ -37,6 +38,7 @@ import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
 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;
+import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.VirSchema;
 import org.apache.syncope.core.persistence.api.entity.anyobject.AnyObject;
 import org.apache.syncope.core.persistence.api.entity.group.Group;
@@ -72,6 +74,8 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
 
     private VirSchemaDAO virSchemaDAO;
 
+    private RealmDAO realmDAO;
+
     private TaskDAO taskDAO() {
         synchronized (this) {
             if (taskDAO == null) {
@@ -126,6 +130,15 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
         return virSchemaDAO;
     }
 
+    private RealmDAO realmDAO() {
+        synchronized (this) {
+            if (realmDAO == null) {
+                realmDAO = ApplicationContextProvider.getApplicationContext().getBean(RealmDAO.class);
+            }
+        }
+        return realmDAO;
+    }
+
     @Override
     public int count() {
         Query query = entityManager().createQuery(
@@ -244,6 +257,9 @@ public class JPAExternalResourceDAO extends AbstractDAO<ExternalResource> implem
         taskDAO().deleteAll(resource, TaskType.PULL);
         taskDAO().deleteAll(resource, TaskType.PUSH);
 
+        for (Realm realm : realmDAO().findByResource(resource)) {
+            realm.getResources().remove(resource);
+        }
         for (AnyObject anyObject : anyObjectDAO().findByResource(resource)) {
             anyObject.getResources().remove(resource);
         }

http://git-wip-us.apache.org/repos/asf/syncope/blob/cfb6c638/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
----------------------------------------------------------------------
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
index a1e4179..87cd26f 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPARealmDAO.java
@@ -36,6 +36,7 @@ import org.apache.syncope.core.persistence.api.entity.Realm;
 import org.apache.syncope.core.persistence.api.entity.Role;
 import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
 import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
 import org.apache.syncope.core.persistence.jpa.entity.JPARealm;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Repository;
@@ -117,6 +118,15 @@ public class JPARealmDAO extends AbstractDAO<Realm> implements RealmDAO {
     }
 
     @Override
+    public List<Realm> findByResource(final ExternalResource resource) {
+        TypedQuery<Realm> query = entityManager().createQuery("SELECT e FROM " + JPARealm.class.getSimpleName() + " e "
+                + "WHERE :resource MEMBER OF e.resources", Realm.class);
+        query.setParameter("resource", resource);
+
+        return query.getResultList();
+    }
+
+    @Override
     public <T extends Policy> List<Realm> findByPolicy(final T policy) {
         if (PullPolicy.class.isAssignableFrom(policy.getClass())) {
             return Collections.<Realm>emptyList();