package dr.inferencexml.model;
import dr.inference.model.Bounds;
import dr.inference.model.Parameter;
import dr.inference.model.Statistic;
import dr.xml.*;
/**
* Created by Guy Baele on 18/12/15.
*/
public class ImmutableParameterParser extends AbstractXMLObjectParser {
public static final String IMMUTABLE_PARAMETER = "immutableParameter";
public Object parseXMLObject(XMLObject xo) throws XMLParseException {
final Statistic statistic = (Statistic) xo.getChild(Statistic.class);
Parameter.Abstract immutableParameter = new Parameter.Abstract() {
public void setParameterValueNotifyChangedAll(int dim, double value) {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
public void setParameterValueQuietly(int dim, double value) {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
public void storeValues() {
//do nothing
}
public void restoreValues() {
//do nothing
}
public void acceptValues() {
//do nothing
}
public int getDimension() {
return statistic.getDimension();
}
public void setParameterValue(int dim, double value) {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
public double getParameterValue(int dim) {
return statistic.getStatisticValue(dim);
}
public String getParameterName() {
if (getId() == null)
return "immutable." + statistic.getStatisticName();
return getId();
}
public void adoptValues(Parameter source) {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
public void addDimension(int index, double value) {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
public double removeDimension(int index) {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
public void addBounds(Bounds<Double> bounds) {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
public Bounds<Double> getBounds() {
throw new RuntimeException("Forbidden call to ImmutableParameter.");
}
};
return immutableParameter;
}
public XMLSyntaxRule[] getSyntaxRules() {
return rules;
}
private final XMLSyntaxRule[] rules = {
new ElementRule(Statistic.class),
};
public String getParserDescription() {
return "An immutable parameter generated from a statistic.";
}
public Class getReturnType() {
return Parameter.class;
}
public String getParserName() {
return IMMUTABLE_PARAMETER;
}
}