/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package de.cismet.tools.gui.jbands; import java.util.ArrayList; import java.util.concurrent.CopyOnWriteArrayList; import de.cismet.tools.gui.jbands.interfaces.Band; import de.cismet.tools.gui.jbands.interfaces.BandListener; import de.cismet.tools.gui.jbands.interfaces.BandModel; import de.cismet.tools.gui.jbands.interfaces.BandModelListener; import de.cismet.tools.gui.jbands.interfaces.BandModificationProvider; /** * DOCUMENT ME! * * @author thorsten * @version $Revision$, $Date$ */ public class SimpleBandModel implements BandModel, BandListener { //~ Instance fields -------------------------------------------------------- private ArrayList<Band> bands = new ArrayList<Band>(); private final CopyOnWriteArrayList<BandModelListener> listeners = new CopyOnWriteArrayList<BandModelListener>(); private double min = -1; private double max = -1; //~ Methods ---------------------------------------------------------------- @Override public Band getBand(final int bandNumber) { return bands.get(bandNumber); } @Override public int getNumberOfBands() { return bands.size(); } /** * DOCUMENT ME! * * @param band DOCUMENT ME! * * @throws IllegalArgumentException DOCUMENT ME! */ public void addBand(final Band band) { if (band == null) { throw new IllegalArgumentException("band must not be null"); } if (band instanceof BandModificationProvider) { ((BandModificationProvider)band).addBandListener(this); } bands.add(band); fireBandModelChanged(); } /** * DOCUMENT ME! * * @param band DOCUMENT ME! * @param pos DOCUMENT ME! * * @throws IllegalArgumentException DOCUMENT ME! */ public void insertBand(final Band band, final int pos) { if (band == null) { throw new IllegalArgumentException("band must not be null"); } bands.add(pos, band); fireBandModelChanged(); } /** * DOCUMENT ME! * * @param band DOCUMENT ME! * * @return DOCUMENT ME! */ public int removeBand(final Band band) { final int pos = bands.indexOf(band); if (band instanceof BandModificationProvider) { ((BandModificationProvider)band).removeBandListener(this); } bands.remove(band); fireBandModelChanged(); return pos; } @Override public double getMax() { if (max > -1) { return max; } else { double value = 0; for (final Band b : bands) { value = (b.getMax() > value) ? b.getMax() : value; } return value; } } @Override public double getMin() { if (min > -1) { return min; } else { double value = Double.MAX_VALUE; for (final Band b : bands) { value = (b.getMin() < value) ? b.getMin() : value; } return value; } } @Override public void addBandModelListener(final BandModelListener bml) { listeners.add(bml); } @Override public void removeBandModelListener(final BandModelListener bml) { listeners.remove(bml); } /** * DOCUMENT ME! */ public void fireBandModelChanged() { for (final BandModelListener bml : listeners) { bml.bandModelChanged(null); } } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ public void fireBandModelChanged(final BandModelEvent e) { for (final BandModelListener bml : listeners) { bml.bandModelChanged(e); } } /** * DOCUMENT ME! */ public void fireBandModelSelectionChanged() { for (final BandModelListener bml : listeners) { bml.bandModelSelectionChanged(null); } } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ public void fireBandModelSelectionChanged(final BandModelEvent e) { for (final BandModelListener bml : listeners) { bml.bandModelSelectionChanged(e); } } /** * DOCUMENT ME! * * @param e DOCUMENT ME! */ public void fireBandModelValuesChanged(final BandModelEvent e) { for (final BandModelListener bml : listeners) { bml.bandModelValuesChanged(e); } } /** * DOCUMENT ME! */ public void fireBandModelValuesChanged() { for (final BandModelListener bml : listeners) { bml.bandModelValuesChanged(null); } } @Override public void bandChanged(final BandEvent e) { if (e.isSelectionLost()) { final BandModelEvent bme = new BandModelEvent(); bme.setSelectionLost(true); if ((e != null) && !e.isModelChanged()) { fireBandModelValuesChanged(bme); } else { fireBandModelChanged(bme); } fireBandModelSelectionChanged(); } else { if ((e != null) && !e.isModelChanged()) { fireBandModelValuesChanged(null); } else { fireBandModelChanged(null); } } } /** * DOCUMENT ME! * * @param min the min to set */ public void setMin(final double min) { this.min = min; for (final Band tmp : bands) { if (tmp instanceof BandModificationProvider) { ((BandModificationProvider)tmp).setMin(min); } } } /** * DOCUMENT ME! * * @param max the max to set */ public void setMax(final double max) { this.max = max; for (final Band tmp : bands) { if (tmp instanceof BandModificationProvider) { ((BandModificationProvider)tmp).setMax(max); } } } }