Author: tolusha
Date: 2011-08-22 07:12:23 -0400 (Mon, 22 Aug 2011)
New Revision: 4784
Modified:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipHandler.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipDAOImpl.java
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java
Log:
EXOJCR-1236: MembershipHandler.linkMembership() should not allow to add membership record
which already exists
Modified:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipHandler.java
===================================================================
---
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipHandler.java 2011-08-19
12:24:53 UTC (rev 4783)
+++
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipHandler.java 2011-08-22
11:12:23 UTC (rev 4784)
@@ -46,8 +46,9 @@
public void createMembership(Membership m, boolean broadcast) throws Exception;
/**
- * Use this method to create a membership record, a relation of the user ,
- * group and membership type
+ * Use this method to create a membership record, a relation of the user,
+ * group and membership type. Doesn't throw an Exception if membership record with
the
+ * same user, group and membership type exists.
*
* @param user The user of the membership
* @param group The group of the membership
@@ -55,8 +56,7 @@
* @param broadcast Broadcast the event if the value of the broadcast is
* 'true'
* @throws Exception An exception is thrown if the method is fail to access
- * the database, membership type not existed, a membership record with the
same user,
- * group and membership type existed, or any listener fail to handle the
event.
+ * the database, membership type not existed or any listener fail to handle
the event.
*/
public void linkMembership(User user, Group group, MembershipType m, boolean
broadcast) throws Exception;
Modified:
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java
===================================================================
---
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java 2011-08-19
12:24:53 UTC (rev 4783)
+++
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipDAOImpl.java 2011-08-22
11:12:23 UTC (rev 4784)
@@ -79,16 +79,25 @@
this.listeners_ = new ListenerStack(5);
}
+ /**
+ * {@inheritDoc}
+ */
public void addMembershipEventListener(MembershipEventListener listener)
{
listeners_.add(listener);
}
+ /**
+ * {@inheritDoc}
+ */
final public Membership createMembershipInstance()
{
return new MembershipImpl();
}
+ /**
+ * {@inheritDoc}
+ */
public void createMembership(Membership m, boolean broadcast) throws Exception
{
if (orgService.getMembershipTypeHandler().findMembershipType(m.getMembershipType())
== null)
@@ -97,15 +106,31 @@
+ " because membership type " + m.getMembershipType() +
" is not exists.");
}
+ // check if we already have membership record
+ if (findMembershipByUserGroupAndType(m.getUserName(), m.getGroupId(),
m.getMembershipType()) != null)
+ {
+ return;
+ }
+
if (broadcast)
+ {
preSave(m, true);
+ }
+
Session session = service_.openSession();
session.save(m);
+
if (broadcast)
+ {
postSave(m, true);
+ }
+
session.flush();
}
+ /**
+ * {@inheritDoc}
+ */
public void linkMembership(User user, Group g, MembershipType mt, boolean broadcast)
throws Exception
{
if (user == null)
@@ -130,13 +155,12 @@
membership.setMembershipType(mt.getName());
membership.setGroupId(g.getId());
membership.setId(IdentifierUtil.generateUUID(membership));
-
- if (findMembershipByUserGroupAndType(user.getUserName(), g.getId(), mt.getName())
!= null)
- return;
-
createMembership(membership, broadcast);
}
+ /**
+ * {@inheritDoc}
+ */
public void saveMembership(Membership m, boolean broadcast) throws Exception
{
if (broadcast)
@@ -148,6 +172,9 @@
session.flush();
}
+ /**
+ * {@inheritDoc}
+ */
public Membership removeMembership(String id, boolean broadcast) throws Exception
{
Session session = service_.openSession();
@@ -166,6 +193,9 @@
return m;
}
+ /**
+ * {@inheritDoc}
+ */
public Collection removeMembershipByUser(String username, boolean broadcast) throws
Exception
{
Collection collection = findMembershipsByUser(username);
@@ -187,6 +217,9 @@
return collection;
}
+ /**
+ * {@inheritDoc}
+ */
public Membership findMembershipByUserGroupAndType(String userName, String groupId,
String type) throws Exception
{
Session session = service_.openSession();
@@ -210,6 +243,9 @@
}
}
+ /**
+ * {@inheritDoc}
+ */
public Collection findMembershipsByUserAndGroup(String userName, String groupId)
throws Exception
{
Session session = service_.openSession();
@@ -220,6 +256,9 @@
return memberships;
}
+ /**
+ * {@inheritDoc}
+ */
public Collection findMembershipsByUser(String userName) throws Exception
{
Session session = service_.openSession();
@@ -246,6 +285,9 @@
return session.createQuery(queryFindMembershipsByUser).setString(0,
userName).list();
}
+ /**
+ * {@inheritDoc}
+ */
public Collection findMembershipsByGroup(Group group) throws Exception
{
Session session = service_.openSession();
@@ -253,6 +295,9 @@
return memberships;
}
+ /**
+ * {@inheritDoc}
+ */
public Collection findMembershipsByGroupId(String groupId) throws Exception
{
Session session = service_.openSession();
@@ -262,6 +307,9 @@
return memberships;
}
+ /**
+ * {@inheritDoc}
+ */
public Membership findMembership(String id) throws Exception
{
Session session = service_.openSession();
Modified:
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipDAOImpl.java
===================================================================
---
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipDAOImpl.java 2011-08-19
12:24:53 UTC (rev 4783)
+++
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipDAOImpl.java 2011-08-22
11:12:23 UTC (rev 4784)
@@ -67,6 +67,9 @@
return new MembershipImpl();
}
+ /**
+ * {@inheritDoc}
+ */
public void createMembership(Membership membership, boolean broadcast) throws
Exception
{
if
(service.getMembershipTypeHandler().findMembershipType(membership.getMembershipType()) ==
null)
@@ -75,15 +78,31 @@
+ " because membership type " + membership.getMembershipType() +
" not exists.");
}
+ // check if we already have membership record
+ if (findMembershipByUserGroupAndType(membership.getUserName(),
membership.getGroupId(),
+ membership.getMembershipType()) != null)
+ {
+ return;
+ }
+
MembershipImpl membershipImpl = (MembershipImpl)membership;
if (broadcast)
+ {
listenerService_.broadcast("organization.membership.preSave", this,
membershipImpl);
+ }
+
membershipImpl.setId(IdentifierUtil.generateUUID(membership));
super.save(membershipImpl);
+
if (broadcast)
+ {
listenerService_.broadcast("organization.membership.postSave", this,
membershipImpl);
+ }
}
+ /**
+ * {@inheritDoc}
+ */
public void linkMembership(User user, Group group, MembershipType mt, boolean
broadcast) throws Exception
{
if (user == null)
@@ -104,16 +123,20 @@
}
if (log.isDebugEnabled())
+ {
log.debug("LINK MEMBER SHIP (" + user.getUserName() + ", " +
group.getId() + " , " + mt.getName() + ");");
+ }
+
MembershipImpl membership = new MembershipImpl();
membership.setUserName(user.getUserName());
membership.setMembershipType(mt.getName());
membership.setGroupId(group.getId());
- if (findMembershipByUserGroupAndType(user.getUserName(), group.getId(),
mt.getName()) != null)
- return;
createMembership(membership, broadcast);
}
+ /**
+ * {@inheritDoc}
+ */
public Membership findMembership(String id) throws Exception
{
if (id == null)
@@ -123,6 +146,9 @@
return loadUnique(query.toQuery());
}
+ /**
+ * {@inheritDoc}
+ */
public Membership findMembershipByUserGroupAndType(String userName, String groupId,
String type) throws Exception
{
@@ -139,6 +165,9 @@
return member;
}
+ /**
+ * {@inheritDoc}
+ */
public Collection findMembershipsByGroup(Group group) throws Exception
{
@@ -151,6 +180,9 @@
return list;
}
+ /**
+ * {@inheritDoc}
+ */
public Collection findMembershipsByUser(String userName) throws Exception
{
if (userName == null)
@@ -164,6 +196,9 @@
return list;
}
+ /**
+ * {@inheritDoc}
+ */
public Collection findMembershipsByUserAndGroup(String userName, String groupId)
throws Exception
{
if (userName == null || groupId == null)
@@ -178,6 +213,9 @@
return list;
}
+ /**
+ * {@inheritDoc}
+ */
public Membership removeMembership(String id, boolean broadcast) throws Exception
{
DBObjectQuery<MembershipImpl> query = new
DBObjectQuery<MembershipImpl>(MembershipImpl.class);
@@ -206,6 +244,9 @@
}
}
+ /**
+ * {@inheritDoc}
+ */
@SuppressWarnings("unchecked")
public Collection removeMembershipByUser(String username, boolean broadcast) throws
Exception
{
@@ -220,6 +261,9 @@
return members;
}
+ /**
+ * {@inheritDoc}
+ */
public Collection removeMemberships(DBObjectQuery<MembershipImpl> query, boolean
broadcast) throws Exception
{
DBPageList<MembershipImpl> pageList = new
DBPageList<MembershipImpl>(20, this, query);
@@ -250,6 +294,9 @@
}
}
+ /**
+ * {@inheritDoc}
+ */
@SuppressWarnings("unchecked")
public void addMembershipEventListener(MembershipEventListener listener)
{
Modified:
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java
===================================================================
---
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java 2011-08-19
12:24:53 UTC (rev 4783)
+++
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipDAOImpl.java 2011-08-22
11:12:23 UTC (rev 4784)
@@ -123,6 +123,12 @@
+ " because membership type " + m.getMembershipType() +
" is not exists.");
}
+ // check if we already have membership record
+ if (findMembershipByUserGroupAndType(m.getUserName(), m.getGroupId(),
m.getMembershipType()) != null)
+ {
+ return;
+ }
+
for (int err = 0;; err++)
{
try