You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by mb...@apache.org on 2008/02/04 13:48:09 UTC
svn commit: r618258 - in /incubator/uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/cas/impl/FeaturePathImpl.java
test/java/org/apache/uima/cas/impl/FeaturePathTest.java
Author: mbaessler
Date: Mon Feb 4 04:48:08 2008
New Revision: 618258
URL: http://svn.apache.org/viewvc?rev=618258&view=rev
Log:
UIMA-740
update FeaturePath implementation for an empty feature path
https://issues.apache.org/jira/browse/UIMA-740
Modified:
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeaturePathImpl.java
incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/FeaturePathTest.java
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeaturePathImpl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeaturePathImpl.java?rev=618258&r1=618257&r2=618258&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeaturePathImpl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FeaturePathImpl.java Mon Feb 4 04:48:08 2008
@@ -199,8 +199,10 @@
// we have the last token, check for built-in functions
int index = -1;
if ((index = token.indexOf(BUILT_IN_FUNCTION_SEPARATOR)) != -1) {
- // we have a built-in function that is separated with a ":"
- this.featurePathElementNames.add(token.substring(0, index));
+ if (index > 0) {
+ // we have a built-in function that is separated with a ":"
+ this.featurePathElementNames.add(token.substring(0, index));
+ }
// get built-in function
String builtInFunctionName = token.substring(index + 1)
.toLowerCase();
@@ -229,42 +231,46 @@
*/
public void typeInit(Type featurePathType) throws CASException {
- LowLevelTypeSystem llTypeSystem = ((TypeImpl) featurePathType)
- .getTypeSystem().getLowLevelTypeSystem();
+ // do feature path type initialization only if a featurePath is available
+ if (this.featurePathElementNames.size() > 0) {
- // store featurePathType
- this.featurePathBaseType = featurePathType;
- this.featurePathBaseTypeCode = llTypeSystem
- .ll_getCodeForType(featurePathType);
-
- // validate featurePath for given type
- PathValid pathValid = TypeSystemUtils.isPathValid(featurePathType,
- this.featurePathElementNames);
- if (PathValid.NEVER == pathValid) {
- // invalid featurePath - throw an configuration exception
- throw new CASException(
- MESSAGE_DIGEST,
- "ERROR_VALIDATE_FEATURE_PATH",
- new Object[] { this.featurePathString, featurePathType.getName() });
- } else if (PathValid.ALWAYS == pathValid) {
- // the featurePath is always valid, so we can resolve and cache the
- // path elements
- this.ll_featurePathElements = new ArrayList<Integer>();
- this.featurePathElements = new ArrayList<Feature>(); // reset object
- Type currentType = featurePathType;
- // iterate over all featurePathNames and store the resolved CAS
- // feature in the featurePathElements list
- for (int i = 0; i < this.featurePathElementNames.size(); i++) {
- // get feature
- Feature feature = currentType
- .getFeatureByBaseName(this.featurePathElementNames.get(i));
- // store feature code
- this.ll_featurePathElements.add(llTypeSystem
- .ll_getCodeForFeature(feature));
- this.featurePathElements.add(feature);
+ LowLevelTypeSystem llTypeSystem = ((TypeImpl) featurePathType)
+ .getTypeSystem().getLowLevelTypeSystem();
+
+ // store featurePathType
+ this.featurePathBaseType = featurePathType;
+ this.featurePathBaseTypeCode = llTypeSystem
+ .ll_getCodeForType(featurePathType);
+
+ // validate featurePath for given type
+ PathValid pathValid = TypeSystemUtils.isPathValid(featurePathType,
+ this.featurePathElementNames);
+ if (PathValid.NEVER == pathValid) {
+ // invalid featurePath - throw an configuration exception
+ throw new CASException(MESSAGE_DIGEST,
+ "ERROR_VALIDATE_FEATURE_PATH", new Object[] {
+ this.featurePathString, featurePathType.getName() });
+ } else if (PathValid.ALWAYS == pathValid) {
+ // the featurePath is always valid, so we can resolve and cache the
+ // path elements
+ this.ll_featurePathElements = new ArrayList<Integer>();
+ this.featurePathElements = new ArrayList<Feature>(); // reset
+ // object
+ Type currentType = featurePathType;
+ // iterate over all featurePathNames and store the resolved CAS
+ // feature in the featurePathElements list
+ for (int i = 0; i < this.featurePathElementNames.size(); i++) {
+ // get feature
+ Feature feature = currentType
+ .getFeatureByBaseName(this.featurePathElementNames.get(i));
+ // store feature code
+ this.ll_featurePathElements.add(llTypeSystem
+ .ll_getCodeForFeature(feature));
+ this.featurePathElements.add(feature);
- // get current feature type to resolve the next feature name
- currentType = feature.getRange();
+ // get current feature type to resolve the next feature name
+ currentType = feature.getRange();
+ }
}
}
}
@@ -284,12 +290,15 @@
* @see org.apache.uima.cas.FeaturePath#getBooleanValue(org.apache.uima.cas.FeatureStructure)
*/
public Boolean getBooleanValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_BOOLEAN)) {
- return featurePathValue.getBooleanValue();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_BOOLEAN)) {
+ return featurePathValue.getBooleanValue();
+ }
}
return null;
}
@@ -300,12 +309,15 @@
* @see org.apache.uima.cas.FeaturePath#getByteValue(org.apache.uima.cas.FeatureStructure)
*/
public Byte getByteValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_BYTE)) {
- return featurePathValue.getByteValue();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_BYTE)) {
+ return featurePathValue.getByteValue();
+ }
}
return null;
}
@@ -316,12 +328,15 @@
* @see org.apache.uima.cas.FeaturePath#getDoubleValue(org.apache.uima.cas.FeatureStructure)
*/
public Double getDoubleValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_DOUBLE)) {
- return featurePathValue.getDoubleValue();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_DOUBLE)) {
+ return featurePathValue.getDoubleValue();
+ }
}
return null;
}
@@ -332,12 +347,15 @@
* @see org.apache.uima.cas.FeaturePath#getFloatValue(org.apache.uima.cas.FeatureStructure)
*/
public Float getFloatValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FLOAT)) {
- return featurePathValue.getFloatValue();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FLOAT)) {
+ return featurePathValue.getFloatValue();
+ }
}
return null;
}
@@ -348,21 +366,24 @@
* @see org.apache.uima.cas.FeaturePath#getFSValue(org.apache.uima.cas.FeatureStructure)
*/
public FeatureStructure getFSValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && ((featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FS)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_BYTEARRAY)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_DOUBLEARRAY)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FLOATARRAY)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FSARRAY)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_INTARRAY)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_LONGARRAY)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_SHORTARRAY)
- || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_STRINGARRAY) || (featurePathValue
- .getTypeCode() == LowLevelCAS.TYPE_CLASS_BOOLEANARRAY))) {
- return featurePathValue.getFs();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && ((featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FS)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_BYTEARRAY)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_DOUBLEARRAY)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FLOATARRAY)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_FSARRAY)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_INTARRAY)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_LONGARRAY)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_SHORTARRAY)
+ || (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_STRINGARRAY) || (featurePathValue
+ .getTypeCode() == LowLevelCAS.TYPE_CLASS_BOOLEANARRAY))) {
+ return featurePathValue.getFs();
+ }
}
return null;
}
@@ -373,12 +394,15 @@
* @see org.apache.uima.cas.FeaturePath#getIntValue(org.apache.uima.cas.FeatureStructure)
*/
public Integer getIntValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_INT)) {
- return featurePathValue.getIntValue();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_INT)) {
+ return featurePathValue.getIntValue();
+ }
}
return null;
}
@@ -389,12 +413,15 @@
* @see org.apache.uima.cas.FeaturePath#getLongValue(org.apache.uima.cas.FeatureStructure)
*/
public Long getLongValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_LONG)) {
- return featurePathValue.getLongValue();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_LONG)) {
+ return featurePathValue.getLongValue();
+ }
}
return null;
}
@@ -405,12 +432,15 @@
* @see org.apache.uima.cas.FeaturePath#getShortValue(org.apache.uima.cas.FeatureStructure)
*/
public Short getShortValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_SHORT)) {
- return featurePathValue.getShortValue();
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_SHORT)) {
+ return featurePathValue.getShortValue();
+ }
}
return null;
}
@@ -421,12 +451,15 @@
* @see org.apache.uima.cas.FeaturePath#getStringValue(org.apache.uima.cas.FeatureStructure)
*/
public String getStringValue(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
- if ((featurePathValue != null)
- && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_STRING)) {
- return featurePathValue.getStringValue();
+ if ((featurePathValue != null)
+ && (featurePathValue.getTypeCode() == LowLevelCAS.TYPE_CLASS_STRING)) {
+ return featurePathValue.getStringValue();
+ }
}
return null;
}
@@ -437,11 +470,14 @@
* @see org.apache.uima.cas.FeaturePath#getType(org.apache.uima.cas.FeatureStructure)
*/
public Type getType(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
- if (featurePathValue != null) {
- return featurePathValue.getFeatureType();
+ if (featurePathValue != null) {
+ return featurePathValue.getFeatureType();
+ }
}
return null;
}
@@ -452,49 +488,52 @@
* @see org.apache.uima.cas.FeaturePath#getTypClass(org.apache.uima.cas.FeatureStructure)
*/
public TypeClass getTypClass(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs), llCas);
-
- if (featurePathValue != null) {
- switch (featurePathValue.getTypeCode()) {
- case LowLevelCAS.TYPE_CLASS_STRING:
- return TypeClass.TYPE_CLASS_STRING;
- case LowLevelCAS.TYPE_CLASS_INT:
- return TypeClass.TYPE_CLASS_INT;
- case LowLevelCAS.TYPE_CLASS_BOOLEAN:
- return TypeClass.TYPE_CLASS_BOOLEAN;
- case LowLevelCAS.TYPE_CLASS_BYTE:
- return TypeClass.TYPE_CLASS_BYTE;
- case LowLevelCAS.TYPE_CLASS_DOUBLE:
- return TypeClass.TYPE_CLASS_DOUBLE;
- case LowLevelCAS.TYPE_CLASS_FLOAT:
- return TypeClass.TYPE_CLASS_FLOAT;
- case LowLevelCAS.TYPE_CLASS_LONG:
- return TypeClass.TYPE_CLASS_LONG;
- case LowLevelCAS.TYPE_CLASS_SHORT:
- return TypeClass.TYPE_CLASS_SHORT;
- case LowLevelCAS.TYPE_CLASS_INVALID:
- return TypeClass.TYPE_CLASS_INVALID;
- case LowLevelCAS.TYPE_CLASS_FS:
- return TypeClass.TYPE_CLASS_FS;
- case LowLevelCAS.TYPE_CLASS_BOOLEANARRAY:
- return TypeClass.TYPE_CLASS_BOOLEANARRAY;
- case LowLevelCAS.TYPE_CLASS_BYTEARRAY:
- return TypeClass.TYPE_CLASS_BYTEARRAY;
- case LowLevelCAS.TYPE_CLASS_DOUBLEARRAY:
- return TypeClass.TYPE_CLASS_DOUBLEARRAY;
- case LowLevelCAS.TYPE_CLASS_FLOATARRAY:
- return TypeClass.TYPE_CLASS_FLOATARRAY;
- case LowLevelCAS.TYPE_CLASS_FSARRAY:
- return TypeClass.TYPE_CLASS_FSARRAY;
- case LowLevelCAS.TYPE_CLASS_INTARRAY:
- return TypeClass.TYPE_CLASS_INTARRAY;
- case LowLevelCAS.TYPE_CLASS_LONGARRAY:
- return TypeClass.TYPE_CLASS_LONGARRAY;
- case LowLevelCAS.TYPE_CLASS_SHORTARRAY:
- return TypeClass.TYPE_CLASS_SHORTARRAY;
- case LowLevelCAS.TYPE_CLASS_STRINGARRAY:
- return TypeClass.TYPE_CLASS_STRINGARRAY;
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ FeaturePathValue featurePathValue = getValue(llCas.ll_getFSRef(fs),
+ llCas);
+
+ if (featurePathValue != null) {
+ switch (featurePathValue.getTypeCode()) {
+ case LowLevelCAS.TYPE_CLASS_STRING:
+ return TypeClass.TYPE_CLASS_STRING;
+ case LowLevelCAS.TYPE_CLASS_INT:
+ return TypeClass.TYPE_CLASS_INT;
+ case LowLevelCAS.TYPE_CLASS_BOOLEAN:
+ return TypeClass.TYPE_CLASS_BOOLEAN;
+ case LowLevelCAS.TYPE_CLASS_BYTE:
+ return TypeClass.TYPE_CLASS_BYTE;
+ case LowLevelCAS.TYPE_CLASS_DOUBLE:
+ return TypeClass.TYPE_CLASS_DOUBLE;
+ case LowLevelCAS.TYPE_CLASS_FLOAT:
+ return TypeClass.TYPE_CLASS_FLOAT;
+ case LowLevelCAS.TYPE_CLASS_LONG:
+ return TypeClass.TYPE_CLASS_LONG;
+ case LowLevelCAS.TYPE_CLASS_SHORT:
+ return TypeClass.TYPE_CLASS_SHORT;
+ case LowLevelCAS.TYPE_CLASS_INVALID:
+ return TypeClass.TYPE_CLASS_INVALID;
+ case LowLevelCAS.TYPE_CLASS_FS:
+ return TypeClass.TYPE_CLASS_FS;
+ case LowLevelCAS.TYPE_CLASS_BOOLEANARRAY:
+ return TypeClass.TYPE_CLASS_BOOLEANARRAY;
+ case LowLevelCAS.TYPE_CLASS_BYTEARRAY:
+ return TypeClass.TYPE_CLASS_BYTEARRAY;
+ case LowLevelCAS.TYPE_CLASS_DOUBLEARRAY:
+ return TypeClass.TYPE_CLASS_DOUBLEARRAY;
+ case LowLevelCAS.TYPE_CLASS_FLOATARRAY:
+ return TypeClass.TYPE_CLASS_FLOATARRAY;
+ case LowLevelCAS.TYPE_CLASS_FSARRAY:
+ return TypeClass.TYPE_CLASS_FSARRAY;
+ case LowLevelCAS.TYPE_CLASS_INTARRAY:
+ return TypeClass.TYPE_CLASS_INTARRAY;
+ case LowLevelCAS.TYPE_CLASS_LONGARRAY:
+ return TypeClass.TYPE_CLASS_LONGARRAY;
+ case LowLevelCAS.TYPE_CLASS_SHORTARRAY:
+ return TypeClass.TYPE_CLASS_SHORTARRAY;
+ case LowLevelCAS.TYPE_CLASS_STRINGARRAY:
+ return TypeClass.TYPE_CLASS_STRINGARRAY;
+ }
}
}
return null;
@@ -506,8 +545,12 @@
* @see org.apache.uima.cas.FeaturePath#getValueAsString(org.apache.uima.cas.FeatureStructure)
*/
public String getValueAsString(FeatureStructure fs) {
- LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
- return ll_getValueAsString(llCas.ll_getFSRef(fs), llCas);
+ if (fs != null) {
+ LowLevelCAS llCas = fs.getCAS().getLowLevelCAS();
+ return ll_getValueAsString(llCas.ll_getFSRef(fs), llCas);
+ } else {
+ return null;
+ }
}
/*
@@ -793,16 +836,27 @@
* value was not set
*/
private FeaturePathValue getValue(int fsRef, LowLevelCAS llCas) {
+
+ // featurePathValue
+ FeaturePathValue featurePathValue = new FeaturePathValue();
+
// handle special case where no featurePath was specified
- // (featurePathString == null)
+ // return current FS as value
if (this.featurePathElementNames.size() == 0) {
- return null;
+ if (fsRef == LowLevelCAS.NULL_FS_REF) {
+ return null;
+ } else {
+ featurePathValue.setFs(fsRef, llCas);
+ int typeCode = llCas.ll_getFSRefType(fsRef);
+ featurePathValue.setTypeCode(llCas.ll_getTypeSystem()
+ .ll_getRangeType(typeCode));
+ featurePathValue.setFeatureType(llCas.ll_getTypeSystem()
+ .ll_getTypeForCode(typeCode));
+ return featurePathValue;
+ }
} else {
// we have a feature path that must be evaluated
- // featurePathValue
- FeaturePathValue featurePathValue = new FeaturePathValue();
-
// check if further featurePath elements are possible
boolean noFurtherElementsPossible = false;
@@ -835,7 +889,8 @@
// check current FS type for FeaturePath base type
if (this.featurePathBaseTypeCode > 0) {
isInitSubType = llCas.ll_getTypeSystem()
- .ll_subsumes(this.featurePathBaseTypeCode, llCas.ll_getFSRefType(fsRef));
+ .ll_subsumes(this.featurePathBaseTypeCode,
+ llCas.ll_getFSRefType(fsRef));
}
// get the Feature for the current featurePath element. If the
// featurePath is always valid the featurePath Feature elements are
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/FeaturePathTest.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/FeaturePathTest.java?rev=618258&r1=618257&r2=618258&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/FeaturePathTest.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/impl/FeaturePathTest.java Mon Feb 4 04:48:08 2008
@@ -97,6 +97,8 @@
.getDocumentAnnotation()));
assertEquals(shortFeat.getRange(), featurePath.getType(cas
.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getStringValue(null));
// test float feature
Feature floatFeat = cas.getDocumentAnnotation().getType()
@@ -115,6 +117,8 @@
.getDocumentAnnotation()));
assertEquals(floatFeat.getRange(), featurePath.getType(cas
.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getFloatValue(null));
// test double feature
Feature doubleFeat = cas.getDocumentAnnotation().getType()
@@ -133,6 +137,8 @@
.getDocumentAnnotation()));
assertEquals(doubleFeat.getRange(), featurePath.getType(cas
.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getDoubleValue(null));
// test long feature
Feature longFeat = cas.getDocumentAnnotation().getType()
@@ -151,6 +157,8 @@
.getDocumentAnnotation()));
assertEquals(longFeat.getRange(), featurePath.getType(cas
.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getLongValue(null));
// test int feature
Feature intFeat = cas.getDocumentAnnotation().getType()
@@ -169,6 +177,8 @@
.getDocumentAnnotation()));
assertEquals(intFeat.getRange(), featurePath.getType(cas
.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getIntValue(null));
// test boolean feature
Feature boolFeat = cas.getDocumentAnnotation().getType()
@@ -187,6 +197,8 @@
.getDocumentAnnotation()));
assertEquals(boolFeat.getRange(), featurePath.getType(cas
.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getBooleanValue(null));
// test byte feature
Feature byteFeat = cas.getDocumentAnnotation().getType()
@@ -205,6 +217,9 @@
.getDocumentAnnotation()));
assertEquals(byteFeat.getRange(), featurePath.getType(cas
.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getByteValue(null));
+
}
/**
@@ -234,6 +249,8 @@
assertEquals(null, featurePath.getValueAsString(cas
.getDocumentAnnotation()));
assertEquals(null, featurePath.getFSValue(cas.getDocumentAnnotation()));
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getFSValue(null));
// test feature path not set
path = "/refFeature/refFeature";
@@ -296,9 +313,17 @@
featurePath.initialize("");
assertEquals("", featurePath.getFeaturePath());
featurePath.typeInit(cas.getDocumentAnnotation().getType());
- assertEquals(null, featurePath.getValueAsString(cas
- .getDocumentAnnotation()));
-
+ assertEquals(cas.getDocumentAnnotation().toString(), featurePath
+ .getValueAsString(cas.getDocumentAnnotation()));
+
+ // test "/" featurePath
+ featurePath = new FeaturePathImpl();
+ featurePath.initialize("/");
+ assertEquals("/", featurePath.getFeaturePath());
+ featurePath.typeInit(cas.getDocumentAnnotation().getType());
+ assertEquals(cas.getDocumentAnnotation().toString(), featurePath
+ .getValueAsString(cas.getDocumentAnnotation()));
+
// check init() with super type and call getValue() with subtype
featurePath = new FeaturePathImpl();
featurePath.initialize("/stringFeature");
@@ -388,6 +413,33 @@
assertEquals("uima.tcas.DocumentAnnotation", featurePath
.getValueAsString(cas.getDocumentAnnotation()));
+ // test typeName() on root
+ path = ":typeName()";
+ featurePath = new FeaturePathImpl();
+ featurePath.initialize(path);
+ assertEquals(path, featurePath.getFeaturePath());
+ featurePath.typeInit(cas.getDocumentAnnotation().getType());
+ assertEquals("uima.tcas.DocumentAnnotation", featurePath
+ .getValueAsString(cas.getDocumentAnnotation()));
+
+ // test coveredText() on root
+ path = "/:coveredText()";
+ featurePath = new FeaturePathImpl();
+ featurePath.initialize(path);
+ assertEquals(path, featurePath.getFeaturePath());
+ featurePath.typeInit(cas.getDocumentAnnotation().getType());
+ assertEquals(cas.getDocumentText(), featurePath.getValueAsString(cas
+ .getDocumentAnnotation()));
+
+ // test fsId() on root
+ path = "/:fsId()";
+ featurePath = new FeaturePathImpl();
+ featurePath.initialize(path);
+ assertEquals(path, featurePath.getFeaturePath());
+ featurePath.typeInit(cas.getDocumentAnnotation().getType());
+ assertEquals("8", featurePath.getValueAsString(cas
+ .getDocumentAnnotation()));
+
}
/**
@@ -532,6 +584,14 @@
} catch (CASRuntimeException ex) {
assertTrue(ex.getMessage().indexOf("uima.tt.TestAnnotation") > -1);
}
+
+ // pass null as FS
+ featurePath = new FeaturePathImpl();
+ featurePath.initialize("/refFeature:coveredText()");
+ featurePath.typeInit(cas.getDocumentAnnotation().getType());
+ assertEquals(null, featurePath.getValueAsString(null));
+ assertEquals(null, featurePath.getTypClass(null));
+ assertEquals(null, featurePath.getType(null));
}
/**