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 2012/04/30 12:27:09 UTC

svn commit: r1332146 - in /incubator/syncope/trunk/core/src/main: java/org/apache/syncope/core/persistence/dao/ java/org/apache/syncope/core/persistence/dao/impl/ resources/

Author: ilgrosso
Date: Mon Apr 30 10:27:08 2012
New Revision: 1332146

URL: http://svn.apache.org/viewvc?rev=1332146&view=rev
Log:
[SYNCOPE-71] Added OpenJPA conf params for foreign-key constraints generation: had to review some details about DAO impl as well

Modified:
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/MembershipDAOImpl.java
    incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java
    incubator/syncope/trunk/core/src/main/resources/persistenceContextEMFactory.xml

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java?rev=1332146&r1=1332145&r2=1332146&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/RoleDAO.java Mon Apr 30 10:27:08 2012
@@ -19,7 +19,6 @@
 package org.apache.syncope.core.persistence.dao;
 
 import java.util.List;
-import java.util.Set;
 import org.apache.syncope.core.persistence.beans.Entitlement;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
 import org.apache.syncope.core.persistence.beans.membership.Membership;
@@ -38,9 +37,11 @@ public interface RoleDAO extends DAO {
 
     List<SyncopeRole> findByResource(ExternalResource resource);
 
+    List<SyncopeRole> findAncestors(SyncopeRole role);
+
     List<SyncopeRole> findChildren(Long roleId);
 
-    Set<SyncopeRole> findAncestors(SyncopeRole role);
+    List<SyncopeRole> findDescendants(SyncopeRole role);
 
     List<SyncopeRole> findAll();
 

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/MembershipDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/MembershipDAOImpl.java?rev=1332146&r1=1332145&r2=1332146&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/MembershipDAOImpl.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/MembershipDAOImpl.java Mon Apr 30 10:27:08 2012
@@ -35,6 +35,7 @@ public class MembershipDAOImpl extends A
 
     @Autowired
     private UserDAO userDAO;
+
     @Autowired
     private RoleDAO roleDAO;
 
@@ -83,10 +84,6 @@ public class MembershipDAOImpl extends A
 
         membership.getSyncopeUser().removeMembership(membership);
         userDAO.save(membership.getSyncopeUser());
-        membership.setSyncopeUser(null);
-
-        roleDAO.save(membership.getSyncopeRole());
-        membership.setSyncopeRole(null);
 
         entityManager.remove(membership);
     }

Modified: incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java?rev=1332146&r1=1332145&r2=1332146&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java (original)
+++ incubator/syncope/trunk/core/src/main/java/org/apache/syncope/core/persistence/dao/impl/RoleDAOImpl.java Mon Apr 30 10:27:08 2012
@@ -18,26 +18,29 @@
  */
 package org.apache.syncope.core.persistence.dao.impl;
 
-import java.util.HashSet;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 import javax.persistence.NoResultException;
 import javax.persistence.Query;
 import javax.persistence.TypedQuery;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
 import org.apache.syncope.core.persistence.beans.Entitlement;
 import org.apache.syncope.core.persistence.beans.ExternalResource;
 import org.apache.syncope.core.persistence.beans.membership.Membership;
 import org.apache.syncope.core.persistence.beans.role.SyncopeRole;
 import org.apache.syncope.core.persistence.dao.EntitlementDAO;
 import org.apache.syncope.core.persistence.dao.RoleDAO;
+import org.apache.syncope.core.persistence.dao.UserDAO;
 import org.apache.syncope.core.util.EntitlementUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Repository;
 
 @Repository
 public class RoleDAOImpl extends AbstractDAOImpl implements RoleDAO {
 
     @Autowired
+    private UserDAO userDAO;
+
+    @Autowired
     private EntitlementDAO entitlementDAO;
 
     @Override
@@ -100,6 +103,20 @@ public class RoleDAOImpl extends Abstrac
         return query.getResultList();
     }
 
+    private void findAncestors(final List<SyncopeRole> result, final SyncopeRole role) {
+        if (role.getParent() != null && !result.contains(role.getParent())) {
+            result.add(role.getParent());
+            findAncestors(result, role.getParent());
+        }
+    }
+
+    @Override
+    public List<SyncopeRole> findAncestors(final SyncopeRole role) {
+        List<SyncopeRole> result = new ArrayList<SyncopeRole>();
+        findAncestors(result, role);
+        return result;
+    }
+
     @Override
     public List<SyncopeRole> findChildren(final Long roleId) {
         Query query = entityManager.createQuery("SELECT r FROM SyncopeRole r WHERE " + "r.parent.id=:roleId");
@@ -107,17 +124,20 @@ public class RoleDAOImpl extends Abstrac
         return query.getResultList();
     }
 
