/*
* Copyright (C) 2003-2009 eXo Platform SAS.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation; either version 3
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see<http://www.gnu.org/licenses/>.
*/
package org.etk.core.membership.cache;
import com.sun.org.apache.bcel.internal.generic.RETURN;
import org.etk.core.membership.Group;
import org.etk.core.membership.Membership;
import org.etk.core.membership.MembershipEventListener;
import org.etk.core.membership.MembershipHandler;
import org.etk.core.membership.MembershipType;
import org.etk.core.membership.User;
import org.etk.kernel.cache.ExoCache;
import java.util.Collection;
/**
* Created by The eXo Platform SAS.
*
* <br/>Date: 2009
*
* @author <a href="mailto:anatoliy.bazko@exoplatform.com.ua">Anatoliy Bazko</a>
* @version $Id: CacheableMembershipHandlerImpl.java 287 2009-10-16 08:08:49Z tolusha $
*/
public class CacheableMembershipHandlerImpl implements MembershipHandler
{
private final ExoCache membershipCache;
private final MembershipHandler membershipHandler;
/**
* CacheableUserHandler constructor.
*
* @param organizationCacheHandler
* - organization cache handler
* @param membershipHandler
* - membership handler
*/
public CacheableMembershipHandlerImpl(OrganizationCacheHandler organizationCacheHandler,
MembershipHandler membershipHandler)
{
this.membershipCache = organizationCacheHandler.getMembershipCache();
this.membershipHandler = membershipHandler;
}
/**
* {@inheritDoc}
*/
public void addMembershipEventListener(MembershipEventListener listener)
{
membershipHandler.addMembershipEventListener(listener);
}
/**
* {@inheritDoc}
*/
public void createMembership(Membership m, boolean broadcast) throws Exception
{
membershipHandler.createMembership(m, broadcast);
}
/**
* {@inheritDoc}
*/
public Membership createMembershipInstance()
{
return membershipHandler.createMembershipInstance();
}
/**
* {@inheritDoc}
*/
public Membership findMembership(String id) throws Exception
{
Membership membership = (Membership)membershipCache.get(id);
if (membership != null)
return membership;
membership = membershipHandler.findMembership(id);
if (membership != null)
{
membershipCache.put(membership.getId(), membership);
membershipCache.put(new MembershipCacheKey(membership), membership);
}
return membership;
}
/**
* {@inheritDoc}
*/
public Membership findMembershipByUserGroupAndType(String userName, String groupId, String type) throws Exception
{
Membership membership = (Membership)membershipCache.get(new MembershipCacheKey(userName, groupId, type));
if (membership != null)
return membership;
membership = membershipHandler.findMembershipByUserGroupAndType(userName, groupId, type);
if (membership != null)
{
membershipCache.put(membership.getId(), membership);
membershipCache.put(new MembershipCacheKey(membership), membership);
}
return membership;
}
/**
* {@inheritDoc}
*/
public Collection findMembershipsByGroup(Group group) throws Exception
{
Collection<Membership> memberships = membershipHandler.findMembershipsByGroup(group);
for (Membership membership : memberships)
{
membershipCache.put(membership.getId(), membership);
membershipCache.put(new MembershipCacheKey(membership), membership);
}
return memberships;
}
/**
* {@inheritDoc}
*/
public Collection findMembershipsByUser(String userName) throws Exception
{
Collection<Membership> memberships = membershipHandler.findMembershipsByUser(userName);
for (Membership membership : memberships)
{
membershipCache.put(membership.getId(), membership);
membershipCache.put(new MembershipCacheKey(membership), membership);
}
return memberships;
}
/**
* {@inheritDoc}
*/
public Collection findMembershipsByUserAndGroup(String userName, String groupId) throws Exception
{
Collection<Membership> memberships = membershipHandler.findMembershipsByUserAndGroup(userName, groupId);
for (Membership membership : memberships)
{
membershipCache.put(membership.getId(), membership);
membershipCache.put(new MembershipCacheKey(membership), membership);
}
return memberships;
}
/**
* {@inheritDoc}
*/
public void linkMembership(User user, Group group, MembershipType m, boolean broadcast) throws Exception
{
membershipHandler.linkMembership(user, group, m, broadcast);
}
/**
* {@inheritDoc}
*/
public Membership removeMembership(String id, boolean broadcast) throws Exception
{
Membership membership = membershipHandler.removeMembership(id, broadcast);
if (membership != null)
{
membershipCache.remove(membership.getId());
membershipCache.remove(new MembershipCacheKey(membership));
}
return membership;
}
/**
* {@inheritDoc}
*/
public Collection removeMembershipByUser(String username, boolean broadcast) throws Exception
{
Collection<Membership> memberships = membershipHandler.removeMembershipByUser(username, broadcast);
for (Membership membership : memberships)
{
membershipCache.remove(membership.getId());
membershipCache.remove(new MembershipCacheKey(membership));
}
return memberships;
}
}