All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ca.odell.glazedlists.CompositeList Maven / Gradle / Ivy

There is a newer version: 1.9.1
Show newest version
/* Glazed Lists                                                 (c) 2003-2006 */
/* http://publicobject.com/glazedlists/                      publicobject.com,*/
/*                                                     O'Dell Engineering Ltd.*/
package ca.odell.glazedlists;

import ca.odell.glazedlists.event.ListEventPublisher;
import ca.odell.glazedlists.util.concurrent.ReadWriteLock;

import java.util.Iterator;

/**
 * An {@link EventList} composed of multiple source {@link EventList}s. This list
 * shows the contents of its source lists.
 *
 * 

Note that all contained {@link EventList}s must use the same {@link ListEventPublisher} and * {@link ReadWriteLock}, particularly if this {@link EventList} is to be used by multiple threads * concurrently. To construct an {@link EventList} that shares the {@link ListEventPublisher} and * {@link ReadWriteLock} with this {@link CompositeList}, use {@link #createMemberList()}. * *

Warning: This class is * thread ready but not thread safe. See {@link EventList} for an example * of thread safe code. * *

* * * * * * * *
EventList Overview
Writable:only {@link #set(int,Object)} and {@link #remove(int)}
Concurrency:not thread safe
Performance:reads: O(log N), writes O(log N)
Memory:96 bytes per element
Unit Tests:N/A
Issues: * 25 * 93 * 96 * 162 *
* * @author Jesse Wilson */ public class CompositeList extends CollectionList, E> { public CompositeList() { super(new BasicEventList>(), (Model)GlazedLists.listCollectionListModel()); } /** * Create a {@link CompositeList} that uses the given lock. Note that this lock * will also be used when {@link #createMemberList building new member lists}. *

* This can be a convenient constructor to use when the member lists are prebuilt ahead of time * with a common {@link ReadWriteLock} and it is desirable to compose their union with a * {@link CompositeList}. * * @param lock the {@link ReadWriteLock} to use within the {@link CompositeList} * @deprecated replaced by {@link #CompositeList(ListEventPublisher, ReadWriteLock)}, because * prebuilt member lists should share lock and publisher with the * CompositeList. */ public CompositeList(ReadWriteLock lock) { super(new BasicEventList>(lock), (Model)GlazedLists.listCollectionListModel()); } /** * Create a {@link CompositeList} that uses the given publisher and * lock. Note that this publisher and lock will also be used when * {@link #createMemberList building new member lists}. *

* This can be a convenient constructor to use when the member lists are prebuilt ahead of time * with a common {@link ListEventPublisher} and {@link ReadWriteLock} and it is desirable to * compose their union with a {@link CompositeList}. * * @param publisher the {@link ListEventPublisher} to use within the {@link CompositeList} * @param lock the {@link ReadWriteLock} to use within the {@link CompositeList} */ public CompositeList(ListEventPublisher publisher, ReadWriteLock lock) { super(new BasicEventList>(publisher, lock), (Model)GlazedLists.listCollectionListModel()); } /** * Adds the specified {@link EventList} as a source to this {@link CompositeList}. *

* To ensure correct behaviour when this {@link CompositeList} is used by multiple threads, the * specified EventList has to share the same {@link ReadWriteLock} and * {@link ListEventPublisher} with this CompositeList. * * @throws IllegalArgumentException if the specified EventList uses a different * {@link ReadWriteLock} or {@link ListEventPublisher} * @see #createMemberList() */ public void addMemberList(EventList member) { if (!getPublisher().equals(member.getPublisher())) throw new IllegalArgumentException("Member list must share publisher with CompositeList"); if (!getReadWriteLock().equals(member.getReadWriteLock())) throw new IllegalArgumentException("Member list must share lock with CompositeList"); source.add(member); } /** * Creates a new {@link EventList} that shares its {@link ReadWriteLock} and * {@link ListEventPublisher} with this {@link CompositeList}. This is * necessary when this {@link CompositeList} will be used by multiple * threads. * *

Note that the created {@link EventList} must be explicitly added as a member * to this {@link CompositeList} using {@link #addMemberList(EventList)}. * * @return a new EventList appropriate for use as a * {#link #addMemberList member list} of this CompositeList */ public EventList createMemberList() { return new BasicEventList(getPublisher(), getReadWriteLock()); } /** * Removes the specified {@link EventList} as a source {@link EventList} * to this {@link CompositeList}. */ public void removeMemberList(EventList list) { for(Iterator> i = source.iterator(); i.hasNext(); ) { if(i.next() == list) { i.remove(); return; } } throw new IllegalArgumentException("Cannot remove list " + list + " which is not in this CompositeList"); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy