summaryrefslogtreecommitdiff
path: root/elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization
diff options
context:
space:
mode:
Diffstat (limited to 'elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization')
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/AbstractParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ChainedParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/EmptyParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/ListParameterization.java91
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/MergedParameterization.java30
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/Parameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/SerializedParameterization.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackParameters.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/TrackedParameter.java1
-rw-r--r--elki/src/main/java/de/lmu/ifi/dbs/elki/utilities/optionhandling/parameterization/UnParameterization.java1
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 {
/**