diff options
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization')
10 files changed, 88 insertions, 41 deletions
diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java index 4980af5f..67180790 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Abstract class with shared code for parameterization handling. * * @author Erich Schubert + * @since 0.3 */ public abstract class AbstractParameterization implements Parameterization { // TODO: refactor "tryInstantiate" even in a higher class? diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java index 98cfa5a9..f4f8ca3c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * for examples. * * @author Erich Schubert + * @since 0.3 */ public class ChainedParameterization extends AbstractParameterization { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java index fe1de0be..c89a1420 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java @@ -29,6 +29,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Parameterization handler that only allows the use of default values. * * @author Erich Schubert + * @since 0.3 */ public class EmptyParameterization extends AbstractParameterization { @Override diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java index c67533a6..542c98ef 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java @@ -33,24 +33,25 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; -import de.lmu.ifi.dbs.elki.utilities.pairs.Pair; /** * Parameterization handler using a List and OptionIDs, for programmatic use. * * @author Erich Schubert + * @since 0.3 */ public class ListParameterization extends AbstractParameterization { /** * The actual parameters, for storage */ - LinkedList<Pair<OptionID, Object>> parameters = new LinkedList<>(); + List<ParameterPair> parameters; /** * Default constructor. */ public ListParameterization() { super(); + this.parameters = new LinkedList<>(); } /** @@ -58,10 +59,11 @@ public class ListParameterization extends AbstractParameterization { * * @param dbParameters existing parameter collection */ - public ListParameterization(Collection<Pair<OptionID, Object>> dbParameters) { + public ListParameterization(Collection<ParameterPair> dbParameters) { this(); - for (Pair<OptionID, Object> pair : dbParameters) { - addParameter(pair.first, pair.second); + this.parameters = new LinkedList<>(); + for(ParameterPair pair : dbParameters) { + addParameter(pair.option, pair.value); } } @@ -71,7 +73,7 @@ public class ListParameterization extends AbstractParameterization { * @param optionid Option ID */ public void addFlag(OptionID optionid) { - parameters.add(new Pair<OptionID, Object>(optionid, Flag.SET)); + parameters.add(new ParameterPair(optionid, Flag.SET)); } /** @@ -81,7 +83,7 @@ public class ListParameterization extends AbstractParameterization { * @param value Value */ public void addParameter(OptionID optionid, Object value) { - parameters.add(new Pair<>(optionid, value)); + parameters.add(new ParameterPair(optionid, value)); } /** @@ -90,7 +92,7 @@ public class ListParameterization extends AbstractParameterization { * @param flag Flag to add, if set */ public void forwardOption(Flag flag) { - if (flag.isDefined() && flag.getValue().booleanValue()) { + if(flag.isDefined() && flag.getValue().booleanValue()) { addFlag(flag.getOptionID()); } } @@ -101,19 +103,19 @@ public class ListParameterization extends AbstractParameterization { * @param param Parameter to add */ public void forwardOption(Parameter<?> param) { - if (param.isDefined()) { + if(param.isDefined()) { addParameter(param.getOptionID(), param.getValue()); } } @Override public boolean setValueForOption(Parameter<?> opt) throws ParameterException { - Iterator<Pair<OptionID, Object>> iter = parameters.iterator(); - while (iter.hasNext()) { - Pair<OptionID, Object> pair = iter.next(); - if (pair.first == opt.getOptionID()) { + Iterator<ParameterPair> iter = parameters.iterator(); + while(iter.hasNext()) { + ParameterPair pair = iter.next(); + if(pair.option == opt.getOptionID()) { iter.remove(); - opt.setValue(pair.second); + opt.setValue(pair.value); return true; } } @@ -125,7 +127,7 @@ public class ListParameterization extends AbstractParameterization { * * @return Unused parameters. */ - public List<Pair<OptionID, Object>> getRemainingParameters() { + public List<ParameterPair> getRemainingParameters() { return parameters; } @@ -145,9 +147,9 @@ public class ListParameterization extends AbstractParameterization { @Override public String toString() { StringBuilder buf = new StringBuilder(); - for (Pair<OptionID, Object> pair : parameters) { - buf.append('-').append(pair.getFirst().toString()).append(' '); - buf.append(pair.getSecond().toString()).append(' '); + for(ParameterPair pair : parameters) { + buf.append('-').append(pair.option.toString()).append(' '); + buf.append(pair.value.toString()).append(' '); } return buf.toString(); } @@ -159,16 +161,53 @@ public class ListParameterization extends AbstractParameterization { */ public ArrayList<String> serialize() { ArrayList<String> params = new ArrayList<>(); - for (Pair<OptionID, Object> pair : parameters) { - params.add("-" + pair.getFirst().toString()); - if (pair.getSecond() instanceof String) { - params.add((String) pair.getSecond()); - } else if (pair.getSecond() instanceof Class) { - params.add(((Class<?>) pair.getSecond()).getCanonicalName()); - } else { // Fallback: - params.add(pair.getSecond().toString()); + for(ParameterPair pair : parameters) { + params.add("-" + pair.option.toString()); + if(pair.value instanceof String) { + params.add((String) pair.value); + } + else if(pair.value instanceof Class) { + params.add(((Class<?>) pair.value).getCanonicalName()); + } + else { // Fallback: + params.add(pair.value.toString()); } } return params; } + + /** + * Parameter pair, package-private. + * + * @author Erich Schubert + * + * @apiviz.exclude + */ + static final class ParameterPair { + /** + * Option key. + */ + public OptionID option; + + /** + * Option value. + */ + public Object value; + + /** + * Constructor. + * + * @param key Option key + * @param value Option value + */ + public ParameterPair(OptionID key, Object value) { + this.option = key; + this.value = value; + } + + @Override + public String toString() { + return "-" + option.getName() + " " + value; + } + } } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java index 4faa3c60..926e660f 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java @@ -23,17 +23,16 @@ package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization; along with this program. If not, see <http://www.gnu.org/licenses/>. */ -import java.util.Collection; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import de.lmu.ifi.dbs.elki.utilities.ClassGenericsUtil; import de.lmu.ifi.dbs.elki.utilities.optionhandling.InternalParameterizationErrors; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.constraints.GlobalParameterConstraint; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization.ParameterPair; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; -import de.lmu.ifi.dbs.elki.utilities.pairs.Pair; /** * This configuration can be "rewound" to allow the same values to be consumed @@ -42,6 +41,7 @@ import de.lmu.ifi.dbs.elki.utilities.pairs.Pair; * e.g. in visualization classes. * * @author Erich Schubert + * @since 0.3 */ // TODO: Can we merge MergedParameterization and TrackParameters into one? public class MergedParameterization implements Parameterization { @@ -58,7 +58,7 @@ public class MergedParameterization implements Parameterization { /** * Parameters to rewind. */ - final private List<Pair<OptionID, Object>> used; + final private List<ParameterPair> used; /** * Constructor. @@ -79,7 +79,7 @@ public class MergedParameterization implements Parameterization { * @param current Current parameterization to re-used * @param used Used parameters list. */ - private MergedParameterization(Parameterization inner, ListParameterization current, List<Pair<OptionID, Object>> used) { + private MergedParameterization(Parameterization inner, ListParameterization current, List<ParameterPair> used) { super(); this.inner = inner; this.current = current; @@ -91,8 +91,8 @@ public class MergedParameterization implements Parameterization { */ public void rewind() { synchronized(used) { - for(Pair<OptionID, Object> pair : used) { - current.addParameter(pair.first, pair.second); + for(ParameterPair pair : used) { + current.addParameter(pair.option, pair.value); } used.clear(); } @@ -102,7 +102,7 @@ public class MergedParameterization implements Parameterization { public boolean setValueForOption(Parameter<?> opt) throws ParameterException { try { if(current.setValueForOption(opt)) { - used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getValue())); + used.add(new ParameterPair(opt.getOptionID(), opt.getValue())); return true; } } @@ -110,10 +110,10 @@ public class MergedParameterization implements Parameterization { current.reportError(e); } if(inner.setValueForOption(opt)) { - used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getValue())); + used.add(new ParameterPair(opt.getOptionID(), opt.getValue())); return true; } - used.add(new Pair<OptionID, Object>(opt.getOptionID(), opt.getDefaultValue())); + used.add(new ParameterPair(opt.getOptionID(), opt.getDefaultValue())); return false; } @@ -128,7 +128,7 @@ public class MergedParameterization implements Parameterization { public Collection<ParameterException> getErrors() { return current.getErrors(); } - + @Override public boolean hasErrors() { return current.hasErrors(); @@ -142,11 +142,11 @@ public class MergedParameterization implements Parameterization { @Override public boolean grab(Parameter<?> opt) { try { - if (setValueForOption(opt)) { + if(setValueForOption(opt)) { return true; } // Try default value instead. - if (opt.tryDefaultValue()) { + if(opt.tryDefaultValue()) { return true; } // No value available. @@ -175,7 +175,7 @@ public class MergedParameterization implements Parameterization { return ClassGenericsUtil.tryInstantiate(r, c, this); } catch(Exception e) { - reportError(new InternalParameterizationErrors("Error instantiating internal class: "+c.getName(), e)); + reportError(new InternalParameterizationErrors("Error instantiating internal class: " + c.getName(), e)); return null; } } @@ -186,7 +186,7 @@ public class MergedParameterization implements Parameterization { return ClassGenericsUtil.tryInstantiate(c, c, this); } catch(Exception e) { - reportError(new InternalParameterizationErrors("Error instantiating internal class: "+c.getName(), e)); + reportError(new InternalParameterizationErrors("Error instantiating internal class: " + c.getName(), e)); return null; } } diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java index f165942e..29c22e27 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * @apiviz.uses ParameterException * * @author Erich Schubert + * @since 0.3 */ public interface Parameterization { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java index b5ba3e58..2837983d 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java @@ -39,6 +39,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * When building parameter lists, use {@link ListParameterization} where possible. * * @author Erich Schubert + * @since 0.3 */ public class SerializedParameterization extends AbstractParameterization { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java index 5429ea8b..4b8ea073 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java @@ -42,6 +42,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * All actual Parameterization operations are forwarded to the inner class. * * @author Erich Schubert + * @since 0.3 * * @apiviz.composedOf TrackedParameter */ diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java index caa87440..e039f492 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java @@ -28,6 +28,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * Class containing an object, and the associated value. * * @author Erich Schubert + * @since 0.3 */ public class TrackedParameter { /** diff --git a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java index a1d58676..ea48655c 100644 --- a/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java +++ b/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java @@ -40,6 +40,7 @@ import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter; * in a non-recursive way. * * @author Erich Schubert + * @since 0.3 */ public class UnParameterization implements Parameterization { /** |