blob: e8b90d7a47db6f30848f0a6277b85982c6ab0fd7 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.resource.metadata;
import org.apache.uima.UIMA_UnsupportedOperationException;
/**
* Completely specifies a configuration parameter on a UIMA resource.
* <p>
* A configuration parameter consists of the following fields:
* <ul>
* <li>Name</li>
* <li>Description</li>
* <li>Type (String, Boolean, Integer, Long, Float or Double)</li>
* <li>Is the parameter multi-valued?</li>
* <li>Is a value mandatory?</li>
* <li>Overrides (see below)</li>
* </ul>
* <p>
* This interface does not provide access to the value of the parameter - that is a separate piece
* of metadata associated with the resource.
* <p>
* In an aggregate resource, configuration parameters may override component resources' parameters.
* This is done by the {@link #getOverrides() overrides} property. Overrides should always be
* specified for aggregate resources. If no overrides are specified, the default behavior is to
* override any parameter with the same name in any component resource. However, this usage is
* discouraged and will generate a warning in the log file; it exists for backwards compatibility
* purposes.
* <p>
* As with all {@link MetaDataObject}s, a <code>ConfigurationParameter</code> may or may not be
* modifiable. An application can find out by calling the {@link #isModifiable()} method.
*
*
*/
public interface ConfigurationParameter extends MetaDataObject {
/**
* Retrieves the name of this configuration parameter.
*
* @return the name of this configuration parameter.
*/
String getName();
/**
* Sets the name of this configuration parameter.
*
* @param aName
* the name of this configuration parameter.
*
* @throws org.apache.uima.UIMA_UnsupportedOperationException
* if this object is not modifiable
*/
void setName(String aName);
/**
* Retrieves the external name of this configuration parameter.
*
* @return the external name of this configuration parameter.
*/
String getExternalOverrideName();
/**
* Sets the external name of this configuration parameter.
*
* @param aExternalOverrideName
* the external name of this configuration parameter.
*
* @throws org.apache.uima.UIMA_UnsupportedOperationException
* if this object is not modifiable
*/
void setExternalOverrideName(String aExternalOverrideName);
/**
* Retrieves the description of this configuration parameter.
*
* @return the description of this configuration parameter.
*/
String getDescription();
/**
* Sets the description of this configuration parameter.
*
* @param aDescription
* the description of this configuration parameter.
*
* @throws org.apache.uima.UIMA_UnsupportedOperationException
* if this object is not modifiable
*/
void setDescription(String aDescription);
/**
* Retrieves the data type of this configuration parameter.
*
* @return the data type of this configuration parameter. This will be one of the TYPE constants
* defined on this interface.
*/
String getType();
/**
* Sets the data type of this configuration parameter.
*
* @param aType
* the data type of this configuration parameter. This must be one of the TYPE constants
* defined on this interface.
*
* @throws org.apache.uima.UIMA_IllegalArgumentException
* if <code>aType</code> is not a valid data type defined by a TYPE constant on this
* interface.
* @throws org.apache.uima.UIMA_UnsupportedOperationException
* if this object is not modifiable
*/
void setType(String aType);
/**
* Retrieves whether this parameter is multi-valued. Multi-valued parameters take an array of
* values, each of which must be of the appropriate data type.
*
* @return true if and only if this parameter is multi-valued.
*/
boolean isMultiValued();
/**
* Sets whether this parameter is multi-valued. Multi-valued parameters take an array of values,
* each of which must be of the appropriate data type.
*
* @param aMultiValued
* true if and only if this parameter is multi-valued.
*
* @throws org.apache.uima.UIMA_UnsupportedOperationException
* if this object is not modifiable
*/
void setMultiValued(boolean aMultiValued);
/**
* Retrieves whether this parameter is mandatory.
*
* @return true if and only if this parameter is mandatory.
*/
boolean isMandatory();
/**
* Sets whether this parameter is mandatory.
*
* @param aMandatory
* true if and only if this parameter is mandatory.
*
* @throws org.apache.uima.UIMA_UnsupportedOperationException
* if this object is not modifiable
*/
void setMandatory(boolean aMandatory);
/**
* Retrieves whether this parameter is published to clients. A non-published parameter is used
* only for initialization of the resource, and thereafter is not accessible to clients.
*
* @return true if and only if this parameter is published
*/
// public boolean isPublished();
/**
* Sets whether this parameter is published to clients. A non-published parameter is used only for
* initialization of the resource, and thereafter is not accessible to clients.
*
* @param aPublishes
* true if and only if this parameter is published
*
* @throws UIMA_UnsupportedOperationException
* if this object is not modifiable
*/
// public void setPublished(boolean aPublished);
/**
* Gets the parameters that are this parameter overrides. This is used for aggregate resources
* only. Overrides are expressed as strings of the form
* <i>componentName</i><code>/</code><i>parameterName</i>. For example the overrides
* <code>annotator1/parameter1</code> would override the parameter named <code>parameter1</code>
* within the component named <code>annotator1</code>.
*
* @return the parameters this this parameter overrides
*/
String[] getOverrides();
/**
* Sets the parameters that are this parameter overrides. This is used for aggregate resources
* only. Overrides are expressed as strings of the form
* <i>componentName</i><code>/</code><i>parameterName</i>. For example the overrides
* <code>annotator1/parameter1</code> would override the parameter named <code>parameter1</code>
* within the component named <code>annotator1</code>.
*
* @param aOverrides
* the parameters this this parameter overrides
*/
void setOverrides(String... aOverrides);
/**
* Adds an override to this configuration parameter.
*
* @param aOverride
* the override to add
*
* @throws UIMA_UnsupportedOperationException
* if this object is not modifiable
* @see #setOverrides(String[])
*/
void addOverride(String aOverride);
/**
* Removes an override from this configuration parameter.
*
* @param aOverride
* the override to remove. Must equal (via the equals() method) one of the overrides on
* this parameter, or this method will do nothing.
*
* @throws UIMA_UnsupportedOperationException
* if this object is not modifiable
* @see #setOverrides(String[])
*/
void removeOverride(String aOverride);
/**
* Identifies the String data type. Values of the parameter will be of type java.lang.String.
*/
String TYPE_STRING = "String";
/**
* Identifies the Boolean data type. Values of the parameter will be of type java.lang.Boolean.
*/
String TYPE_BOOLEAN = "Boolean";
/**
* Identifies the Integer data type. Values of the parameter will be of type java.lang.Integer.
*/
String TYPE_INTEGER = "Integer";
/**
* Identifies the Long data type. Values of the parameter will be of type java.lang.Long.
*/
String TYPE_LONG = "Long";
/**
* Identifies the Float data type. Values of the parameter will be of type java.lang.Float.
*/
String TYPE_FLOAT = "Float";
/**
* Identifies the Double data type. Values of the parameter will be of type java.lang.Double.
*/
String TYPE_DOUBLE = "Double";
}