Author: pkluegl Date: Sun Nov 8 19:02:06 2015 New Revision: 1713281 URL: http://svn.apache.org/viewvc?rev=1713281&view=rev Log: UIMA-4408 - started to refactor feature assignment method to RutaStream
Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractRutaAction.java uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/MatchedTextAction.java Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Sun Nov 8 19:02:06 2015 @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import java.util.NavigableMap; import java.util.NoSuchElementException; @@ -36,6 +37,7 @@ import org.apache.uima.cas.CASException; import org.apache.uima.cas.ConstraintFactory; import org.apache.uima.cas.FSIterator; import org.apache.uima.cas.FSMatchConstraint; +import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.impl.FSIteratorImplBase; @@ -44,10 +46,21 @@ import org.apache.uima.cas.text.Annotati import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.ruta.engine.RutaEngine; +import org.apache.uima.ruta.expression.IRutaExpression; +import org.apache.uima.ruta.expression.bool.IBooleanExpression; +import org.apache.uima.ruta.expression.feature.FeatureExpression; +import org.apache.uima.ruta.expression.feature.GenericFeatureExpression; +import org.apache.uima.ruta.expression.feature.SimpleFeatureExpression; +import org.apache.uima.ruta.expression.number.INumberExpression; +import org.apache.uima.ruta.expression.string.IStringExpression; +import org.apache.uima.ruta.expression.type.ITypeExpression; +import org.apache.uima.ruta.expression.type.TypeExpression; import org.apache.uima.ruta.rule.AbstractRule; import org.apache.uima.ruta.rule.AbstractRuleMatch; +import org.apache.uima.ruta.rule.MatchContext; import org.apache.uima.ruta.type.RutaAnnotation; import org.apache.uima.ruta.type.RutaBasic; +import org.apache.uima.ruta.utils.UIMAUtils; import org.apache.uima.ruta.visitor.InferenceCrowd; public class RutaStream extends FSIteratorImplBase<AnnotationFS> { @@ -893,4 +906,95 @@ public class RutaStream extends FSIterat return result.toString(); } + public void assignFeatureValues(AnnotationFS annotation, + Map<IStringExpression, IRutaExpression> map, MatchContext context) { + Type type = annotation.getType(); + Set<Entry<IStringExpression, IRutaExpression>> entrySet = map.entrySet(); + for (Entry<IStringExpression, IRutaExpression> entry : entrySet) { + IStringExpression key = entry.getKey(); + IRutaExpression value = entry.getValue(); + String featureName = key.getStringValue(context, this); + Feature feature = type.getFeatureByBaseName(featureName); + assignFeatureValue(annotation, feature, value, context); + } + } + + public void assignFeatureValue(AnnotationFS annotation, Feature feature, IRutaExpression value, + MatchContext context) { + if (feature == null) { + throw new IllegalArgumentException("Not able to assign feature value (e.g., coveredText)."); + } + String range = feature.getRange().getName(); + if (range.equals(UIMAConstants.TYPE_STRING)) { + if (value instanceof IStringExpression) { + IStringExpression stringExpr = (IStringExpression) value; + String string = stringExpr.getStringValue(context, this); + annotation.setStringValue(feature, string); + } + } else if (value instanceof INumberExpression + && (range.equals(UIMAConstants.TYPE_INTEGER) || range.equals(UIMAConstants.TYPE_LONG) + || range.equals(UIMAConstants.TYPE_SHORT) || range + .equals(UIMAConstants.TYPE_BYTE))) { + INumberExpression numberExpr = (INumberExpression) value; + int v = numberExpr.getIntegerValue(context, this); + annotation.setIntValue(feature, v); + } else if (value instanceof INumberExpression && (range.equals(UIMAConstants.TYPE_DOUBLE))) { + INumberExpression numberExpr = (INumberExpression) value; + double v = numberExpr.getDoubleValue(context, this); + annotation.setDoubleValue(feature, v); + } else if (value instanceof INumberExpression && (range.equals(UIMAConstants.TYPE_FLOAT))) { + INumberExpression numberExpr = (INumberExpression) value; + float v = numberExpr.getFloatValue(context, this); + annotation.setFloatValue(feature, v); + } else if (value instanceof IBooleanExpression && (range.equals(UIMAConstants.TYPE_BOOLEAN))) { + IBooleanExpression booleanExpr = (IBooleanExpression) value; + boolean v = booleanExpr.getBooleanValue(context, this); + annotation.setBooleanValue(feature, v); + } else if (value instanceof IBooleanExpression && (range.equals(UIMAConstants.TYPE_BOOLEAN))) { + IBooleanExpression booleanExpr = (IBooleanExpression) value; + boolean v = booleanExpr.getBooleanValue(context, this); + annotation.setBooleanValue(feature, v); + } else if (value instanceof ITypeExpression && !feature.getRange().isPrimitive()) { + ITypeExpression typeExpr = (ITypeExpression) value; + Type t = typeExpr.getType(context, this); + List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), t); + if (feature.getRange().isArray()) { + annotation.setFeatureValue(feature, UIMAUtils.toFSArray(this.getJCas(), inWindow)); + } else { + if (inWindow != null && !inWindow.isEmpty()) { + AnnotationFS a = inWindow.get(0); + annotation.setFeatureValue(feature, a); + } else { + annotation.setFeatureValue(feature, null); + } + } + } else if (value instanceof GenericFeatureExpression && !feature.getRange().isPrimitive()) { + FeatureExpression fe = ((GenericFeatureExpression) value).getFeatureExpression(); + TypeExpression typeExpr = fe.getTypeExpr(context, this); + Type t = typeExpr.getType(context, this); + List<AnnotationFS> inWindow = this.getAnnotationsInWindow(context.getAnnotation(), t); + if (fe instanceof SimpleFeatureExpression) { + SimpleFeatureExpression sfe = (SimpleFeatureExpression) fe; + List<AnnotationFS> featureAnnotations = inWindow; + if (fe.getFeatures(context, this) != null) { + featureAnnotations = new ArrayList<AnnotationFS>(sfe.getFeatureAnnotations(inWindow, + this, context, false)); + } + if (feature.getRange().isArray()) { + annotation.setFeatureValue(feature, + UIMAUtils.toFSArray(this.getJCas(), featureAnnotations)); + } else if (!featureAnnotations.isEmpty()) { + AnnotationFS a = featureAnnotations.get(0); + annotation.setFeatureValue(feature, a); + } + } else { + if (feature.getRange().isArray()) { + annotation.setFeatureValue(feature, UIMAUtils.toFSArray(this.getJCas(), inWindow)); + } else { + AnnotationFS a = inWindow.get(0); + annotation.setFeatureValue(feature, a); + } + } + } + } } Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractRutaAction.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractRutaAction.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractRutaAction.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractRutaAction.java Sun Nov 8 19:02:06 2015 @@ -19,9 +19,14 @@ package org.apache.uima.ruta.action; +import java.util.ArrayList; +import java.util.List; + import org.apache.uima.ruta.RutaElement; import org.apache.uima.ruta.RutaStream; +import org.apache.uima.ruta.expression.number.INumberExpression; import org.apache.uima.ruta.rule.MatchContext; +import org.apache.uima.ruta.rule.RuleElement; import org.apache.uima.ruta.visitor.InferenceCrowd; public abstract class AbstractRutaAction extends RutaElement { @@ -37,4 +42,24 @@ public abstract class AbstractRutaAction return getClass().getSimpleName(); } + protected List<Integer> getIndexList(List<INumberExpression> indexes, MatchContext context, RutaStream stream) { + RuleElement element = context.getElement(); + List<Integer> indexList = new ArrayList<Integer>(); + if (indexes == null || indexes.isEmpty()) { + int self = element.getContainer().getRuleElements().indexOf(element) + 1; + indexList.add(self); + return indexList; + } + int last = Integer.MAX_VALUE - 1; + for (INumberExpression each : indexes) { + // no feature matches allowed + int value = each.getIntegerValue(context, stream); + for (int i = Math.min(value, last + 1); i < value; i++) { + indexList.add(i); + } + indexList.add(value); + } + return indexList; + } + } Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/AbstractStructureAction.java Sun Nov 8 19:02:06 2015 @@ -50,7 +50,7 @@ public abstract class AbstractStructureA super(); } - protected void fillFeatures(TOP structure, Map<IStringExpression, IRutaExpression> features, + protected void fillFeatures2(TOP structure, Map<IStringExpression, IRutaExpression> features, AnnotationFS matchedAnnotation, MatchContext context, RutaStream stream) { Map<String, IRutaExpression> map = new HashMap<String, IRutaExpression>(); for (Entry<IStringExpression, IRutaExpression> each : features.entrySet()) { Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/CreateAction.java Sun Nov 8 19:02:06 2015 @@ -19,15 +19,12 @@ package org.apache.uima.ruta.action; -import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; -import org.apache.uima.jcas.cas.TOP; import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.ruta.RutaStream; import org.apache.uima.ruta.expression.IRutaExpression; @@ -59,7 +56,7 @@ public class CreateAction extends Abstra public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) { RuleMatch match = context.getRuleMatch(); RuleElement element = context.getElement(); - List<Integer> indexList = getIndexList(context, stream); + List<Integer> indexList = getIndexList(indexes, context, stream); List<AnnotationFS> matchedAnnotations = match.getMatchedAnnotations(indexList, element.getContainer()); for (AnnotationFS matchedAnnotation : matchedAnnotations) { @@ -68,41 +65,16 @@ public class CreateAction extends Abstra return; } Type type = structureType.getType(context, stream); - FeatureStructure newFS = stream.getCas().createFS(type); - if (newFS instanceof Annotation) { - Annotation a = (Annotation) newFS; + AnnotationFS annotation = stream.getCas().createAnnotation(type, 0, 0); + if (annotation instanceof Annotation) { + Annotation a = (Annotation) annotation; a.setBegin(matchedAnnotation.getBegin()); a.setEnd(matchedAnnotation.getEnd()); - stream.addAnnotation(a, match); + context.setAnnotation(matchedAnnotation); + stream.assignFeatureValues(annotation, features, context); + stream.addAnnotation(a, true, match); } - TOP newStructure = null; - if (newFS instanceof TOP) { - newStructure = (TOP) newFS; - fillFeatures(newStructure, features, matchedAnnotation, context, stream); - newStructure.addToIndexes(); - } - } - } - - // TODO refactor duplicate methods -> MarkAction - protected List<Integer> getIndexList(MatchContext context, RutaStream stream) { - RuleElement element = context.getElement(); - List<Integer> indexList = new ArrayList<Integer>(); - if (indexes == null || indexes.isEmpty()) { - int self = element.getContainer().getRuleElements().indexOf(element) + 1; - indexList.add(self); - return indexList; - } - int last = Integer.MAX_VALUE - 1; - for (INumberExpression each : indexes) { - // no feature matches allowed - int value = each.getIntegerValue(context, stream); - for (int i = Math.min(value, last + 1); i < value; i++) { - indexList.add(i); - } - indexList.add(value); } - return indexList; } public TypeExpression getStructureType() { Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java Sun Nov 8 19:02:06 2015 @@ -24,7 +24,6 @@ import java.util.Map; import org.apache.uima.cas.Type; import org.apache.uima.cas.text.AnnotationFS; -import org.apache.uima.jcas.tcas.Annotation; import org.apache.uima.ruta.RutaStream; import org.apache.uima.ruta.expression.IRutaExpression; import org.apache.uima.ruta.expression.string.IStringExpression; @@ -75,7 +74,8 @@ public class FillAction extends Abstract if (!list.isEmpty()) { AnnotationFS annotationFS = list.get(0); stream.getCas().removeFsFromIndexes(annotationFS); - fillFeatures((Annotation) annotationFS, features, matchedAnnotation, context, stream); + context.setAnnotation(matchedAnnotation); + stream.assignFeatureValues(annotationFS, features, context); stream.getCas().addFsToIndexes(annotationFS); } } Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/GatherAction.java Sun Nov 8 19:02:06 2015 @@ -71,7 +71,7 @@ public class GatherAction extends Abstra public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) { RuleMatch match = context.getRuleMatch(); RuleElement element = context.getElement(); - List<Integer> indexList = getIndexList(context, stream); + List<Integer> indexList = getIndexList(indexes, context, stream); List<AnnotationFS> matchedAnnotations = match.getMatchedAnnotations(indexList, element.getContainer()); for (AnnotationFS matchedAnnotation : matchedAnnotations) { @@ -209,26 +209,6 @@ public class GatherAction extends Abstra return result; } - // TODO refactor duplicate methods -> MarkAction - protected List<Integer> getIndexList(MatchContext context, RutaStream stream) { - RuleElement element = context.getElement(); - List<Integer> indexList = new ArrayList<Integer>(); - if (indexes == null || indexes.isEmpty()) { - int self = element.getContainer().getRuleElements().indexOf(element) + 1; - indexList.add(self); - return indexList; - } - int last = Integer.MAX_VALUE - 1; - for (INumberExpression each : indexes) { - // no feature matches allowed - int value = each.getIntegerValue(context, stream); - for (int i = Math.min(value, last + 1); i < value; i++) { - indexList.add(i); - } - indexList.add(value); - } - return indexList; - } public TypeExpression getStructureType() { return structureType; Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/ImplicitFeatureAction.java Sun Nov 8 19:02:06 2015 @@ -31,22 +31,13 @@ import org.apache.uima.cas.Type; import org.apache.uima.cas.TypeSystem; import org.apache.uima.cas.text.AnnotationFS; import org.apache.uima.ruta.RutaStream; -import org.apache.uima.ruta.UIMAConstants; import org.apache.uima.ruta.expression.IRutaExpression; -import org.apache.uima.ruta.expression.bool.IBooleanExpression; -import org.apache.uima.ruta.expression.feature.FeatureExpression; import org.apache.uima.ruta.expression.feature.FeatureMatchExpression; -import org.apache.uima.ruta.expression.feature.GenericFeatureExpression; -import org.apache.uima.ruta.expression.feature.SimpleFeatureExpression; -import org.apache.uima.ruta.expression.number.INumberExpression; -import org.apache.uima.ruta.expression.string.IStringExpression; -import org.apache.uima.ruta.expression.type.ITypeExpression; import org.apache.uima.ruta.expression.type.TypeExpression; import org.apache.uima.ruta.rule.AnnotationComparator; import org.apache.uima.ruta.rule.MatchContext; import org.apache.uima.ruta.rule.RuleElement; import org.apache.uima.ruta.rule.RuleMatch; -import org.apache.uima.ruta.utils.UIMAUtils; import org.apache.uima.ruta.visitor.InferenceCrowd; public class ImplicitFeatureAction extends AbstractRutaAction { @@ -83,87 +74,13 @@ public class ImplicitFeatureAction exten Feature feature = expr.getFeature(context, stream); IRutaExpression arg = expr.getArg(); for (AnnotationFS each : featureAnnotations) { - setFeatureValue(each, feature, arg, context, stream); + stream.assignFeatureValue(each, feature, arg, context); } for (AnnotationFS each : annotations) { stream.getCas().addFsToIndexes(each); } } - private void setFeatureValue(AnnotationFS a, Feature feature, IRutaExpression argExpr, - MatchContext context, RutaStream stream) { - if (feature == null) { - throw new IllegalArgumentException("Not able to assign feature value (e.g., coveredText)."); - } - String range = feature.getRange().getName(); - if (range.equals(UIMAConstants.TYPE_STRING)) { - if (argExpr instanceof IStringExpression) { - IStringExpression stringExpr = (IStringExpression) argExpr; - String string = stringExpr.getStringValue(context, stream); - a.setStringValue(feature, string); - } - } else if (argExpr instanceof INumberExpression - && (range.equals(UIMAConstants.TYPE_INTEGER) || range.equals(UIMAConstants.TYPE_LONG) - || range.equals(UIMAConstants.TYPE_SHORT) || range - .equals(UIMAConstants.TYPE_BYTE))) { - INumberExpression numberExpr = (INumberExpression) argExpr; - int v = numberExpr.getIntegerValue(context, stream); - a.setIntValue(feature, v); - } else if (argExpr instanceof INumberExpression && (range.equals(UIMAConstants.TYPE_DOUBLE))) { - INumberExpression numberExpr = (INumberExpression) argExpr; - double v = numberExpr.getDoubleValue(context, stream); - a.setDoubleValue(feature, v); - } else if (argExpr instanceof INumberExpression && (range.equals(UIMAConstants.TYPE_FLOAT))) { - INumberExpression numberExpr = (INumberExpression) argExpr; - float v = numberExpr.getFloatValue(context, stream); - a.setFloatValue(feature, v); - } else if (argExpr instanceof IBooleanExpression && (range.equals(UIMAConstants.TYPE_BOOLEAN))) { - IBooleanExpression booleanExpr = (IBooleanExpression) argExpr; - boolean v = booleanExpr.getBooleanValue(context, stream); - a.setBooleanValue(feature, v); - } else if (argExpr instanceof IBooleanExpression && (range.equals(UIMAConstants.TYPE_BOOLEAN))) { - IBooleanExpression booleanExpr = (IBooleanExpression) argExpr; - boolean v = booleanExpr.getBooleanValue(context, stream); - a.setBooleanValue(feature, v); - } else if (argExpr instanceof ITypeExpression && !feature.getRange().isPrimitive()) { - ITypeExpression typeExpr = (ITypeExpression) argExpr; - Type t = typeExpr.getType(context, stream); - List<AnnotationFS> inWindow = stream.getAnnotationsInWindow(a, t); - if (feature.getRange().isArray()) { - a.setFeatureValue(feature, UIMAUtils.toFSArray(stream.getJCas(), inWindow)); - } else { - if (inWindow != null && !inWindow.isEmpty()) { - AnnotationFS annotation = inWindow.get(0); - a.setFeatureValue(feature, annotation); - } else { - a.setFeatureValue(feature, null); - } - } - } else if (argExpr instanceof GenericFeatureExpression && !feature.getRange().isPrimitive()) { - FeatureExpression fe = ((GenericFeatureExpression) argExpr).getFeatureExpression(); - TypeExpression typeExpr = fe.getTypeExpr(context, stream); - Type t = typeExpr.getType(context, stream); - List<AnnotationFS> inWindow = stream.getAnnotationsInWindow(a, t); - if (fe instanceof SimpleFeatureExpression) { - SimpleFeatureExpression sfe = (SimpleFeatureExpression) fe; - List<AnnotationFS> featureAnnotations = new ArrayList<>(sfe.getFeatureAnnotations(inWindow, - stream, context, false)); - if (feature.getRange().isArray()) { - a.setFeatureValue(feature, UIMAUtils.toFSArray(stream.getJCas(), featureAnnotations)); - } else if (!featureAnnotations.isEmpty()) { - AnnotationFS annotation = featureAnnotations.get(0); - a.setFeatureValue(feature, annotation); - } - } else { - if (feature.getRange().isArray()) { - a.setFeatureValue(feature, UIMAUtils.toFSArray(stream.getJCas(), inWindow)); - } else { - AnnotationFS annotation = inWindow.get(0); - a.setFeatureValue(feature, annotation); - } - } - } - } private List<AnnotationFS> getAnnotations(AnnotationFS annotation, Type type, FeatureMatchExpression fme, RutaStream stream) { Modified: uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/MatchedTextAction.java URL: http://svn.apache.org/viewvc/uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/MatchedTextAction.java?rev=1713281&r1=1713280&r2=1713281&view=diff ============================================================================== --- uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/MatchedTextAction.java (original) +++ uima/ruta/branches/UIMA-4408/ruta-core/src/main/java/org/apache/uima/ruta/action/MatchedTextAction.java Sun Nov 8 19:02:06 2015 @@ -19,7 +19,6 @@ package org.apache.uima.ruta.action; -import java.util.ArrayList; import java.util.List; import org.apache.uima.cas.text.AnnotationFS; @@ -46,7 +45,7 @@ public class MatchedTextAction extends A public void execute(MatchContext context, RutaStream stream, InferenceCrowd crowd) { RuleMatch match = context.getRuleMatch(); RuleElement element = context.getElement(); - List<Integer> indexList = getIndexList(context, stream); + List<Integer> indexList = getIndexList(list, context, stream); List<AnnotationFS> matchedAnnotations = match.getMatchedAnnotations(indexList, element.getContainer()); for (AnnotationFS matchedAnnotation : matchedAnnotations) { @@ -63,23 +62,4 @@ public class MatchedTextAction extends A return list; } - protected List<Integer> getIndexList(MatchContext context, RutaStream stream) { - RuleElement element = context.getElement(); - List<Integer> indexList = new ArrayList<Integer>(); - if (list == null || list.isEmpty()) { - int self = element.getContainer().getRuleElements().indexOf(element) + 1; - indexList.add(self); - return indexList; - } - int last = Integer.MAX_VALUE - 1; - for (INumberExpression each : list) { - // not allowed for feature matches - int value = each.getIntegerValue(context, stream); - for (int i = Math.min(value, last + 1); i < value; i++) { - indexList.add(i); - } - indexList.add(value); - } - return indexList; - } }