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();