Author: pkluegl Date: Mon Jan 9 19:02:22 2012 New Revision: 1229297 URL: http://svn.apache.org/viewvc?rev=1229297&view=rev Log: UIMA-2313 fixed SETFEATURE, FEATURE, GETFEATURE, MARKTABLE and actions based on structure (CREATE) for other primitive types. Tested with floats and SETFEATURE. Fixed wrong return type in number expressions.
Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/AbstractStructureAction.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/GetFeatureAction.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/MarkTableAction.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/SetFeatureAction.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/condition/FeatureCondition.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/AbstractNumberExpression.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ComposedNumberExpression.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NegativeNumberExpression.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NumberExpression.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ReferenceNumberExpression.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/SimpleNumberExpression.java uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/parser/TextMarkerParser.java Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/AbstractStructureAction.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/AbstractStructureAction.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/AbstractStructureAction.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/AbstractStructureAction.java Mon Jan 9 19:02:22 2012 @@ -77,14 +77,26 @@ public abstract class AbstractStructureA AnnotationFS annotation = annotationsInWindow.get(0); structure.setStringValue(targetFeature, annotation.getCoveredText()); } - } else if (valueObject instanceof NumberExpression - && range.getName().equals(UIMAConstants.TYPE_INTEGER)) { - structure.setIntValue(targetFeature, - ((NumberExpression) valueObject).getIntegerValue(element.getParent())); - } else if (valueObject instanceof NumberExpression - && range.getName().equals(UIMAConstants.TYPE_DOUBLE)) { - structure.setDoubleValue(targetFeature, - ((NumberExpression) valueObject).getDoubleValue(element.getParent())); + } else if (valueObject instanceof NumberExpression) { + if(range.getName().equals(UIMAConstants.TYPE_INTEGER)) { + structure.setIntValue(targetFeature, + ((NumberExpression) valueObject).getIntegerValue(element.getParent())); + } else if(range.getName().equals(UIMAConstants.TYPE_DOUBLE)) { + structure.setDoubleValue(targetFeature, + ((NumberExpression) valueObject).getDoubleValue(element.getParent())); + } else if(range.getName().equals(UIMAConstants.TYPE_FLOAT)) { + structure.setFloatValue(targetFeature, + ((NumberExpression) valueObject).getFloatValue(element.getParent())); + } else if(range.getName().equals(UIMAConstants.TYPE_BYTE)) { + structure.setByteValue(targetFeature, (byte) + ((NumberExpression) valueObject).getIntegerValue(element.getParent())); + } else if(range.getName().equals(UIMAConstants.TYPE_SHORT)) { + structure.setShortValue(targetFeature, (short) + ((NumberExpression) valueObject).getIntegerValue(element.getParent())); + } else if(range.getName().equals(UIMAConstants.TYPE_LONG)) { + structure.setLongValue(targetFeature, (long) + ((NumberExpression) valueObject).getIntegerValue(element.getParent())); + } } else if (valueObject instanceof BooleanExpression && range.getName().equals(UIMAConstants.TYPE_BOOLEAN)) { structure.setBooleanValue(targetFeature, Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/GetFeatureAction.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/GetFeatureAction.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/GetFeatureAction.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/GetFeatureAction.java Mon Jan 9 19:02:22 2012 @@ -68,24 +68,33 @@ public class GetFeatureAction extends Ab return; } + String featName = featureByBaseName.getRange().getName(); if (environment.getVariableType(variable).equals(String.class) - && featureByBaseName.getRange().getName().equals(UIMAConstants.TYPE_STRING)) { + && featName.equals(UIMAConstants.TYPE_STRING)) { Object value = annotationFS.getStringValue(featureByBaseName); environment.setVariableValue(variable, value); - } else if (environment.getVariableType(variable).equals(Integer.class) - && featureByBaseName.getRange().getName().equals(UIMAConstants.TYPE_INTEGER)) { - Object value = annotationFS.getIntValue(featureByBaseName); - environment.setVariableValue(variable, value); - } else if (environment.getVariableType(variable).equals(Double.class) - && featureByBaseName.getRange().getName().equals(UIMAConstants.TYPE_DOUBLE)) { - Object value = annotationFS.getDoubleValue(featureByBaseName); + } else if (Number.class.isAssignableFrom(environment.getVariableType(variable))) { + Number value = 0; + if(featName.equals(UIMAConstants.TYPE_INTEGER)) { + value = annotationFS.getIntValue(featureByBaseName); + } else if (featName.equals(UIMAConstants.TYPE_DOUBLE)) { + value = annotationFS.getDoubleValue(featureByBaseName); + } else if (featName.equals(UIMAConstants.TYPE_FLOAT)) { + value = annotationFS.getFloatValue(featureByBaseName); + } else if (featName.equals(UIMAConstants.TYPE_BYTE)) { + value = annotationFS.getByteValue(featureByBaseName); + } else if (featName.equals(UIMAConstants.TYPE_SHORT)) { + value = annotationFS.getShortValue(featureByBaseName); + } else if (featName.equals(UIMAConstants.TYPE_LONG)) { + value = annotationFS.getLongValue(featureByBaseName); + } environment.setVariableValue(variable, value); } else if (environment.getVariableType(variable).equals(Boolean.class) - && featureByBaseName.getRange().getName().equals(UIMAConstants.TYPE_BOOLEAN)) { + && featName.equals(UIMAConstants.TYPE_BOOLEAN)) { Object value = annotationFS.getBooleanValue(featureByBaseName); environment.setVariableValue(variable, value); } else if (environment.getVariableType(variable).equals(Type.class) - && featureByBaseName.getRange().getName().equals(UIMAConstants.TYPE_STRING)) { + && featName.equals(UIMAConstants.TYPE_STRING)) { Object value = annotationFS.getStringValue(featureByBaseName); Type t = stream.getCas().getTypeSystem().getType((String) value); if (t != null) { Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/MarkTableAction.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/MarkTableAction.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/MarkTableAction.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/MarkTableAction.java Mon Jan 9 19:02:22 2012 @@ -112,6 +112,18 @@ public class MarkTableAction extends Abs } else if (range.getName().equals(UIMAConstants.TYPE_DOUBLE)) { Double d = Double.parseDouble(value); structure.setDoubleValue(targetFeature, d); + } else if (range.getName().equals(UIMAConstants.TYPE_FLOAT)) { + Float d = Float.parseFloat(value); + structure.setFloatValue(targetFeature, d); + } else if (range.getName().equals(UIMAConstants.TYPE_BYTE)) { + Byte d = Byte.parseByte(value); + structure.setByteValue(targetFeature, d); + } else if (range.getName().equals(UIMAConstants.TYPE_SHORT)) { + Short d = Short.parseShort(value); + structure.setShortValue(targetFeature, d); + } else if (range.getName().equals(UIMAConstants.TYPE_LONG)) { + Long d = Long.parseLong(value); + structure.setLongValue(targetFeature, d); } else if (range.getName().equals(UIMAConstants.TYPE_BOOLEAN)) { Boolean b = Boolean.parseBoolean(value); structure.setBooleanValue(targetFeature, b); Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/SetFeatureAction.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/SetFeatureAction.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/SetFeatureAction.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/action/SetFeatureAction.java Mon Jan 9 19:02:22 2012 @@ -109,7 +109,6 @@ public class SetFeatureAction extends Ab Feature featureByBaseName = type.getFeatureByBaseName(featureString); List<AnnotationFS> matchedAnnotations = match.getMatchedAnnotationsOf(element, stream); for (AnnotationFS annotationFS : matchedAnnotations) { - if (annotationFS.getType().getFeatureByBaseName(featureString) == null) { System.out.println("Can't access feature " + featureString + ", because it's not defined in the matched type: " + annotationFS.getType()); @@ -127,6 +126,18 @@ public class SetFeatureAction extends Ab } else if (range.equals(UIMAConstants.TYPE_DOUBLE)) { double v = numberExpr.getDoubleValue(element.getParent()); annotationFS.setDoubleValue(featureByBaseName, v); + } else if (range.equals(UIMAConstants.TYPE_FLOAT)) { + float v = (float) numberExpr.getDoubleValue(element.getParent()); + annotationFS.setFloatValue(featureByBaseName, v); + } else if (range.equals(UIMAConstants.TYPE_BYTE)) { + byte v = (byte) numberExpr.getIntegerValue(element.getParent()); + annotationFS.setByteValue(featureByBaseName, v); + } else if (range.equals(UIMAConstants.TYPE_SHORT)) { + short v = (short) numberExpr.getIntegerValue(element.getParent()); + annotationFS.setShortValue(featureByBaseName, v); + } else if (range.equals(UIMAConstants.TYPE_LONG)) { + long v = numberExpr.getIntegerValue(element.getParent()); + annotationFS.setLongValue(featureByBaseName, v); } } else if (booleanExpr != null) { boolean v = booleanExpr.getBooleanValue(element.getParent()); Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/condition/FeatureCondition.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/condition/FeatureCondition.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/condition/FeatureCondition.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/condition/FeatureCondition.java Mon Jan 9 19:02:22 2012 @@ -91,6 +91,22 @@ public class FeatureCondition extends Ab double value = annotation.getDoubleValue(featureByBaseName); double v = numberExpr.getDoubleValue(element.getParent()); result = value == v; + } else if (range.equals(UIMAConstants.TYPE_FLOAT)) { + float value = annotation.getFloatValue(featureByBaseName); + float v = numberExpr.getFloatValue(element.getParent()); + result = value == v; + } else if (range.equals(UIMAConstants.TYPE_BYTE)) { + byte value = annotation.getByteValue(featureByBaseName); + byte v = (byte) numberExpr.getIntegerValue(element.getParent()); + result = value == v; + } else if (range.equals(UIMAConstants.TYPE_SHORT)) { + short value = annotation.getShortValue(featureByBaseName); + short v = (short) numberExpr.getIntegerValue(element.getParent()); + result = value == v; + } else if (range.equals(UIMAConstants.TYPE_LONG)) { + long value = annotation.getLongValue(featureByBaseName); + long v = numberExpr.getIntegerValue(element.getParent()); + result = value == v; } return new EvaluatedCondition(this, result); } else if (booleanExpr != null) { Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/AbstractNumberExpression.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/AbstractNumberExpression.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/AbstractNumberExpression.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/AbstractNumberExpression.java Mon Jan 9 19:02:22 2012 @@ -47,6 +47,31 @@ public abstract class AbstractNumberExpr return 0; } + protected float calculate(float t1, float t2, String op) { + if ("+".equals(op)) { + return t1 + t2; + } else if ("-".equals(op)) { + return t1 - t2; + } else if ("*".equals(op)) { + return t1 * t2; + } else if ("/".equals(op)) { + return t1 / t2; + } else if ("%".equals(op)) { + return t1 % t2; + } else if ("EXP".equals(op)) { + return (float)Math.exp(t1); + } else if ("LOG".equals(op)) { + return (float)Math.log(t1); + } else if ("SIN".equals(op)) { + return (float)Math.sin(t1); + } else if ("COS".equals(op)) { + return (float)Math.cos(t1); + } else if ("TAN".equals(op)) { + return (float)Math.tan(t1); + } + return 0; + } + protected int calculate(int t1, int t2, String op) { if ("+".equals(op)) { return t1 + t2; Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ComposedNumberExpression.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ComposedNumberExpression.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ComposedNumberExpression.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ComposedNumberExpression.java Mon Jan 9 19:02:22 2012 @@ -54,14 +54,14 @@ public class ComposedNumberExpression ex } @Override - public double getFloatValue(TextMarkerStatement parent) { + public float getFloatValue(TextMarkerStatement parent) { NumberExpression numberExpression = getExpressions().get(0); if (numberExpression == null) { return 0; } - double result = numberExpression.getFloatValue(parent); + float result = numberExpression.getFloatValue(parent); for (int i = 0; i < getOperators().size(); i++) { - double second = 0; + float second = 0; if (getExpressions().size() > i + 1) { second = getExpressions().get(i + 1).getFloatValue(parent); } Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NegativeNumberExpression.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NegativeNumberExpression.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NegativeNumberExpression.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NegativeNumberExpression.java Mon Jan 9 19:02:22 2012 @@ -36,7 +36,7 @@ public class NegativeNumberExpression ex } @Override - public double getFloatValue(TextMarkerStatement parent) { + public float getFloatValue(TextMarkerStatement parent) { return -ne.getFloatValue(parent); } Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NumberExpression.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NumberExpression.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NumberExpression.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/NumberExpression.java Mon Jan 9 19:02:22 2012 @@ -28,6 +28,6 @@ public abstract class NumberExpression e public abstract double getDoubleValue(TextMarkerStatement parent); - public abstract double getFloatValue(TextMarkerStatement parent); + public abstract float getFloatValue(TextMarkerStatement parent); } Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ReferenceNumberExpression.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ReferenceNumberExpression.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ReferenceNumberExpression.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/ReferenceNumberExpression.java Mon Jan 9 19:02:22 2012 @@ -41,9 +41,9 @@ public class ReferenceNumberExpression e } @Override - public double getFloatValue(TextMarkerStatement parent) { + public float getFloatValue(TextMarkerStatement parent) { Object value = parent.getEnvironment().getVariableValue(getVar()); - double variableValue = 0; + float variableValue = 0; if (value instanceof Number) { variableValue = ((Number) value).floatValue(); } Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/SimpleNumberExpression.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/SimpleNumberExpression.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/SimpleNumberExpression.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/expression/number/SimpleNumberExpression.java Mon Jan 9 19:02:22 2012 @@ -36,7 +36,7 @@ public class SimpleNumberExpression exte } @Override - public double getFloatValue(TextMarkerStatement parent) { + public float getFloatValue(TextMarkerStatement parent) { return number.floatValue(); } Modified: uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/parser/TextMarkerParser.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/parser/TextMarkerParser.java?rev=1229297&r1=1229296&r2=1229297&view=diff ============================================================================== --- uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/parser/TextMarkerParser.java (original) +++ uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/parser/TextMarkerParser.java Mon Jan 9 19:02:22 2012 @@ -1,4 +1,4 @@ -// $ANTLR 3.4 D:\\work\\workspace-uima3\\uimaj-ep-textmarker-engine\\src\\main\\java\\org\\apache\\uima\\textmarker\\parser\\TextMarkerParser.g 2012-01-09 11:03:58 +// $ANTLR 3.4 D:\\work\\workspace-uima3\\uimaj-ep-textmarker-engine\\src\\main\\java\\org\\apache\\uima\\textmarker\\parser\\TextMarkerParser.g 2012-01-09 13:41:25 /* * Licensed to the Apache Software Foundation (ASF) under one