package com.indyforge.foxnet.rmi.pattern.change.impl; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import com.indyforge.foxnet.rmi.Invocation; import com.indyforge.foxnet.rmi.RemoteInterfaces; import com.indyforge.foxnet.rmi.pattern.change.Change; import com.indyforge.foxnet.rmi.pattern.change.Changeable; import com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue; /** * * @author Christopher Probst * * @param <T> */ @RemoteInterfaces(Changeable.class) public final class CompositeChangeableQueue<T> implements ChangeableQueue<T> { /* * Here we store all changeable queue of this composite changeable queue. */ private final List<ChangeableQueue<T>> changeableQueues = new LinkedList<ChangeableQueue<T>>(); public CompositeChangeableQueue(ChangeableQueue<T>... changeableQueues) { for (ChangeableQueue<T> changeableQueue : changeableQueues) { if (changeableQueues != null) { this.changeableQueues.add(changeableQueue); } } } public CompositeChangeableQueue( Iterator<? extends ChangeableQueue<T>> changeableQueues) { if (changeableQueues != null) { while (changeableQueues.hasNext()) { ChangeableQueue<T> changeableQueue = changeableQueues.next(); if (changeableQueue != null) { this.changeableQueues.add(changeableQueue); } } } } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.Changeable#applyChange(com.indyforge * .foxnet.rmi.pattern.change.Change) */ @Override public void applyChange(Change<T> change) { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.applyChange(change); } } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue#applyChangeLater * (com.indyforge.foxnet.rmi.pattern.change.Change, java.util.Collection) */ @Override public void applyChangeLater(Change<T> change, Collection<Invocation> invocations) { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.applyChangeLater(change, invocations); } } /* * (non-Javadoc) * * @see com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue# * applyQueuedChangesLater(java.util.Collection) */ @Override public void applyQueuedChangesLater(Collection<Invocation> invocations) { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.applyQueuedChangesLater(invocations); } } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue#applyQueuedChanges * () */ @Override public void applyQueuedChanges() { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.applyQueuedChanges(); } } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue#mergeQueuedChanges * () */ @Override public void mergeQueuedChanges() { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.mergeQueuedChanges(); } } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue#queueChange(com * .indyforge.foxnet.rmi.pattern.change.Change, boolean) */ @Override public void queueChange(Change<T> change, boolean merge) { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.queueChange(change, merge); } } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue#removeQueuedChanges * () */ @Override public void removeQueuedChanges() { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.removeQueuedChanges(); } } /* * (non-Javadoc) * * @see * com.indyforge.foxnet.rmi.pattern.change.ChangeableQueue#separateQueuedChanges * () */ @Override public void separateQueuedChanges() { for (ChangeableQueue<T> changeableQueue : changeableQueues) { changeableQueue.separateQueuedChanges(); } } }