package org.weborganic.furi;
import java.util.Set;
/**
* An interface to hold a collection of parameters for use during the expansion process.
*
* @author Christophe Lauret
* @version 5 November 2009
*/
public interface Parameters {
/**
* Returns the value for the specified parameter.
*
* @param name The name of the parameter.
*
* @return The value for this parameter or <code>null</code> if not specified.
*/
String getValue(String name);
/**
* Returns the values for the specified parameter.
*
* @param name The name of the parameter.
*
* @return The values for this parameter or <code>null</code> if not specified.
*/
String[] getValues(String name);
/**
* Indicates whether the parameters for the given name has a value.
*
* A parameter has a value if: - it is defined in the parameter list - its array of value has at
* least one value that is not an empty string
*
* @param name The name of the parameter.
*
* @return <code>true</code> if it has a value; <code>false</code> otherwise.
*/
boolean exists(String name);
/**
* Indicates whether the parameters for the given name has a value.
*
* <p>A parameter has a value if:
* <ul>
* <li>It is defined in the parameter list</li>
* <li>Its array of value has at least one value that is not an empty string</li>
* </ul>
*
* @param name The name of the parameter.
*
* @return <code>true</code> if it has a value;
* <code>false</code> otherwise.
*/
boolean hasValue(String name);
/**
* Returns the set of parameter names as an unmodifiable set.
*
* @return The set of parameter names as an unmodifiable set.
*/
Set<String> names();
/**
* Set a parameter with only one value.
*
* @param name The name of the parameter.
* @param value The value.
*/
void set(String name, String value);
/**
* Set a parameter with only multiple values.
*
* @param name The name of the parameter.
* @param values The values.
*/
void set(String name, String[] values);
}