package hep.aida.ref.plotter; /** * * @author The FreeHEP team @ SLAC */ public abstract class AbstractStyleParameter { private String name; private String defaultValue; private String currentValue = null; private String[] noOptions = new String[0]; protected String[] possibleValues = null; AbstractStyleParameter(String name, String defaultValue) { this(name, defaultValue, null); } AbstractStyleParameter(String name, String defaultValue, String[] possibleValues) { this.name = name; setDefaultValue(defaultValue); this.possibleValues = possibleValues; } protected String name() { return name; } protected void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } protected boolean setAllowedValues(String[] possibleValues) { if (!checkValue(parameterValue(), possibleValues)) return false; this.possibleValues = possibleValues; return true; } protected boolean hasAllowedValues() { return possibleValues != null; } protected String[] allowedValues() { if ( hasAllowedValues() ) return possibleValues; return noOptions; } protected boolean isParameterValueSet() { return currentValue != null; } public String parValue() { return parameterValue(); } protected String parameterValue() { String parValue; if ( isParameterValueSet() ) parValue = currentValue; else parValue = defaultValue(); if ( ! hasAllowedValues() || parValue == null ) return parValue; try { int index = Integer.parseInt(parValue); if ( index >= allowedValues().length ) return parValue; return allowedValues()[index]; } catch (NumberFormatException nfe) { return parValue; } } public String defaultValue() { return defaultValue; } protected void reset() { currentValue = null; } protected boolean setParameter() { reset(); return true; } protected boolean setParameter(String parValue) { currentValue = parValue; return isValueAllowed(parValue); } protected boolean isCurrentValueAllowed() { return checkValue(parameterValue()); } protected boolean isValueAllowed(String val) { return checkValue(val); } private boolean checkValue(String val) { return checkValue(val, possibleValues); } private boolean checkValue(String val, String[] allowedValues) { if ( allowedValues == null ) return true; if ( val == null ) return (allowedValues == null); for ( int i = 0; i < allowedValues.length; i++ ) if ( val.equals(allowedValues[i]) ) return true; try { int index = Integer.parseInt(val); if ( index < 0 || index >= allowedValues.length ) return false; return true; } catch (NumberFormatException nfe) { return false; } } public abstract Class type(); }