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"/>