/* AbstractMutableBook.java created 2008-02-23 * */ package org.signalml.domain.book; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import javax.swing.event.EventListenerList; /** AbstractMutableBook * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public abstract class AbstractMutableBook implements MutableBook, EventProducerBook { private PropertyChangeSupport pcSupport; private EventListenerList listenerList; public AbstractMutableBook() { pcSupport = new PropertyChangeSupport(this); listenerList = new EventListenerList(); } public void addAtom(StandardBookAtom atom, int channelIndex, int segmentIndex) { MutableBookSegment segment = (MutableBookSegment) getSegmentAt(segmentIndex, channelIndex); int index = segment.addAtom(atom); fireAtomAdded(channelIndex, segmentIndex, index); } public void setAtomAt(int channelIndex, int segmentIndex, int atomIndex, StandardBookAtom atom) { MutableBookSegment segment = (MutableBookSegment) getSegmentAt(segmentIndex, channelIndex); segment.setAtomAt(atomIndex, atom); fireAtomChanged(channelIndex, segmentIndex, atomIndex); } public void removeAtomAt(int channelIndex, int segmentIndex, int atomIndex) { MutableBookSegment segment = (MutableBookSegment) getSegmentAt(segmentIndex, channelIndex); segment.removeAtomAt(atomIndex); fireAtomRemoved(channelIndex, segmentIndex, atomIndex); } public void publishSegmentAtomsChanged(int channelIndex, int segmentIndex) { fireSegmentAtomsChanged(channelIndex, segmentIndex); } public void publishSegmentDataChanged(int segmentIndex) { fireSegmentChanged(segmentIndex); } public void publishBookStructureChanged() { fireBookStructureChanged(); } @Override public void addPropertyChangeListener(PropertyChangeListener listener) { pcSupport.addPropertyChangeListener(listener); } public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) { pcSupport.addPropertyChangeListener(propertyName, listener); } @Override public void removePropertyChangeListener(PropertyChangeListener listener) { pcSupport.removePropertyChangeListener(listener); } public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) { pcSupport.removePropertyChangeListener(propertyName, listener); } @Override public void addBookListener(BookListener listener) { listenerList.add(BookListener.class, listener); } @Override public void removeBookListener(BookListener listener) { listenerList.remove(BookListener.class, listener); } protected void fireIndexedPropertyChange(String propertyName, int index, boolean oldValue, boolean newValue) { pcSupport.fireIndexedPropertyChange(propertyName, index, oldValue, newValue); } protected void fireIndexedPropertyChange(String propertyName, int index, int oldValue, int newValue) { pcSupport.fireIndexedPropertyChange(propertyName, index, oldValue, newValue); } protected void fireIndexedPropertyChange(String propertyName, int index, Object oldValue, Object newValue) { pcSupport.fireIndexedPropertyChange(propertyName, index, oldValue, newValue); } protected void firePropertyChange(PropertyChangeEvent evt) { pcSupport.firePropertyChange(evt); } protected void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) { pcSupport.firePropertyChange(propertyName, oldValue, newValue); } protected void firePropertyChange(String propertyName, int oldValue, int newValue) { pcSupport.firePropertyChange(propertyName, oldValue, newValue); } protected void firePropertyChange(String propertyName, Object oldValue, Object newValue) { pcSupport.firePropertyChange(propertyName, oldValue, newValue); } protected void fireBookStructureChanged() { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this); } ((BookListener)listeners[i+1]).bookStructureChanged(e); } } } protected void fireSegmentAdded(int segmentIndex) { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this, segmentIndex); } ((BookListener)listeners[i+1]).segmentAdded(e); } } } protected void fireSegmentChanged(int segmentIndex) { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this, segmentIndex); } ((BookListener)listeners[i+1]).segmentChanged(e); } } } protected void fireSegmentRemoved(int segmentIndex) { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this, segmentIndex); } ((BookListener)listeners[i+1]).segmentRemoved(e); } } } protected void fireSegmentAtomsChanged(int channelIndex, int segmentIndex) { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this, channelIndex, segmentIndex); } ((BookListener)listeners[i+1]).segmentAtomsChanged(e); } } } protected void fireAtomAdded(int channelIndex, int segmentIndex, int atomIndex) { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this, channelIndex, segmentIndex, atomIndex); } ((BookListener)listeners[i+1]).atomAdded(e); } } } protected void fireAtomChanged(int channelIndex, int segmentIndex, int atomIndex) { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this, channelIndex, segmentIndex, atomIndex); } ((BookListener)listeners[i+1]).atomChanged(e); } } } protected void fireAtomRemoved(int channelIndex, int segmentIndex, int atomIndex) { Object[] listeners = listenerList.getListenerList(); BookEvent e = null; for (int i = listeners.length-2; i>=0; i-=2) { if (listeners[i]==BookListener.class) { if (e == null) { e = new BookEvent(this, channelIndex, segmentIndex, atomIndex); } ((BookListener)listeners[i+1]).atomRemoved(e); } } } }