blob: e491a6e900e9b985469be39316aeec78b926dd1a [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_IllegalArgumentException;
import org.apache.uima.UIMA_UnsupportedOperationException;
import org.apache.uima.cas.FSMatchConstraint;
/**
* <code>SimplePrecondition</code> defines a few simple conditions that can be evaluted against a
* {@link org.apache.uima.cas.CAS}.
* <p>
* A value in the CAS (see below) will be compared against the precondition's
* {@link #getComparisonValue() comparisonValue} property using the speicified
* {@link #getPredicate() predicate}.
* <p>
* The value in the CAS is specified by providing values for
* {@link #setFsIndexName(String) indexName},
* {@link #setFsMatchConstraint(FSMatchConstraint) fsMatchConstraint}, and
* {@link #setFeatureName(String) featureName}. If any FeatureStructure in the specified index
* matches the FS match constraint and has a feature value that satisfies this precondition's
* precicate, the precondition will be considered satisfied. If the index name is ommitted, the
* default Annotation index (if present) will be used.
* <p>
* The possible predicates are defined by constants on this interface. The currently avaialble
* predicates are:
* <ul>
* <li><code>EQUAL</code> - evaluates to true if and only if the values are equal (according to
* the equality rules of their data type).</li>
* <li><code>ELEMENT_OF</code> - the comparison value must be an array. Evaluates to true if and
* only if the test value is equal to one of the elements of the comparison array.</li>
* <li><code>LANGUAGE_SUBSUMED</code> - the comparison value must be an array of Strings, each of
* which is an ISO language identifier. Evaluates to true if and only if the test value is an ISO
* language identifier that is subsumed by one of the values of the comparison array. (For example,
* "en_US" is subsumed by "en.")</li>
* </ul>
*
* As with all {@link MetaDataObject}s, a <code>SimplePrecondition</code> may or may not be
* modifiable. An application can find out by calling the {@link #isModifiable()} method.
*/
public interface SimplePrecondition extends Precondition {
/**
* Gets the type of this precondition. Each sub-interface of <code>Precondition</code> has its
* own standard type identifier String. These identifier Strings are used instead of Java class
* names in order to ease portability of metadata to other languages.
*
* @return {@link #PRECONDITION_TYPE}
*/
public String getPreconditionType();
/**
* Retrieves the name of the FeatureStructure index containing FeatureStructures to be tested by
* this precondition.
*
* @return the name of the FS index, <code>null</code> if the default annotation index should be
* used
*/
public String getFsIndexName();
/**
* Sets the name of the FeatureStructure index containing FeatureStructures to be tested by this
* precondition.
*
* @param aIndexName
* the name of the FS index, <code>null</code> if the default annotation index should
* be used
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
public void setFsIndexName(String aIndexName);
/**
* Retrieves the FSMatchConstraint that determines which CAS feature structures will be tested by
* this precondition.
*
* @return the FS match constraint, <code>null</code> if none
*/
public FSMatchConstraint getFsMatchConstraint();
/**
* Sets the FSMatchConstraint that determines which CAS feature structures will be tested by this
* precondition.
*
* @param aConstraint
* the FS match constraint, <code>null</code> if none
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
public void setFsMatchConstraint(FSMatchConstraint aConstraint);
/**
* Gets the name of the feature to be tested.
*
* @return the feature name, <code>null</code> if none
*/
public String getFeatureName();
/**
* Sets the name of the feature to be tested.
*
* @param aFeatureName
* the feature name, <code>null</code> if none
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
public void setFeatureName(String aFeatureName);
/**
* Retrieves the literal value to which features' values will be compared.
*
* @return the value, which must be a String, Integer, Float, Boolean or an array of one of those
* four types.
*/
public Object getComparisonValue();
/**
* Sets the literal value to which features' values will be compared.
*
* @param aValue
* the comparison value, which must be a String, Integer, Float, Boolean, or an array of
* one of those four types.
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
public void setComparisonValue(Object aValue);
/**
* Retrieves the predicate used to compare the test value to the comparison value.
*
* @return a String that identifies the predicate used. This will always match one of the
* constants defined on this interface.
*/
public String getPredicate();
/**
* Sets the predicate used to compare the test value to the comparison value.
*
* @param aPredicate
* a String that identifies the predicate used. This must match one of the constants
* defined on this interface.
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
* @throws UIMA_IllegalArgumentException
* if the given value is not appropriate for the given attribute.
*/
public void setPredicate(String aPredicate);
/**
* Retrieves the deafult value for this precondition. This is the value returned if there is no
* applicable test value in the CAS.
*
* @return the default value
*/
public boolean getDefault();
/**
* Sets the deafult value for this precondition. This is the value returned if there is no
* applicable test value in the CAS.
*
* @param aDefault
* the default value
*
* @throws UIMA_UnsupportedOperationException
* if this <code>MetaDataObject</code> is not modifiable.
*/
public void setDefault(boolean aDefault);
/**
* The type identifier for this class of precondition. This is the return value of
* {@link #getPreconditionType()}.
*/
public static final String PRECONDITION_TYPE = "SIMPLE";
/**
* Identifies the EQUAL predicate. This predicate evaluates to true if and only if the test value
* and the comparison value are of the same data type and are equal, according to the equality
* rules of that data type.
*/
public static final String EQUAL = "Equal";
/**
* Identifies the ELEMENT_OF predicate. For this predicate, the comparison value must be an array.
* ELEMENT_OF evaluates to true if and only if the test value is equal to one of the elements of
* the array. (If the comparison value is not an array, ELEMENT_OF always evaluates to false.)
*/
public static final String ELEMENT_OF = "ElementOf";
/**
* Identifies the LANGUAGE_SUBSUMED predicate. For this predicate, the comparison value must be an
* array of ISO language identifiers. LANGUAGE_SUBSUMED evaluates to true if and only if the test
* value is an ISO language identifier that is subsumed by one of the values of the comparison
* array. (For example, "en_US" is subsumed by "en.")
*/
public static final String LANGUAGE_SUBSUMED = "LanguageSubsumed";
}