Author: tolusha
Date: 2011-09-06 08:11:12 -0400 (Tue, 06 Sep 2011)
New Revision: 4871
Added:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListener.java
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListenerHandler.java
Modified:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/BaseOrganizationService.java
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeHandler.java
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/cache/CacheableMembershipTypeHandlerImpl.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipTypeDAOImpl.java
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipTypeDAOImpl.java
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipTypeDAOImpl.java
Log:
EXOJCR-1512: add events for MembershipType
Modified:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/BaseOrganizationService.java
===================================================================
---
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/BaseOrganizationService.java 2011-09-06
11:02:32 UTC (rev 4870)
+++
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/BaseOrganizationService.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -100,6 +100,10 @@
{
groupDAO_.addGroupEventListener((GroupEventListener)listener);
}
+ else if (listener instanceof MembershipTypeEventListener)
+ {
+
membershipTypeDAO_.addMembershipTypeEventListener((MembershipTypeEventListener)listener);
+ }
else if (listener instanceof MembershipEventListener)
{
membershipDAO_.addMembershipEventListener((MembershipEventListener)listener);
Added:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListener.java
===================================================================
---
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListener.java
(rev 0)
+++
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListener.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2009 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.exoplatform.services.organization;
+
+import org.exoplatform.container.component.BaseComponentPlugin;
+
+/**
+ * @author <a href="abazko(a)exoplatform.com">Anatoliy Bazko</a>
+ * @version $Id$
+ *
+ * <pre>
+ * <configuration>
+ * [..]
+ * <external-component-plugins>
+ *
<target-component>org.exoplatform.services.organization.OrganizationService</target-component>
+ * <component-plugin>
+ * <name>my.membership.type.listener</name>
+ * <set-method>addListenerPlugin</set-method>
+ *
<type>my.package.MyMembershipTypeEventListener</type>
+ * <description>your listener
description</description>
+ * </component-plugin>
+ * </external-component-plugins>
+ * [...]
+ * /configuration>
+ * </pre>
+ */
+public class MembershipTypeEventListener extends BaseComponentPlugin
+{
+ /**
+ * This method is called before the membership type object is saved.
+ *
+ * @param type the membership type to be saved
+ * @param isNew If the membership type is a new record in the database or not.
+ * @throws Exception The developer can decide to throw the exception or not.
+ * If the method throw an exception. The organization service should
+ * not save the membership type.
+ */
+ public void preSave(MembershipType type, boolean isNew) throws Exception
+ {
+ }
+
+ /**
+ * This method is called after the membership type has been saved but not commited
+ * yet
+ *
+ * @param type The mebership type object
+ * @param isNew The membership type is a new record or not.
+ * @throws Exception The developer can decide to throw the exception or not.
+ * If the method throw an exception. The organization service should
+ * role back the data.
+ */
+ public void postSave(MembershipType type, boolean isNew) throws Exception
+ {
+ }
+
+ /**
+ * This method is called before the membership type is removed
+ *
+ * @param type The membership type object to be removed
+ * @throws Exception he developer can decide to throw the exception or not. If
+ * the method throw an exception. The organization service should
+ * not remove the membership type record from the database.
+ */
+ public void preDelete(MembershipType type) throws Exception
+ {
+ }
+
+ /**
+ * This method should be called after the membership type has been removed from the
+ * database but not commited yet.
+ *
+ * @param type The membership type which has been removed from the database.
+ * @throws Exception The developer can decide to throw the exception or not.
+ * If the method throw the exception, the organization service
+ * should role back the database.
+ */
+ public void postDelete(MembershipType type) throws Exception
+ {
+ }
+}
Property changes on:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListener.java
___________________________________________________________________
Added: svn:keywords
+ Id
Added:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListenerHandler.java
===================================================================
---
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListenerHandler.java
(rev 0)
+++
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListenerHandler.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2010 eXo Platform SAS.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.exoplatform.services.organization;
+
+import java.util.List;
+
+/**
+ * @author <a href="abazko(a)exoplatform.com">Anatoliy Bazko</a>
+ * @version $Id$
+ */
+public interface MembershipTypeEventListenerHandler
+{
+
+ /**
+ * Return list of MembershipTypeEventListener. List should be unmodifiable to prevent
modification outside of MembershipTypeHandler.
+ *
+ * @return list of MembershipTypeEventListener
+ */
+ public List<MembershipTypeEventListener> getMembershipTypeListeners();
+
+}
Property changes on:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeEventListenerHandler.java
___________________________________________________________________
Added: svn:keywords
+ Id
Modified:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeHandler.java
===================================================================
---
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeHandler.java 2011-09-06
11:02:32 UTC (rev 4870)
+++
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/MembershipTypeHandler.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -115,4 +115,11 @@
* Ususally an exception is throwed when the method cannot access the
database.
*/
public Collection findMembershipTypes() throws Exception;
+
+ /**
+ * Use this method to register a membership type event listener.
+ *
+ * @param listener the listener instance.
+ */
+ public void addMembershipTypeEventListener(MembershipTypeEventListener listener);
}
Modified:
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/cache/CacheableMembershipTypeHandlerImpl.java
===================================================================
---
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/cache/CacheableMembershipTypeHandlerImpl.java 2011-09-06
11:02:32 UTC (rev 4870)
+++
core/trunk/exo.core.component.organization.api/src/main/java/org/exoplatform/services/organization/cache/CacheableMembershipTypeHandlerImpl.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -17,11 +17,10 @@
package org.exoplatform.services.organization.cache;
import org.exoplatform.services.cache.ExoCache;
-import org.exoplatform.services.organization.Group;
import org.exoplatform.services.organization.Membership;
import org.exoplatform.services.organization.MembershipType;
+import org.exoplatform.services.organization.MembershipTypeEventListener;
import org.exoplatform.services.organization.MembershipTypeHandler;
-import org.exoplatform.services.organization.UserHandler;
import java.util.Collection;
import java.util.List;
@@ -142,4 +141,11 @@
return membershipType;
}
+ /**
+ * {@inheritDoc}
+ */
+ public void addMembershipTypeEventListener(MembershipTypeEventListener listener)
+ {
+ membershipTypeHandler.addMembershipTypeEventListener(listener);
+ }
}
Modified:
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipTypeDAOImpl.java
===================================================================
---
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipTypeDAOImpl.java 2011-09-06
11:02:32 UTC (rev 4870)
+++
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/hibernate/MembershipTypeDAOImpl.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -20,11 +20,15 @@
import org.exoplatform.services.database.HibernateService;
import org.exoplatform.services.organization.MembershipType;
+import org.exoplatform.services.organization.MembershipTypeEventListener;
+import org.exoplatform.services.organization.MembershipTypeEventListenerHandler;
import org.exoplatform.services.organization.MembershipTypeHandler;
import org.exoplatform.services.organization.impl.MembershipTypeImpl;
import org.hibernate.Session;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -33,7 +37,7 @@
* benjmestrallet(a)users.sourceforge.net Author : Tuan Nguyen
* tuan08(a)users.sourceforge.net Date: Aug 22, 2003 Time: 4:51:21 PM
*/
-public class MembershipTypeDAOImpl implements MembershipTypeHandler
+public class MembershipTypeDAOImpl implements MembershipTypeHandler,
MembershipTypeEventListenerHandler
{
private static final String queryFindMembershipType =
"from m in class org.exoplatform.services.organization.impl.MembershipTypeImpl
" + "where m.name = ? ";
@@ -41,6 +45,11 @@
private static final String queryFindAllMembershipType =
"from m in class
org.exoplatform.services.organization.impl.MembershipTypeImpl";
+ /**
+ * The list of listeners to broadcast the events.
+ */
+ protected final List<MembershipTypeEventListener> listeners = new
ArrayList<MembershipTypeEventListener>();
+
private HibernateService service_;
public MembershipTypeDAOImpl(HibernateService service)
@@ -59,8 +68,20 @@
Date now = new Date();
mt.setCreatedDate(now);
mt.setModifiedDate(now);
+
+ if (broadcast)
+ {
+ preSave(mt, true);
+ }
+
session.save(mt);
session.flush();
+
+ if (broadcast)
+ {
+ postSave(mt, true);
+ }
+
return mt;
}
@@ -69,8 +90,20 @@
Session session = service_.openSession();
Date now = new Date();
mt.setModifiedDate(now);
+
+ if (broadcast)
+ {
+ preSave(mt, false);
+ }
+
session.update(mt);
session.flush();
+
+ if (broadcast)
+ {
+ postSave(mt, false);
+ }
+
return mt;
}
@@ -85,6 +118,7 @@
{
Session session = service_.openSession();
MembershipTypeImpl m = (MembershipTypeImpl)session.get(MembershipTypeImpl.class,
name);
+
try
{
List entries =
@@ -98,11 +132,22 @@
{
}
+ if (broadcast)
+ {
+ preDelete(m);
+ }
+
if (m != null)
{
session.delete(m);
session.flush();
}
+
+ if (broadcast)
+ {
+ postDelete(m);
+ }
+
return m;
}
@@ -111,4 +156,64 @@
Session session = service_.openSession();
return session.createQuery(queryFindAllMembershipType).list();
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public void addMembershipTypeEventListener(MembershipTypeEventListener listener)
+ {
+ listeners.add(listener);
+ }
+
+ /**
+ * PreSave event.
+ */
+ private void preSave(MembershipType type, boolean isNew) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.preSave(type, isNew);
+ }
+ }
+
+ /**
+ * PostSave event.
+ */
+ private void postSave(MembershipType type, boolean isNew) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.postSave(type, isNew);
+ }
+ }
+
+ /**
+ * PreDelete event.
+ */
+ private void preDelete(MembershipType type) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.preDelete(type);
+ }
+ }
+
+ /**
+ * PostDelete event.
+ */
+ private void postDelete(MembershipType type) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.postDelete(type);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<MembershipTypeEventListener> getMembershipTypeListeners()
+ {
+ return Collections.unmodifiableList(listeners);
+ }
}
Modified:
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipTypeDAOImpl.java
===================================================================
---
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipTypeDAOImpl.java 2011-09-06
11:02:32 UTC (rev 4870)
+++
core/trunk/exo.core.component.organization.jdbc/src/main/java/org/exoplatform/services/organization/jdbc/MembershipTypeDAOImpl.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -25,6 +25,7 @@
import org.exoplatform.services.database.StandardSQLDAO;
import org.exoplatform.services.listener.ListenerService;
import org.exoplatform.services.organization.MembershipType;
+import org.exoplatform.services.organization.MembershipTypeEventListener;
import org.exoplatform.services.organization.MembershipTypeHandler;
import java.util.Calendar;
@@ -106,4 +107,11 @@
return mt;
}
+ /**
+ * {@inheritDoc}
+ */
+ public void addMembershipTypeEventListener(MembershipTypeEventListener listener)
+ {
+ throw new RuntimeException("This method is not supported anymore, please use
the new api");
+ }
}
Modified:
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipTypeDAOImpl.java
===================================================================
---
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipTypeDAOImpl.java 2011-09-06
11:02:32 UTC (rev 4870)
+++
core/trunk/exo.core.component.organization.ldap/src/main/java/org/exoplatform/services/organization/ldap/MembershipTypeDAOImpl.java 2011-09-06
12:11:12 UTC (rev 4871)
@@ -22,13 +22,17 @@
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.services.organization.MembershipType;
+import org.exoplatform.services.organization.MembershipTypeEventListener;
+import org.exoplatform.services.organization.MembershipTypeEventListenerHandler;
import org.exoplatform.services.organization.MembershipTypeHandler;
import org.exoplatform.services.organization.impl.MembershipTypeImpl;
import org.exoplatform.services.organization.ldap.CacheHandler.CacheType;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
+import java.util.List;
import javax.naming.NameNotFoundException;
import javax.naming.NamingEnumeration;
@@ -45,7 +49,7 @@
* Created by The eXo Platform SAS Author : Tuan Nguyen
* tuan08(a)users.sourceforge.net Oct 14, 2005. @version andrew00x $
*/
-public class MembershipTypeDAOImpl extends BaseDAO implements MembershipTypeHandler
+public class MembershipTypeDAOImpl extends BaseDAO implements MembershipTypeHandler,
MembershipTypeEventListenerHandler
{
/**
@@ -54,6 +58,11 @@
private static final Log LOG =
ExoLogger.getLogger("exo.core.component.organization.ldap.MembershipTypeDAOImpl");
/**
+ * The list of listeners to broadcast the events.
+ */
+ protected final List<MembershipTypeEventListener> listeners = new
ArrayList<MembershipTypeEventListener>();
+
+ /**
* @param ldapAttrMapping mapping LDAP attributes to eXo organization service
* items (users, groups, etc)
* @param ldapService {@link LDAPService}
@@ -98,8 +107,19 @@
Date now = new Date();
mt.setCreatedDate(now);
mt.setModifiedDate(now);
+
+ if (broadcast)
+ {
+ preSave(mt, true);
+ }
+
ctx.createSubcontext(membershipTypeDN,
ldapAttrMapping.membershipTypeToAttributes(mt));
+ if (broadcast)
+ {
+ postSave(mt, true);
+ }
+
cacheHandler.put(mt.getName(), mt, CacheType.MEMBERSHIPTYPE);
}
return mt;
@@ -148,8 +168,19 @@
new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new
BasicAttribute(
ldapAttrMapping.ldapDescriptionAttr, mt.getDescription()));
}
+
+ if (broadcast)
+ {
+ preSave(mt, false);
+ }
+
ctx.modifyAttributes(membershipTypeDN, mods);
+ if (broadcast)
+ {
+ postSave(mt, false);
+ }
+
cacheHandler.put(mt.getName(), mt, CacheType.MEMBERSHIPTYPE);
return mt;
}
@@ -182,8 +213,19 @@
Attributes attrs = ctx.getAttributes(membershipTypeDN);
MembershipType m = ldapAttrMapping.attributesToMembershipType(attrs);
removeMembership(ctx, name);
+
+ if (broadcast)
+ {
+ preDelete(m);
+ }
+
ctx.destroySubcontext(membershipTypeDN);
+ if (broadcast)
+ {
+ postDelete(m);
+ }
+
cacheHandler.remove(name, CacheType.MEMBERSHIPTYPE);
return m;
}
@@ -324,4 +366,63 @@
}
}
+ /**
+ * {@inheritDoc}
+ */
+ public void addMembershipTypeEventListener(MembershipTypeEventListener listener)
+ {
+ listeners.add(listener);
+ }
+
+ /**
+ * PreSave event.
+ */
+ private void preSave(MembershipType type, boolean isNew) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.preSave(type, isNew);
+ }
+ }
+
+ /**
+ * PostSave event.
+ */
+ private void postSave(MembershipType type, boolean isNew) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.postSave(type, isNew);
+ }
+ }
+
+ /**
+ * PreDelete event.
+ */
+ private void preDelete(MembershipType type) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.preDelete(type);
+ }
+ }
+
+ /**
+ * PostDelete event.
+ */
+ private void postDelete(MembershipType type) throws Exception
+ {
+ for (MembershipTypeEventListener listener : listeners)
+ {
+ listener.postDelete(type);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public List<MembershipTypeEventListener> getMembershipTypeListeners()
+ {
+ return Collections.unmodifiableList(listeners);
+ }
}