/* IterableSensitivity.java created 2007-12-05
*
*/
package org.signalml.plugin.newartifact.data;
import org.signalml.method.InputDataException;
import org.signalml.method.iterator.IterableNumericParameter;
/** IterableSensitivity
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class NewIterableSensitivity implements IterableNumericParameter {
private static final Float STEP_SIZE = new Float(0.1F);
private static final Float DEFAULT_START = new Float(0F);
private static final Float DEFAULT_END = new Float(100F);
private NewArtifactParameters parameters;
private NewArtifactType artifactType;
public NewIterableSensitivity(NewArtifactParameters parameters, NewArtifactType artifactType) {
if (parameters == null) {
throw new NullPointerException("No parameters");
}
if (artifactType == null) {
throw new NullPointerException("No artifact type");
}
this.parameters = parameters;
this.artifactType = artifactType;
}
public NewArtifactParameters getParameters() {
return parameters;
}
public NewArtifactType getArtifactType() {
return artifactType;
}
@Override
public String getName() {
return artifactType.toString();
}
@Override
public Class<?> getValueClass() {
return Float.class;
}
@Override
public Object getValue() {
return new Float(parameters.getSensitivity(artifactType));
}
@Override
public void setValue(Object value) throws InputDataException {
if (!(value instanceof Float)) {
throw new ClassCastException("Bad iterable value class");
}
// TODO any validation?
parameters.setSensitivity(artifactType, ((Float) value).floatValue());
}
@Override
public Object setIterationValue(Object startValue, Object endValue, int iteration, int totalIterations) {
if (!(startValue instanceof Float)) {
throw new ClassCastException("Bad iterable value class");
}
if (!(endValue instanceof Float)) {
throw new ClassCastException("Bad iterable value class");
}
float start = ((Float) startValue).floatValue();
float end = ((Float) endValue).floatValue();
float step = (end-start) / totalIterations;
float value = start + (step * iteration);
// TODO any validation?
parameters.setSensitivity(artifactType, value);
return new Float(value);
}
@Override
public Object getDefaultStartValue() {
return DEFAULT_START;
}
@Override
public Object getDefaultEndValue() {
return DEFAULT_END;
}
@Override
public Comparable<? extends Number> getMaximum() {
// no max
return null;
}
@Override
public Comparable<? extends Number> getMinimum() {
// no min
return null;
}
@Override
public Number getStepSize() {
return STEP_SIZE;
}
@Override
public Object[] getArguments() {
return new Object[0];
//return artifactType.getArguments();
}
@Override
public String[] getCodes() {
return new String[] { "newArtifactMethod.iterableSensitivity." + artifactType.toString() };
}
@Override
public String getDefaultMessage() {
return ""; //TODO
//return artifactType.getDefaultMessage();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof NewIterableSensitivity) {
NewIterableSensitivity s = (NewIterableSensitivity) obj;
return (s.parameters == this.parameters) && (s.artifactType == this.artifactType);
}
return false;
}
}