-    private void findAncestors(final Set<SyncopeRole> result, final SyncopeRole role) {
-        if (role.getParent() != null && !result.contains(role.getParent())) {
-            result.add(role.getParent());
-            findAncestors(result, role.getParent());
+    private void findDescendants(final List<SyncopeRole> result, final SyncopeRole role) {
+        List<SyncopeRole> children = findChildren(role.getId());
+        if (children != null) {
+            for (SyncopeRole child : children) {
+                findDescendants(result, child);
+            }
         }
+        result.add(role);
     }
 
     @Override
-    public Set<SyncopeRole> findAncestors(final SyncopeRole role) {
-        Set<SyncopeRole> result = new HashSet<SyncopeRole>();
-        findAncestors(result, role);
+    public List<SyncopeRole> findDescendants(final SyncopeRole role) {
+        List<SyncopeRole> result = new ArrayList<SyncopeRole>();
+        findDescendants(result, role);
         return result;
     }
 
@@ -161,26 +181,20 @@ public class RoleDAOImpl extends Abstrac
             return;
         }
 
-        Query query = entityManager.createQuery("SELECT r FROM SyncopeRole r WHERE r.parent.id=:id");
-        query.setParameter("id", id);
-        List<SyncopeRole> childrenRoles = query.getResultList();
-        for (SyncopeRole child : childrenRoles) {
-            delete(child.getId());
-        }
-
-        for (Membership membership : findMemberships(role)) {
-            membership.setSyncopeRole(null);
-            membership.getSyncopeUser().removeMembership(membership);
-            membership.setSyncopeUser(null);
+        for (SyncopeRole roleToBeDeleted : findDescendants(role)) {
+            for (Membership membership : findMemberships(roleToBeDeleted)) {
+                membership.getSyncopeUser().removeMembership(membership);
+                userDAO.save(membership.getSyncopeUser());
 
-            entityManager.remove(membership);
-        }
+                entityManager.remove(membership);
+            }
 
-        role.getEntitlements().clear();
+            roleToBeDeleted.getEntitlements().clear();
 
-        role.setParent(null);
-        entityManager.remove(role);
+            roleToBeDeleted.setParent(null);
+            entityManager.remove(roleToBeDeleted);
 
-        entitlementDAO.delete(EntitlementUtil.getEntitlementNameFromRoleId(id));
+            entitlementDAO.delete(EntitlementUtil.getEntitlementNameFromRoleId(roleToBeDeleted.getId()));
+        }
     }
 }

Modified: incubator/syncope/trunk/core/src/main/resources/persistenceContextEMFactory.xml
URL: http://svn.apache.org/viewvc/incubator/syncope/trunk/core/src/main/resources/persistenceContextEMFactory.xml?rev=1332146&r1=1332145&r2=1332146&view=diff
==============================================================================
--- incubator/syncope/trunk/core/src/main/resources/persistenceContextEMFactory.xml (original)
+++ incubator/syncope/trunk/core/src/main/resources/persistenceContextEMFactory.xml Mon Apr 30 10:27:08 2012
@@ -24,7 +24,7 @@ under the License.
        http://www.springframework.org/schema/beans/spring-beans.xsd">
 
   <bean id="entityManagerFactory"
-          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
+        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
     <property name="persistenceUnitName" value="syncopePersistenceUnit"/>
     <property name="dataSource" ref="dataSource"/>
     <property name="jpaVendorAdapter">
@@ -36,10 +36,13 @@ under the License.
     </property>
     <property name="jpaPropertyMap">
       <map>
-                <!--<entry key="openjpa.Log" value="SQL=TRACE"/>-->
+        <!--<entry key="openjpa.Log" value="SQL=TRACE"/>-->
                 
         <entry key="openjpa.NontransactionalWrite" value="false"/>
         <entry key="openjpa.AutoDetach" value="close, commit, nontx-read, rollback"/>
+
+        <entry key="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
+        <entry key="openjpa.jdbc.MappingDefaults" value="ForeignKeyDeleteAction=restrict, JoinForeignKeyDeleteAction=restrict"/>
                 
         <entry key="openjpa.ReadLockLevel" value="none"/>
         <entry key="openjpa.WriteLockLevel" value="write"/>