Fixed for 2.2, thanks for reporting and providing the test case.
This Groovy stuff looks pretty cool, I'll have to check it out
some more...

--Thilo

Thilo Goetz wrote:
> The easiest place to create a test case is on Jira.  Open a Jira
> bug for UIMA, and you can attach the test case.  When you do that,
> please check the box that says something like, ok to include in
> Apache code (so we can check it in and use it as regression test).
> 
> Groovy, hm.  Never used it before.  If it doesn't take me more than
> 5 min to set up in Eclipse, and I can still debug, not a problem ;-)
> 
> --Thilo
> 
> Philip Ogren wrote:
>> Yes.  I will throw one together.  Would you mind if I used Groovy for
>> this - or is that going to be annoying?  Let me know.  Also, from an
>> earlier email I saw on this list it seems that attachments are a
>> problem.  Is there some place where I could directly load a test case?
>>
>> In the mean time, here is a work around I just put together (I'm still
>> unit testing the code that uses this - so I'm not certain this is bug
>> free):
>>
>>    public static FSIterator getWindowIterator(JCas jCas, Annotation
>> windowAnnotation, Type type)
>>    {
>>        ConstraintFactory constraintFactory = jCas.getConstraintFactory();
>>              FeaturePath beginFeaturePath = jCas.createFeaturePath();
>>        beginFeaturePath.addFeature(type.getFeatureByBaseName("begin"));
>>        FSIntConstraint intConstraint =
>> constraintFactory.createIntConstraint();
>>        intConstraint.geq(windowAnnotation.getBegin());
>>        FSMatchConstraint beginConstraint =
>> constraintFactory.embedConstraint(beginFeaturePath, intConstraint);
>>
>>        FeaturePath endFeaturePath = jCas.createFeaturePath();
>>        endFeaturePath.addFeature(type.getFeatureByBaseName("end"));
>>        intConstraint = constraintFactory.createIntConstraint();
>>        intConstraint.leq(windowAnnotation.getEnd());
>>        FSMatchConstraint endConstraint =
>> constraintFactory.embedConstraint(endFeaturePath, intConstraint);
>>
>>        FSMatchConstraint windowConstraint =
>> constraintFactory.and(beginConstraint,endConstraint);
>>        FSIndex windowIndex = jCas.getAnnotationIndex(type);
>>        FSIterator windowIterator =
>> jCas.createFilteredIterator(windowIndex.iterator(), windowConstraint);
>>
>>        return windowIterator;
>>    }
>>
>>
>>
>> Thilo Goetz wrote:
>>> That's a bug.  The underlying implementation of the two
>>> iterator types you mention is totally different, hence
>>> you see this only in one of them.  Any chance you could
>>> provide a self-contained test case that exhibits this?
>>>
>>> --Thilo
>>>
>>> Philip Ogren wrote:
>>>  
>>>> I am having difficulty with using the FSIterator returned by the
>>>> AnnotationIndex.subiterator(AnnotationFS) method.
>>>> The following is a code fragment:
>>>>
>>>> AnnotationIndex annotationIndex = jCas.getAnnotationIndex(tokenType);
>>>> FSIterator tokenIterator =
>>>> annotationIndex.subiterator(sentenceAnnotation);
>>>> annotationIterator.moveTo(tokenAnnotation);
>>>>
>>>>
>>>> Here is the relevant portion of the stack trace:
>>>>
>>>>     java.lang.ClassCastException: edu.colorado.cslr.dessert.types.Token
>>>>     at java.util.Collections.indexedBinarySearch(Unknown Source)
>>>>     at java.util.Collections.binarySearch(Unknown Source)
>>>>     at org.apache.uima.cas.impl.Subiterator.moveTo(Subiterator.java:224)
>>>>
>>>>
>>>> If I change the second line to the following, then I do not have any
>>>> problems with an exception being thrown.
>>>>
>>>> FSIterator tokenIterator = annotationIndex.iterator();
>>>>
>>>>
>>>> Is this a bug or some misunderstanding on my part of how subiterator
>>>> should work?
>>>>
>>>> Thanks,
>>>> Philip
>>>>     
>>>
>>>   

Reply via email to