[ 
https://issues.apache.org/jira/browse/UIMA-2147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13120477#comment-13120477
 ] 

Richard Eckart de Castilho commented on UIMA-2147:
--------------------------------------------------

Lets see what I can make up and/or pick up from our source codes

1) I imagine to write test cases for components that do internally not use the 
JCas API, but that are configurable with respect to the type system. In the 
test case, however, I use some types that I commonly use and for these I have 
JCas wrappers.

2) I imagine to have the "comfort" of JCas wrappers, but do not want to 
actually use JCas (avoiding to initialize the JCas subsystem). For some 
UIMA-buildin types, there are constants like these, which would be nice to have 
for custom JCas wrappers as well.

{noformat}
annotationType = aJCas.getTypeSystem().getType(CAS.TYPE_NAME_ANNOTATION);
beginFeature = annotationType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_BEGIN);
endFeature = annotationType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_END);
{noformat}

3) We have some cases were we use CAS.createAnnotation to create an annotation 
of a particular type (e.g. Verb, Noun, etc.) in a CAS-based component. We know, 
that the type will be a sub-type of a certain type (PartOfSpeechTag) and will 
have a certain feature (posValue). So we have this code:

{noformat}
AnnotationFS posAnno = aCAS.createAnnotation(posType, offset, offset + len);
posAnno.setStringValue(posType.getFeatureByBaseName("PosValue"), pos);
{noformat}

If somebody changed the type system, we could not get a compiler warning that 
"PosValue" is no longer available. If we used a constant from a JCas wrapper 
which is generated from the type system, we would notice that however. Ok, we 
have test-cases, but I still like static compiler checks more.

4) Consider StatusCallbackListenerImpl:165 - here String literals are used 
which do not allow for static compile-time checks.

{noformat}
      Type t = aCas.getTypeSystem().getType("uima.cpm.FileLocation");
      Feature f = t.getFeatureByBaseName("DocumentSize");
{noformat}

5) The constants could allow to conveniently search for usages of a 
feature/type in situations where a the CAS API is used.

So it boils down to compile-time checks and maintainability.
                
> Generate static fields for type names and feature names in JCas wrappers
> ------------------------------------------------------------------------
>
>                 Key: UIMA-2147
>                 URL: https://issues.apache.org/jira/browse/UIMA-2147
>             Project: UIMA
>          Issue Type: Improvement
>          Components: Core Java Framework
>    Affects Versions: 2.3.1
>            Reporter: Richard Eckart de Castilho
>
> It would be convient if the JCas wrapper generator would create static final 
> String fields for feature names and for the type name, e.g.
> public static final String TYPE_NAME = "my.jcastypes.Type";
> public static final String FEAT_BEGIN = "begin";
> This would allow cleaner programming with JCas wrappers in cases where the 
> names are required. In particular it would allow to detect certain errors at 
> compile-time and facilitate refactoring.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to