package org.limewire.core.impl.library; import java.util.Collection; import java.util.List; import org.limewire.collection.glazedlists.GlazedListsFactory; import org.limewire.core.api.library.LocalFileItem; import org.limewire.core.api.library.SharedFileList; import org.limewire.util.StringUtils; import ca.odell.glazedlists.BasicEventList; import ca.odell.glazedlists.EventList; import com.limegroup.gnutella.library.SharedFileCollection; /** * A representation of a {@link SharedFileCollection} for use with the * {@link SharedFileList} API. */ class SharedFileListImpl extends LocalFileListImpl implements SharedFileList { private final SharedFileCollection coreCollection; private final EventList<String> friendList = GlazedListsFactory.threadSafeList(new BasicEventList<String>()); private final EventList<String> readOnlyFriendList = GlazedListsFactory.readOnlyList(friendList); public SharedFileListImpl(CoreLocalFileItemFactory coreLocalFileItemFactory, SharedFileCollection coreFileCollection) { super(new BasicEventList<LocalFileItem>(), coreLocalFileItemFactory); this.coreCollection = coreFileCollection; this.coreCollection.addListener(newEventListener()); } @Override public String toString() { return StringUtils.toString(this); } @Override public int getId() { return coreCollection.getId(); } @Override protected SharedFileCollection getCoreCollection() { return coreCollection; } @Override public void addFriend(String friendId) { coreCollection.addFriend(friendId); } @Override public EventList<String> getFriendIds() { return readOnlyFriendList; } @Override public String getCollectionName() { // TODO: do better. if(coreCollection.getId() == 0) { return "Public Shared"; // TODO: i18n? } else { return coreCollection.getName(); } } @Override public boolean isNameChangeAllowed() { return coreCollection.getId() != 0; // TODO: Do better. } @Override public void removeFriend(String friendId) { coreCollection.removeFriend(friendId); } @Override public void setFriendList(List<String> friendIdList) { coreCollection.setFriendList(friendIdList); } @Override public void setCollectionName(String name) { coreCollection.setName(name); } boolean friendRemoved(String friendId) { return friendList.remove(friendId); } void friendsSet(Collection<String> newFriendIds) { friendList.getReadWriteLock().writeLock().lock(); try { friendList.clear(); friendList.addAll(newFriendIds); } finally { friendList.getReadWriteLock().writeLock().unlock(); } } void friendAdded(String friendId) { friendList.add(friendId); } @Override public boolean isPublic() { return coreCollection.isPublic(); } }