package de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization;
/*
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
Copyright (C) 2014
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .
*/
import java.util.Collection;
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.parameters.ClassParameter;
import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Parameter;
/**
* Interface for object parameterizations.
*
* See the {@link de.lmu.ifi.dbs.elki.utilities.optionhandling} package for documentation!
*
* @apiviz.landmark
* @apiviz.uses Parameter
* @apiviz.uses ParameterException
*
* @author Erich Schubert
*/
public interface Parameterization {
/**
* Get the option value from the Parameterization.
*
* Note: this method returns success; the actual value can be obtained from
* {@code opt} itself!
*
* In particular {@link #grab} can return {@code true} when
* {@link de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag#getValue Flag.getValue()}
* returns {@code false}! Instead the semantics of {@code grab} are those of {@code Parameter#isDefined()}.
*
* This method will catch {@link ParameterException}s and store them to be
* retrieved by {@link #getErrors}.
*
* @param opt Option to add
* @return if the value is available (= readable)
*/
public boolean grab(Parameter> opt);
/**
* Assign a value for an option, but not using default values and throwing
* exceptions on error.
*
* @param opt Parameter to set
* @return Success code
* @throws ParameterException on assignment errors.
*/
public boolean setValueForOption(Parameter> opt) throws ParameterException;
/**
* Get the configuration errors thrown in {@link #grab}
*
* @return Configuration errors encountered
*/
public Collection getErrors();
/**
* Report a configuration error.
*
* @param e Destination to report errors to
*/
public void reportError(ParameterException e);
/**
* Check for unused parameters
*
* @return {@code true} if at least one parameter was not consumed
*/
public boolean hasUnusedParameters();
/**
* Check a parameter constraint.
*
* @param constraint Parameter constraint
* @return test result
*/
public boolean checkConstraint(GlobalParameterConstraint constraint);
/**
* Descend parameterization tree into sub-option.
*
* Note: this is done automatically by a {@link ClassParameter#instantiateClass}.
* You only need to call this when you want to expose the tree structure
* without offering a class choice as parameter.
*
* @param option Option subtree
* @return Parameterization
*/
public Parameterization descend(Object option);
/**
* Return true when there have been errors.
*
* @return Success code
*/
public boolean hasErrors();
/**
* Try to instantiate a particular class.
*
* @param return type
* @param r Restriction class
* @param c Base class
* @return class instance or null
*/
public C tryInstantiate(Class r, Class> c);
/**
* Try to instantiate a particular class.
*
* @param return type
* @param c Base class
* @return class instance or null
*/
public C tryInstantiate(Class c);
}