/********************************************************************************** * $URL: https://source.sakaiproject.org/svn/site/trunk/mergedlist-util/util/src/java/org/sakaiproject/util/MergedListEntryProviderFixedListWrapper.java $ * $Id: MergedListEntryProviderFixedListWrapper.java 105080 2012-02-24 23:10:31Z ottenhoff@longsight.com $ *********************************************************************************** * * Copyright (c) 2003, 2004, 2005, 2006, 2007, 2008 The Sakai Foundation * * Licensed under the Educational Community License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.opensource.org/licenses/ECL-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * **********************************************************************************/ package org.sakaiproject.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.sakaiproject.entity.api.ResourceProperties; import org.sakaiproject.site.api.Site; /* * Used to provide a interface to the MergedList class. This wrapper * is created with a fixed set of channel references. It then * defers most function calls to a wrapped EntryProvider that can * be of any type. This is used when we know ahead of time which * channel references that we'll want to use. This is to avoid * trying to process all sites. */ public class MergedListEntryProviderFixedListWrapper implements MergedList.EntryProvider { /** * Defines a callback interface to convert a reference into a channel. */ public interface ReferenceToChannelConverter { Object getChannel(String channelReference); } private MergedList.EntryProvider entryProvider; private List channelReferenceList = new ArrayList(); public MergedListEntryProviderFixedListWrapper(MergedList.EntryProvider entryProvider, String primaryChannelReference, String [] mergedChannelsReferences, ReferenceToChannelConverter refToChan) { this.entryProvider = entryProvider; channelReferenceList.add(refToChan.getChannel(primaryChannelReference)); // Add the merged channels. for ( int i=0; i < mergedChannelsReferences.length; i++ ) { // Don't add the primary channel if it is already in the list. if ( !primaryChannelReference.equals(mergedChannelsReferences[i]) ) { channelReferenceList.add(refToChan.getChannel(mergedChannelsReferences[i])); } } } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#getIterator() */ public Iterator getIterator() { return channelReferenceList.iterator(); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#allowGet(java.lang.String) */ public boolean allowGet(String ref) { return entryProvider.allowGet(ref); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#getContext(java.lang.Object) */ public String getContext(Object obj) { return entryProvider.getContext(obj); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#getReference(java.lang.Object) */ public String getReference(Object obj) { if ( obj == null ) { return null; } return entryProvider.getReference(obj); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#getProperties(java.lang.Object) */ public ResourceProperties getProperties(Object obj) { if ( obj == null ) { return null; } return entryProvider.getProperties(obj); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#isUserChannel(java.lang.Object) */ public boolean isUserChannel(Object channel) { if ( channel == null ) { return false; } return entryProvider.isUserChannel(channel); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#isSpecialSite(java.lang.Object) */ public boolean isSpecialSite(Object channel) { if ( channel == null ) { return true; } return entryProvider.isSpecialSite(channel); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#getSiteUserId(java.lang.Object) */ public String getSiteUserId(Object channel) { if ( channel == null ) { return ""; } return entryProvider.getSiteUserId(channel); } /* (non-Javadoc) * @see org.sakaiproject.util.MergedList.EntryProvider#getSite(java.lang.Object) */ public Site getSite(Object channel) { if ( channel == null ) { return null; } return entryProvider.getSite(channel); } }