/*
* RapidMiner
*
* Copyright (C) 2001-2011 by Rapid-I and the contributors
*
* Complete list of developers available at our web site:
*
* http://rapid-i.com
*
* 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 http://www.gnu.org/licenses/.
*/
package com.rapidminer.parameter;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import com.rapidminer.Process;
import com.rapidminer.gui.renderer.Renderer;
import com.rapidminer.operator.Operator;
/**
* This interface defines that instance are able to handle parameters. In RapidMiner,
* this if for example true for the class {@link Operator} but also for the {@link Renderer}s.
*
* @author Ingo Mierswa
*/
public interface ParameterHandler {
/** Returns a collection of all parameters of this parameter handler. */
public Parameters getParameters();
/** Sets all parameters of this operator. The given parameters are not allowed to be null and must
* correspond to the parameter types defined by this parameter handler. */
public void setParameters(Parameters parameters);
/**
* Sets the given single parameter to the Parameters object of this
* operator. For parameter list the method
* {@link #setListParameter(String, List)} should be used.
*/
public void setParameter(String key, String value);
/**
* Sets the given parameter list to the Parameters object of this operator.
* For single parameters the method {@link #setParameter(String, String)}
* should be used.
*/
public void setListParameter(String key, List<String[]> list);
/**
* Returns a single parameter retrieved from the {@link Parameters} of this
* Operator.
*/
public Object getParameter(String key) throws UndefinedParameterError;
/** Returns true iff the parameter with the given name is set. */
public boolean isParameterSet(String key) throws UndefinedParameterError;
/** Returns a single named parameter and casts it to String. */
public String getParameterAsString(String key) throws UndefinedParameterError;
/** Returns a single named parameter and casts it to char. */
public char getParameterAsChar(String key) throws UndefinedParameterError;
/** Returns a single named parameter and casts it to int. */
public int getParameterAsInt(String key) throws UndefinedParameterError;
/** Returns a single named parameter and casts it to double. */
public double getParameterAsDouble(String key) throws UndefinedParameterError;
/**
* Returns a single named parameter and casts it to boolean. This method
* never throws an exception since there are no non-optional boolean
* parameters.
*/
public boolean getParameterAsBoolean(String key);
/**
* Returns a single named parameter and casts it to List. The list returned
* by this method contains the user defined key-value pairs. Each element is
* an String array of length 2. The first element is the key, the
* second the parameter value.
*/
public List<String[]> getParameterList(String key) throws UndefinedParameterError;
/**
* Returns a Pair of Strings, the Strings are in the order of type definition of the
* subtypes.
*/
public String[] getParameterTupel(String key) throws UndefinedParameterError;
/** Returns a single named parameter and casts it to Color. */
public java.awt.Color getParameterAsColor(String key) throws UndefinedParameterError;
/**
* Returns a single named parameter and tries to handle it as URL. If this works, this
* method creates an input stream from this URL and delivers it. If not, this method tries
* to cast the parameter value to a file. This file is already resolved against the process
* definition file.
* If the parameter name defines a non-optional parameter which is not set and has no default value, a
* UndefinedParameterError will be thrown. If the parameter is optional and
* was not set this method returns null. Operators should always use this
* method instead of directly using the method
* {@link Process#resolveFileName(String)}.
*/
public InputStream getParameterAsInputStream(String key) throws UndefinedParameterError, IOException;
/**
* Returns a single named parameter and casts it to File. This file is
* already resolved against the process definition file. If the parameter name defines a
* non-optional parameter which is not set and has no default value, a
* UndefinedParameterError will be thrown. If the parameter is optional and
* was not set this method returns null. Operators should always use this
* method instead of directly using the method
* {@link Process#resolveFileName(String)}.
*/
public java.io.File getParameterAsFile(String key) throws UndefinedParameterError;
/**
* Returns a single named parameter and casts it to File. This file is
* already resolved against the process definition file. If the parameter name defines a
* non-optional parameter which is not set and has no default value, a
* UndefinedParameterError will be thrown. If the parameter is optional and
* was not set this method returns null. Operators should always use this
* method instead of directly using the method
* {@link Process#resolveFileName(String)}.
*/
public java.io.File getParameterAsFile(String key, boolean createMissingDirectories) throws UndefinedParameterError;
/** Returns a single named parameter and casts it to a double matrix. */
public double[][] getParameterAsMatrix(String key) throws UndefinedParameterError;
/** Returns a list of all defined parameter types for this handler. */
public List<ParameterType> getParameterTypes();
}