Author: schor
Date: Wed Nov  4 14:37:04 2015
New Revision: 1712554

URL: http://svn.apache.org/viewvc?rev=1712554&view=rev
Log:
[UIMA-4666] update JCasgen to generate new style of JCas cover classes for v3

Removed:
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCas_Type.javajet
Modified:
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html
    
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java?rev=1712554&r1=1712553&r2=1712554&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/JCasTypeTemplate.java
 Wed Nov  4 14:37:04 2015
@@ -26,66 +26,87 @@ import org.apache.uima.resource.metadata
 public class JCasTypeTemplate implements Jg.IJCasTypeTemplate {
 
   public String generate(Object argument) {
-    StringBuffer stringBuffer = new StringBuffer();
+    StringBuilder stringBuilder = new StringBuilder();
 
-    stringBuffer.append("\n\n");
+    stringBuilder.append("\n\n");
     Object [] args = (Object [])argument;
     Jg jg = (Jg)args[0];
     TypeDescription td = (TypeDescription)args[1]; 
    jg.packageName = jg.getJavaPkg(td); 
-    stringBuffer.append("/* First created by JCasGen ");
-    stringBuffer.append(jg.getDate());
-    stringBuffer.append(" */\n");
+    stringBuilder.append("   \n/* Apache UIMA v3 - First created by JCasGen ");
+    stringBuilder.append(jg.getDate());
+    stringBuilder.append(" */\n\n");
    if (0 != jg.packageName.length()) {
-    stringBuffer.append("package ");
-    stringBuffer.append(jg.packageName);
-    stringBuffer.append(";\n");
+    stringBuilder.append("package ");
+    stringBuilder.append(jg.packageName);
+    stringBuilder.append(";\n");
    } 
    else 
      jg.error.newError(IError.WARN, 
                jg.getString("pkgMissing", new Object[] {td.getName()}), null); 
-    stringBuffer.append("\nimport org.apache.uima.jcas.JCas; \nimport 
org.apache.uima.jcas.JCasRegistry;\nimport 
org.apache.uima.jcas.cas.TOP_Type;\n\n");
+    stringBuilder.append("\nimport org.apache.uima.cas.impl.CASImpl;\nimport 
org.apache.uima.cas.impl.TypeImpl;\nimport org.apache.uima.jcas.JCas; \nimport 
org.apache.uima.jcas.JCasRegistry;\n\n");
    for(Iterator i=jg.collectImports(td, false).iterator(); i.hasNext();) { 
-    stringBuffer.append("import ");
-    stringBuffer.append((String)i.next());
-    stringBuffer.append(";\n");
+    stringBuilder.append("import ");
+    stringBuilder.append((String)i.next());
+    stringBuilder.append(";\n");
    } 
-    stringBuffer.append("\n\n");
+    stringBuilder.append("\n\n");
    String typeName = jg.getJavaName(td);
-   String typeName_Type = typeName + "_Type";
-   String jcasTypeCasted = "((" + typeName_Type + ")jcasType)";
 
-    stringBuffer.append("/** ");
-    stringBuffer.append(jg.nullBlank(td.getDescription()));
-    stringBuffer.append("\n * Updated by JCasGen ");
-    stringBuffer.append(jg.getDate());
-    stringBuffer.append("\n * XML source: ");
-    stringBuffer.append(jg.xmlSourceFileName);
-    stringBuffer.append("\n * @generated */\npublic class ");
-    stringBuffer.append(typeName);
-    stringBuffer.append(" extends ");
-    stringBuffer.append(jg.getJavaName(td.getSupertypeName()));
-    stringBuffer.append(" {\n  /** @generated\n   * @ordered \n   */\n  
@SuppressWarnings (\"hiding\")\n  public final static int typeIndexID = 
JCasRegistry.register(");
-    stringBuffer.append(typeName);
-    stringBuffer.append(".class);\n  /** @generated\n   * @ordered \n   */\n  
@SuppressWarnings (\"hiding\")\n  public final static int type = typeIndexID;\n 
 /** @generated\n   * @return index of the type  \n   */\n  @Override\n  public 
             int getTypeIndexID() {return typeIndexID;}\n \n  /** Never called. 
 Disable default constructor\n   * @generated */\n  protected ");
-    stringBuffer.append(typeName);
-    stringBuffer.append("() {/* intentionally empty block */}\n    \n  /** 
Internal - constructor used by generator \n   * @generated\n   * @param addr 
low level Feature Structure reference\n   * @param type the type of this 
Feature Structure \n   */\n  public ");
-    stringBuffer.append(typeName);
-    stringBuffer.append("(int addr, TOP_Type type) {\n    super(addr, type);\n 
   readObject();\n  }\n  \n  /** @generated\n   * @param jcas JCas to which 
this Feature Structure belongs \n   */\n  public ");
-    stringBuffer.append(typeName);
-    stringBuffer.append("(JCas jcas) {\n    super(jcas);\n    readObject();   
\n  } \n");
-  if (jg.isSubTypeOfAnnotation(td)) { 
-    stringBuffer.append("\n  /** @generated\n   * @param jcas JCas to which 
this Feature Structure belongs\n   * @param begin offset to the begin spot in 
the SofA\n   * @param end offset to the end spot in the SofA \n  */  \n  public 
");
-    stringBuffer.append(typeName);
-    stringBuffer.append("(JCas jcas, int begin, int end) {\n    super(jcas);\n 
   setBegin(begin);\n    setEnd(end);\n    readObject();\n  }   \n");
-  } 
-    stringBuffer.append("\n  /** \n   * <!-- begin-user-doc -->\n   * Write 
your own initialization here\n   * <!-- end-user-doc -->\n   *\n   * @generated 
modifiable \n   */\n  private void readObject() {/*default - does nothing empty 
block */}\n     \n");
-   FeatureDescription [] fds = td.getFeatures();
-   for (int i = 0; i < fds.length; i++) { 
-     FeatureDescription fd = fds[i];
+    stringBuilder.append("/** ");
+    stringBuilder.append(jg.nullBlank(td.getDescription()));
+    stringBuilder.append("\n * Updated by JCasGen ");
+    stringBuilder.append(jg.getDate());
+    stringBuilder.append("\n * XML source: ");
+    stringBuilder.append(jg.xmlSourceFileName);
+    stringBuilder.append("\n * @generated */\npublic class ");
+    stringBuilder.append(typeName);
+    stringBuilder.append(" extends ");
+    stringBuilder.append(jg.getJavaName(td.getSupertypeName()));
+    stringBuilder.append(" {\n  /** @generated\n   * @ordered \n   */\n  
@SuppressWarnings (\"hiding\")\n  public final static int typeIndexID = 
JCasRegistry.register(");
+    stringBuilder.append(typeName);
+    stringBuilder.append(".class);\n  /** @generated\n   * @ordered \n   */\n  
@SuppressWarnings (\"hiding\")\n  public final static int type = typeIndexID;\n 
 /** @generated\n   * @return index of the type  \n   */\n  @Override\n  public 
             int getTypeIndexID() {return typeIndexID;}\n \n ");
+   
+   StringBuilder localData = new StringBuilder();
+   StringBuilder featRegistry = new StringBuilder();
+    
+   featRegistry.append("  /* Register Features */\n");
+   
+   for (FeatureDescription fd : td.getFeatures()) { 
 
      String featName = fd.getName();
      String featUName = jg.uc1(featName);  // upper case first letter
+     if (Jg.reservedFeatureNames.contains(featUName)) {
+       jg.error.newError(IError.ERROR, 
+                         jg.getString("reservedNameUsed", new Object[] { 
featName, td.getName() }),
+                         null);
+     }
+
+     String featDesc = jg.nullBlank(fd.getDescription());
+     String featDescCmt = featDesc;
+
+     String rangeType = jg.getJavaRangeType(fd);
+     String elemType = jg.getJavaRangeArrayElementType(fd);
+     
+     localData.append("  private ").append(rangeType).append(" 
_F_").append(featName).append(";  // ").append(featDescCmt).append('\n');
+     featRegistry.append("  public final static int 
_FI_").append(featName).append(" = 
JCasRegistry.registerFeature(typeIndexID);\n");   
+      
+   } /* of Features iteration */ 
+    stringBuilder.append("\n  /* *****************\n   *    Local Data   *\n   
* *****************/ \n   \n");
+    stringBuilder.append(featRegistry);
+    stringBuilder.append("\n   \n");
+    stringBuilder.append(localData);
+    stringBuilder.append(" \n  /** Never called.  Disable default 
constructor\n   * @generated */\n  protected ");
+    stringBuilder.append(typeName);
+    stringBuilder.append("() {/* intentionally empty block */}\n    \n  /** 
Internal - constructor used by generator \n   * @generated\n   * @param casImpl 
the CAS this Feature Structure belongs to\n   * @param type the type of this 
Feature Structure \n   */\n  public ");
+    stringBuilder.append(typeName);
+    stringBuilder.append("(TypeImpl type, CASImpl casImpl) {\n    super(type, 
casImpl);\n    readObject();\n  }\n  \n  /** @generated\n   * @param jcas JCas 
to which this Feature Structure belongs \n   */\n  public ");
+    stringBuilder.append(typeName);
+    stringBuilder.append("(JCas jcas) {\n    super(jcas);\n    readObject();   
\n  } \n\n  /** \n   * <!-- begin-user-doc -->\n   * Write your own 
initialization here\n   * <!-- end-user-doc -->\n   *\n   * @generated 
modifiable \n   */\n  private void readObject() {/*default - does nothing empty 
block */}\n     \n");
+   for (FeatureDescription fd : td.getFeatures()) { 
+   
+     String featName = fd.getName();
+     String featUName = jg.uc1(featName);  // upper case first letter
         if (Jg.reservedFeatureNames.contains(featUName))
           jg.error.newError(IError.ERROR, 
                 jg.getString("reservedNameUsed", new Object[] { featName, 
td.getName() }),
@@ -97,121 +118,79 @@ public class JCasTypeTemplate implements
      String rangeType = jg.getJavaRangeType(fd);
      String elemType = jg.getJavaRangeArrayElementType(fd);    
 
-    stringBuffer.append(" \n    \n  //*--------------*\n  //* Feature: ");
-    stringBuffer.append(featName);
-    stringBuffer.append("\n\n  /** getter for ");
-    stringBuffer.append(featName);
-    stringBuffer.append(" - gets ");
-    stringBuffer.append(featDescCmt);
-    stringBuffer.append("\n   * @generated\n   * @return value of the feature 
\n   */\n  public ");
-    stringBuffer.append(rangeType);
-    stringBuffer.append(" get");
-    stringBuffer.append(featUName);
-    stringBuffer.append("() {\n    ");
-    stringBuffer.append("if (");
-    stringBuffer.append(typeName_Type);
-    stringBuffer.append(".featOkTst && ");
-    stringBuffer.append(jcasTypeCasted);
-    stringBuffer.append(".casFeat_");
-    stringBuffer.append(featName);
-    stringBuffer.append(" == null)\n      jcasType.jcas.throwFeatMissing(\"");
-    stringBuffer.append(featName);
-    stringBuffer.append("\", \"");
-    stringBuffer.append(td.getName());
-    stringBuffer.append("\");\n");
-    stringBuffer.append("    return ");
-    stringBuffer.append(jg.getFeatureValue(fd, td));
-    stringBuffer.append(";}\n    \n  /** setter for ");
-    stringBuffer.append(featName);
-    stringBuffer.append(" - sets ");
-    stringBuffer.append(featDescCmt);
-    stringBuffer.append(" \n   * @generated\n   * @param v value to set into 
the feature \n   */\n  public void set");
-    stringBuffer.append(featUName);
-    stringBuffer.append("(");
-    stringBuffer.append(rangeType);
-    stringBuffer.append(" v) {\n    ");
-    stringBuffer.append("if (");
-    stringBuffer.append(typeName_Type);
-    stringBuffer.append(".featOkTst && ");
-    stringBuffer.append(jcasTypeCasted);
-    stringBuffer.append(".casFeat_");
-    stringBuffer.append(featName);
-    stringBuffer.append(" == null)\n      jcasType.jcas.throwFeatMissing(\"");
-    stringBuffer.append(featName);
-    stringBuffer.append("\", \"");
-    stringBuffer.append(td.getName());
-    stringBuffer.append("\");\n");
-    stringBuffer.append("    ");
-    stringBuffer.append(jg.setFeatureValue(fd, td));
-    stringBuffer.append(";}    \n  ");
+    stringBuilder.append(" \n    \n  //*--------------*\n  //* Feature: ");
+    stringBuilder.append(featName);
+    stringBuilder.append("\n\n  /** getter for ");
+    stringBuilder.append(featName);
+    stringBuilder.append(" - gets ");
+    stringBuilder.append(featDescCmt);
+    stringBuilder.append("\n   * @generated\n   * @return value of the feature 
\n   */\n  public ");
+    stringBuilder.append(rangeType);
+    stringBuilder.append(" get");
+    stringBuilder.append(featUName);
+    stringBuilder.append("() { return _F_");
+    stringBuilder.append(featName);
+    stringBuilder.append(";}\n    \n  /** setter for ");
+    stringBuilder.append(featName);
+    stringBuilder.append(" - sets ");
+    stringBuilder.append(featDescCmt);
+    stringBuilder.append(" \n   * @generated\n   * @param v value to set into 
the feature \n   */\n  public void set");
+    stringBuilder.append(featUName);
+    stringBuilder.append("(");
+    stringBuilder.append(rangeType);
+    stringBuilder.append(" v) {\n    ");
+  if (jg.isStringSubtype(fd)) {
+    stringBuilder.append("      _typeImpl.getFeatureByBaseName(\"");
+    stringBuilder.append(featName);
+    stringBuilder.append("\").validateIsInAllowedValue(v);\n    ");
+  }
+    stringBuilder.append("    ");
+  if (jg.isPossibleIndexKey(fd)) {
+    stringBuilder.append("      _casView.setWithCheckAndJournalJFRI(this, 
_FI_");
+    stringBuilder.append(featName);
+    stringBuilder.append(", () -> _F_");
+    stringBuilder.append(featName);
+    stringBuilder.append(" = v);\n    ");
+  } else {
+    stringBuilder.append(" \n      _casView.setWithJournalJFRI(this, _FI_");
+    stringBuilder.append(featName);
+    stringBuilder.append(", () -> _F_");
+    stringBuilder.append(featName);
+    stringBuilder.append(" = v);\n    ");
+  }
+    stringBuilder.append("  }    \n  ");
   if (jg.hasArrayRange(fd)) {
-    stringBuffer.append("  \n  /** indexed getter for ");
-    stringBuffer.append(featName);
-    stringBuffer.append(" - gets an indexed value - ");
-    stringBuffer.append(featDescCmt);
-    stringBuffer.append("\n   * @generated\n   * @param i index in the array 
to get\n   * @return value of the element at index i \n   */\n  public ");
-    stringBuffer.append(elemType);
-    stringBuffer.append(" get");
-    stringBuffer.append(featUName);
-    stringBuffer.append("(int i) {\n    ");
-    stringBuffer.append("if (");
-    stringBuffer.append(typeName_Type);
-    stringBuffer.append(".featOkTst && ");
-    stringBuffer.append(jcasTypeCasted);
-    stringBuffer.append(".casFeat_");
-    stringBuffer.append(featName);
-    stringBuffer.append(" == null)\n      jcasType.jcas.throwFeatMissing(\"");
-    stringBuffer.append(featName);
-    stringBuffer.append("\", \"");
-    stringBuffer.append(td.getName());
-    stringBuffer.append("\");\n");
-    stringBuffer.append("    ");
-    
stringBuffer.append("jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr,
 ");
-    stringBuffer.append(jcasTypeCasted);
-    stringBuffer.append(".casFeatCode_");
-    stringBuffer.append(featName);
-    stringBuffer.append("), i);\n");
-    stringBuffer.append("    return ");
-    stringBuffer.append(jg.getArrayFeatureValue(fd, td));
-    stringBuffer.append(";}\n\n  /** indexed setter for ");
-    stringBuffer.append(featName);
-    stringBuffer.append(" - sets an indexed value - ");
-    stringBuffer.append(featDescCmt);
-    stringBuffer.append("\n   * @generated\n   * @param i index in the array 
to set\n   * @param v value to set into the array \n   */\n  public void set");
-    stringBuffer.append(featUName);
-    stringBuffer.append("(int i, ");
-    stringBuffer.append(elemType);
-    stringBuffer.append(" v) { \n    ");
-    stringBuffer.append("if (");
-    stringBuffer.append(typeName_Type);
-    stringBuffer.append(".featOkTst && ");
-    stringBuffer.append(jcasTypeCasted);
-    stringBuffer.append(".casFeat_");
-    stringBuffer.append(featName);
-    stringBuffer.append(" == null)\n      jcasType.jcas.throwFeatMissing(\"");
-    stringBuffer.append(featName);
-    stringBuffer.append("\", \"");
-    stringBuffer.append(td.getName());
-    stringBuffer.append("\");\n");
-    stringBuffer.append("    ");
-    
stringBuffer.append("jcasType.jcas.checkArrayBounds(jcasType.ll_cas.ll_getRefValue(addr,
 ");
-    stringBuffer.append(jcasTypeCasted);
-    stringBuffer.append(".casFeatCode_");
-    stringBuffer.append(featName);
-    stringBuffer.append("), i);\n");
-    stringBuffer.append("    ");
-    stringBuffer.append(jg.setArrayFeatureValue(fd, td));
-    stringBuffer.append(";}\n  ");
+    stringBuilder.append("  \n  /** indexed getter for ");
+    stringBuilder.append(featName);
+    stringBuilder.append(" - gets an indexed value - ");
+    stringBuilder.append(featDescCmt);
+    stringBuilder.append("\n   * @generated\n   * @param i index in the array 
to get\n   * @return value of the element at index i \n   */\n  public ");
+    stringBuilder.append(elemType);
+    stringBuilder.append(" get");
+    stringBuilder.append(featUName);
+    stringBuilder.append("(int i) {\n     return get");
+    stringBuilder.append(featUName);
+    stringBuilder.append("().get(i);} \n\n  /** indexed setter for ");
+    stringBuilder.append(featName);
+    stringBuilder.append(" - sets an indexed value - ");
+    stringBuilder.append(featDescCmt);
+    stringBuilder.append("\n   * @generated\n   * @param i index in the array 
to set\n   * @param v value to set into the array \n   */\n  public void set");
+    stringBuilder.append(featUName);
+    stringBuilder.append("(int i, ");
+    stringBuilder.append(elemType);
+    stringBuilder.append(" v) {\n    get");
+    stringBuilder.append(featUName);
+    stringBuilder.append("().set(i, v);}  \n  ");
    } /* of hasArray */ 
-    stringBuffer.append("");
+    stringBuilder.append("");
    } /* of Features iteration */ 
-    stringBuffer.append("");
+    stringBuilder.append("");
    if (td.getName().equals("uima.cas.Annotation")) { 
-    stringBuffer.append("  ");
-    stringBuffer.append("  /** Constructor with begin and end passed as 
arguments \n    * @generated\n    * @param jcas JCas this Annotation is in\n    
* @param begin the begin offset\n    * @param end the end offset\n    */\n  
public Annotation(JCas jcas, int begin, int end) { \n        this(jcas); // 
forward to constructor \n        this.setBegin(begin); \n        
this.setEnd(end); \n  } \n  \n  /** @see 
org.apache.uima.cas.text.AnnotationFS#getCoveredText() \n    * @generated\n    
* @return the covered Text \n    */ \n  public String getCoveredText() { \n    
final CAS casView = this.getView();\n    final String text = 
casView.getDocumentText();\n    if (text == null) {\n      return null;\n    
}\n    return text.substring(getBegin(), getEnd());\n  } \n  \n  /** 
@deprecated \n    * @generated\n    * @return the begin offset \n    */\n  
public int getStart() {return getBegin();}\n");
-    stringBuffer.append("");
+    stringBuilder.append("  ");
+    stringBuilder.append("  /** Constructor with begin and end passed as 
arguments \n    * @generated\n    * @param jcas JCas this Annotation is in\n    
* @param begin the begin offset\n    * @param end the end offset\n    */\n  
public Annotation(JCas jcas, int begin, int end) { \n       this(jcas); // 
forward to constructor \n        this.setBegin(begin); \n        
this.setEnd(end);\n     readObject(); \n  } \n  \n  /** @see 
org.apache.uima.cas.text.AnnotationFS#getCoveredText() \n    * @generated\n    
* @return the covered Text \n    */ \n  public String getCoveredText() { \n    
final CAS casView = this.getView();\n    final String text = 
casView.getDocumentText();\n    if (text == null) {\n      return null;\n    
}\n    return text.substring(getBegin(), getEnd());\n  } \n  \n  /** 
@deprecated \n    * @generated\n    * @return the begin offset \n    */\n  
public int getStart() {return getBegin();}\n");
+    stringBuilder.append("");
    } /* of Annotation if-statement */ 
-    stringBuffer.append("}\n\n    ");
-    return stringBuffer.toString();
+    stringBuilder.append("}\n\n    ");
+    return stringBuilder.toString();
   }
 }
\ No newline at end of file

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java?rev=1712554&r1=1712553&r2=1712554&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/Jg.java
 Wed Nov  4 14:37:04 2015
@@ -52,11 +52,14 @@ import javax.swing.UIManager;
 
 import org.apache.uima.UIMAFramework;
 import org.apache.uima.analysis_engine.AnalysisEngineDescription;
+import org.apache.uima.cas.BuiltinTypeKinds;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.TypeSystem;
 import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.cas.impl.TypeSystemImpl;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.resource.ResourceManager;
 import org.apache.uima.resource.metadata.FeatureDescription;
@@ -791,9 +794,9 @@ public class Jg {
     simpleClassName = removePkg(getJavaName(td));
     generateClass(progressMonitor, outputDirectory, td, 
jcasTypeInstance.generate(new Object[] {
         this, td }), getJavaName(td), merger);
-    simpleClassName = removePkg(getJavaName_Type(td));
-    generateClass(progressMonitor, outputDirectory, td, 
jcas_TypeInstance.generate(new Object[] {
-        this, td }), getJavaName_Type(td), merger);
+//    simpleClassName = removePkg(getJavaName_Type(td));
+//    generateClass(progressMonitor, outputDirectory, td, 
jcas_TypeInstance.generate(new Object[] {
+//        this, td }), getJavaName_Type(td), merger);
   }
 
   String getPkg(TypeDescription td) {
@@ -1001,6 +1004,24 @@ public class Jg {
       return false;
     return bi.isArray;
   }
+  
+  boolean isPossibleIndexKey(FeatureDescription fd) {
+    String rangeTypeName = fd.getRangeTypeName();
+    // keys are primitives + string + string subtypes
+    TypeImpl rangeType = (null == typeSystem) ? null : (TypeImpl) 
typeSystem.getType(rangeTypeName);
+    return (null == typeSystem) ||          // default is to do checking
+           rangeType.isStringSubtype() ||   
+           BuiltinTypeKinds.primitiveTypeNames_contains(rangeTypeName);  // 
includes String
+  }
+  
+  boolean isStringSubtype(FeatureDescription fd) {
+    if (null != typeSystem) {
+      String rangeTypeName = fd.getRangeTypeName();
+      TypeImpl rangeType = (TypeImpl) typeSystem.getType(rangeTypeName);
+      return rangeType.getSuperType() == 
((TypeSystemImpl)typeSystem).stringType;
+    }
+    return false;
+  }
 
   String getJavaRangeArrayElementType(FeatureDescription fd) {
     String arrayElementCasNameWithNameSpace = fd.getElementType();
@@ -1050,6 +1071,8 @@ public class Jg {
   }
 
   String simpleCore(String get_set, String range, String fname, String 
tname_Type) {
+    
+    
     String v = ", v";
     if (get_set.equals("set") && range.equals("Ref"))
       v = ", jcasType.ll_cas.ll_getFSRef(v)";

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html?rev=1712554&r1=1712553&r2=1712554&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/java/org/apache/uima/tools/jcasgen/package.html
 Wed Nov  4 14:37:04 2015
@@ -21,6 +21,17 @@
 <html>
 <head><title>org.apache.uima.tools.jcasgen</title></head>
 <body>
-Classes for the JCasGen tool
+<h1>JCasGen</h1>
+<p>This describes the format of the generated JCas cover classes for UIMA 
v3.</p>
+<p>In V3</p>
+<ul>
+<li>there are no xxx_Type classes</li>
+<li>As in v2, multiple type systems may be sequentially loaded into a (reset) 
CAS, under one class loader</li>
+<li>Change: one consistent JCas gen'd set of classes is loaded per class loader
+<ul>
+<li>PEARs can't switch to alternate JCas gen'd versions; these must be 
manually (with assistance) merged once and the merged result put in the 
classpath</li>
+</ul>
+</li>
+</ul>
 </body>
 </html>

Modified: 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet
URL: 
http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet?rev=1712554&r1=1712553&r2=1712554&view=diff
==============================================================================
--- 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet
 (original)
+++ 
uima/uimaj/branches/experiment-v3-jcas/uimaj-tools/src/main/javajet/jcasgen/templates/JCasType.javajet
 Wed Nov  4 14:37:04 2015
@@ -22,7 +22,9 @@
     Jg jg = (Jg)args[0];
     TypeDescription td = (TypeDescription)args[1]; 
    jg.packageName = jg.getJavaPkg(td); %>
-/* First created by JCasGen <%=jg.getDate()%> */
+   
+/* Apache UIMA v3 - First created by JCasGen <%=jg.getDate()%> */
+
 <% if (0 != jg.packageName.length()) {%>
 package <%=jg.packageName%>;
 <% } 
@@ -30,9 +32,10 @@ package <%=jg.packageName%>;
      jg.error.newError(IError.WARN, 
                jg.getString("pkgMissing", new Object[] {td.getName()}), null); 
%>
 
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.TypeImpl;
 import org.apache.uima.jcas.JCas; 
 import org.apache.uima.jcas.JCasRegistry;
-import org.apache.uima.jcas.cas.TOP_Type;
 
 <% for(Iterator i=jg.collectImports(td, false).iterator(); i.hasNext();) { %>
 import <%=(String)i.next()%>;
@@ -40,8 +43,6 @@ import <%=(String)i.next()%>;
 
 
 <% String typeName = jg.getJavaName(td);
-   String typeName_Type = typeName + "_Type";
-   String jcasTypeCasted = "((" + typeName_Type + ")jcasType)";
 %>
 /** <%=jg.nullBlank(td.getDescription())%>
  * Updated by JCasGen <%=jg.getDate()%>
@@ -64,17 +65,51 @@ public class <%=typeName%> extends <%=jg
   @Override
   public              int getTypeIndexID() {return typeIndexID;}
  
+ <% 
+   StringBuilder localData = new StringBuilder();
+   StringBuilder featRegistry = new StringBuilder();
+    
+   featRegistry.append("  /* Register Features */\n");
+   
+   for (FeatureDescription fd : td.getFeatures()) { 
+
+     String featName = fd.getName();
+     String featUName = jg.uc1(featName);  // upper case first letter
+     if (Jg.reservedFeatureNames.contains(featUName)) {
+       jg.error.newError(IError.ERROR, 
+                         jg.getString("reservedNameUsed", new Object[] { 
featName, td.getName() }),
+                         null);
+     }
+
+     String featDesc = jg.nullBlank(fd.getDescription());
+     String featDescCmt = featDesc;
+
+     String rangeType = jg.getJavaRangeType(fd);
+     String elemType = jg.getJavaRangeArrayElementType(fd);
+     
+     localData.append("  private ").append(rangeType).append(" 
_F_").append(featName).append(";  // ").append(featDescCmt).append('\n');
+     featRegistry.append("  public final static int 
_FI_").append(featName).append(" = 
JCasRegistry.registerFeature(typeIndexID);\n");   
+      
+   } /* of Features iteration */ %>
+
+  /* *****************
+   *    Local Data   *
+   * *****************/ 
+   
+<%=featRegistry%>
+   
+<%=localData%> 
   /** Never called.  Disable default constructor
    * @generated */
   protected <%=typeName%>() {/* intentionally empty block */}
     
   /** Internal - constructor used by generator 
    * @generated
-   * @param addr low level Feature Structure reference
+   * @param casImpl the CAS this Feature Structure belongs to
    * @param type the type of this Feature Structure 
    */
-  public <%=typeName%>(int addr, TOP_Type type) {
-    super(addr, type);
+  public <%=typeName%>(TypeImpl type, CASImpl casImpl) {
+    super(type, casImpl);
     readObject();
   }
   
@@ -85,20 +120,6 @@ public class <%=typeName%> extends <%=jg
     super(jcas);
     readObject();   
   } 
-<%if (jg.isSubTypeOfAnnotation(td)) { %>
-
-  /** @generated
-   * @param jcas JCas to which this Feature Structure belongs
-   * @param begin offset to the begin spot in the SofA
-   * @param end offset to the end spot in the SofA 
-  */  
-  public <%=typeName%>(JCas jcas, int begin, int end) {
-    super(jcas);
-    setBegin(begin);
-    setEnd(end);
-    readObject();
-  }   
-<%} %>
 
   /** 
    * <!-- begin-user-doc -->
@@ -109,10 +130,8 @@ public class <%=typeName%> extends <%=jg
    */
   private void readObject() {/*default - does nothing empty block */}
      
-<% FeatureDescription [] fds = td.getFeatures();
-   for (int i = 0; i < fds.length; i++) { 
-     FeatureDescription fd = fds[i];
-
+<% for (FeatureDescription fd : td.getFeatures()) { 
+   
      String featName = fd.getName();
      String featUName = jg.uc1(featName);  // upper case first letter
         if (Jg.reservedFeatureNames.contains(featUName))
@@ -134,17 +153,22 @@ public class <%=typeName%> extends <%=jg
    * @generated
    * @return value of the feature 
    */
-  public <%=rangeType%> get<%=featUName%>() {
-    <%@ include file="../includedTemplates/FeatOkTesting.javajet"%>
-    return <%=jg.getFeatureValue(fd, td)%>;}
+  public <%=rangeType%> get<%=featUName%>() { return _F_<%=featName%>;}
     
   /** setter for <%=featName%> - sets <%=featDescCmt%> 
    * @generated
    * @param v value to set into the feature 
    */
   public void set<%=featUName%>(<%=rangeType%> v) {
-    <%@ include file="../includedTemplates/FeatOkTesting.javajet"%>
-    <%=jg.setFeatureValue(fd, td)%>;}    
+    <%if (jg.isStringSubtype(fd)) {%>
+      
_typeImpl.getFeatureByBaseName("<%=featName%>").validateIsInAllowedValue(v);
+    <%}%>
+    <%if (jg.isPossibleIndexKey(fd)) {%>
+      _casView.setWithCheckAndJournalJFRI(this, _FI_<%=featName%>, () -> 
_F_<%=featName%> = v);
+    <%} else {%> 
+      _casView.setWithJournalJFRI(this, _FI_<%=featName%>, () -> 
_F_<%=featName%> = v);
+    <%}%>
+  }    
   <%if (jg.hasArrayRange(fd)) {%>
   
   /** indexed getter for <%=featName%> - gets an indexed value - 
<%=featDescCmt%>
@@ -153,19 +177,15 @@ public class <%=typeName%> extends <%=jg
    * @return value of the element at index i 
    */
   public <%=elemType%> get<%=featUName%>(int i) {
-    <%@ include file="../includedTemplates/FeatOkTesting.javajet"%>
-    <%@ include file="../includedTemplates/ArrayBoundsChecking.javajet"%>
-    return <%=jg.getArrayFeatureValue(fd, td)%>;}
+     return get<%=featUName%>().get(i);} 
 
   /** indexed setter for <%=featName%> - sets an indexed value - 
<%=featDescCmt%>
    * @generated
    * @param i index in the array to set
    * @param v value to set into the array 
    */
-  public void set<%=featUName%>(int i, <%=elemType%> v) { 
-    <%@ include file="../includedTemplates/FeatOkTesting.javajet"%>
-    <%@ include file="../includedTemplates/ArrayBoundsChecking.javajet"%>
-    <%=jg.setArrayFeatureValue(fd, td)%>;}
+  public void set<%=featUName%>(int i, <%=elemType%> v) {
+    get<%=featUName%>().set(i, v);}  
   <% } /* of hasArray */ %>
 <% } /* of Features iteration */ %>
 <% if (td.getName().equals("uima.cas.Annotation")) { %>


Reply via email to