/* * 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 org.etk.core.membership.Group; import org.etk.core.membership.Membership; import org.etk.core.membership.MembershipType; import org.etk.core.membership.MembershipTypeHandler; import org.etk.core.membership.UserHandler; import org.etk.kernel.cache.ExoCache; import java.util.Collection; import java.util.List; /** * Created by The eXo Platform SAS. * * <br/>Date: 2009 * * @author <a href="mailto:anatoliy.bazko@exoplatform.com.ua">Anatoliy Bazko</a> * @version $Id: CacheableMembershipTypeHandlerImpl.java 287 2009-10-16 08:08:49Z tolusha $ */ public class CacheableMembershipTypeHandlerImpl implements MembershipTypeHandler { private final ExoCache membershipTypeCache; private final ExoCache membershipCache; private final MembershipTypeHandler membershipTypeHandler; /** * CacheableMembershipTypeHandler constructor. * * @param organizationCacheHandler * - organization cache handler * @param membershipTypeHandler * - membership type handler */ public CacheableMembershipTypeHandlerImpl(OrganizationCacheHandler organizationCacheHandler, MembershipTypeHandler membershipTypeHandler) { this.membershipTypeCache = organizationCacheHandler.getMembershipTypeCache(); this.membershipCache = organizationCacheHandler.getMembershipCache(); this.membershipTypeHandler = membershipTypeHandler; } /** * {@inheritDoc} */ public MembershipType createMembershipType(MembershipType mt, boolean broadcast) throws Exception { MembershipType membershipType = membershipTypeHandler.createMembershipType(mt, broadcast); membershipTypeCache.put(membershipType.getName(), membershipType); return membershipType; } /** * {@inheritDoc} */ public MembershipType createMembershipTypeInstance() { return membershipTypeHandler.createMembershipTypeInstance(); } /** * {@inheritDoc} */ public MembershipType findMembershipType(String name) throws Exception { MembershipType membershipType = (MembershipType)membershipTypeCache.get(name); if (membershipType != null) return membershipType; membershipType = membershipTypeHandler.findMembershipType(name); if (membershipType != null) membershipTypeCache.put(name, membershipType); return membershipType; } /** * {@inheritDoc} */ public Collection findMembershipTypes() throws Exception { Collection<MembershipType> membershipTypes = membershipTypeHandler.findMembershipTypes(); for (MembershipType membershipType : membershipTypes) membershipTypeCache.put(membershipType.getName(), membershipType); return membershipTypes; } /** * {@inheritDoc} */ public MembershipType removeMembershipType(String name, boolean broadcast) throws Exception { MembershipType membershipType = membershipTypeHandler.removeMembershipType(name, broadcast); if (membershipType != null) { membershipTypeCache.remove(name); List<Membership> memberships = membershipCache.getCachedObjects(); for (Membership membership : memberships) { if (membership.getMembershipType().equals(name)) { membershipCache.remove(membership.getId()); membershipCache.remove(new MembershipCacheKey(membership)); } } } return membershipType; } /** * {@inheritDoc} */ public MembershipType saveMembershipType(MembershipType mt, boolean broadcast) throws Exception { MembershipType membershipType = membershipTypeHandler.saveMembershipType(mt, broadcast); membershipTypeCache.put(membershipType.getName(), membershipType); return membershipType; } }