/*
* Copyright (C) 2010 Brockmann Consult GmbH (info@brockmann-consult.de)
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at your option)
* any later version.
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, see http://www.gnu.org/licenses/
*/
package org.esa.snap.ui;
import com.bc.ceres.core.Assert;
import org.esa.snap.core.datamodel.ImageInfo;
import org.esa.snap.core.datamodel.Scaling;
import org.esa.snap.core.datamodel.Stx;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
/**
* Unstable interface. Do not use.
*
* @author Norman Fomferra
* @version $Revision$ $Date$
* @since BEAM 4.5.1
*/
public abstract class AbstractImageInfoEditorModel implements ImageInfoEditorModel {
private final ImageInfo imageInfo;
private final EventListenerList listenerList;
private Scaling scaling;
private Stx stx;
private String name;
private String unit;
private Double histogramViewGain;
private Double minHistogramViewSample;
private Double maxHistogramViewSample;
protected AbstractImageInfoEditorModel(ImageInfo imageInfo) {
this.imageInfo = imageInfo;
this.listenerList = new EventListenerList();
}
@Override
public ImageInfo getImageInfo() {
return imageInfo;
}
@Override
public void setDisplayProperties(String name, String unit, Stx stx, Scaling scaling) {
setParameterName(name);
setParameterUnit(unit);
setSampleScaling(scaling);
setSampleStx(stx);
fireStateChanged();
}
@Override
public String getParameterName() {
return name;
}
private void setParameterName(String name) {
this.name = name;
}
@Override
public String getParameterUnit() {
return unit;
}
private void setParameterUnit(String unit) {
this.unit = unit;
}
@Override
public Scaling getSampleScaling() {
return scaling;
}
@Override
public void setSampleScaling(Scaling scaling) {
Assert.notNull(scaling, "scaling");
this.scaling = scaling;
}
@Override
public Stx getSampleStx() {
return stx;
}
private void setSampleStx(Stx stx) {
Assert.notNull(stx, "stx");
this.stx = stx;
}
@Override
public double getMinSample() {
return scaling == null ? 0 : stx.getMinimum();
}
@Override
public double getMaxSample() {
return scaling == null ? 0 : stx.getMaximum();
}
@Override
public boolean isHistogramAvailable() {
return getHistogramBins() != null && getHistogramBins().length > 0;
}
@Override
public int[] getHistogramBins() {
return stx == null ? null : stx.getHistogramBins();
}
@Override
public double getMinHistogramViewSample() {
if (minHistogramViewSample != null) {
return minHistogramViewSample;
}
return getMinSample();
}
@Override
public void setMinHistogramViewSample(double minViewSample) {
minHistogramViewSample = minViewSample;
}
@Override
public double getMaxHistogramViewSample() {
if (maxHistogramViewSample != null) {
return maxHistogramViewSample;
}
return getMaxSample();
}
@Override
public void setMaxHistogramViewSample(double maxViewSample) {
maxHistogramViewSample = maxViewSample;
}
@Override
public double getHistogramViewGain() {
if (histogramViewGain != null) {
return histogramViewGain;
}
return 1.0;
}
@Override
public void setHistogramViewGain(double gain) {
histogramViewGain = gain;
}
@Override
public void addChangeListener(ChangeListener l) {
listenerList.add(ChangeListener.class, l);
}
@Override
public void removeChangeListener(ChangeListener l) {
listenerList.remove(ChangeListener.class, l);
}
@Override
public void fireStateChanged() {
final ChangeEvent event = new ChangeEvent(this);
ChangeListener[] changeListeners = listenerList.getListeners(ChangeListener.class);
for (ChangeListener changeListener : changeListeners) {
changeListener.stateChanged(event);
}
}
}