You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2015/12/02 18:03:52 UTC

svn commit: r1717658 - /uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java

Author: schor
Date: Wed Dec  2 17:03:52 2015
New Revision: 1717658

URL: http://svn.apache.org/viewvc?rev=1717658&view=rev
Log:
[UIMA-4674] did a source cleanup that added a bunch of @Override statements. Also added a version of getViewIterator that returns CASImpl instead of CAS. Also some generic changes - SofaFS -> Sofa for example.

Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java?rev=1717658&r1=1717657&r2=1717658&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/CASImpl.java Wed Dec  2 17:03:52 2015
@@ -457,6 +457,7 @@ public class CASImpl extends AbstractCas
    * @see org.apache.uima.cas.admin.CASMgr#setCAS(org.apache.uima.cas.CAS)
    *      Internal use Never called Kept because it's in the interface.
    */
+  @Override
   public void setCAS(CAS cas) {
   }
 
@@ -595,7 +596,7 @@ public class CASImpl extends AbstractCas
 //    }
     TypeSystemImpl tsi = getTypeSystemImpl();
     for (int i = 1; i < ser.featureOffsets.length; i++) {
-      FeatureImpl fi = (FeatureImpl) tsi.getFeatureForCode_checked(i);
+      FeatureImpl fi = tsi.getFeatureForCode_checked(i);
       int adjOffset = fi.isInInt ? 0 : fi.getRangeImpl().nbrOfUsedIntDataSlots;
       if (ser.featureOffsets[i] != (fi.getOffset() + adjOffset)) {
         throw new CASAdminException(CASAdminException.DESERIALIZATION_ERROR);
@@ -603,10 +604,12 @@ public class CASImpl extends AbstractCas
     }
   }
 
+  @Override
   public void enableReset(boolean flag) {
     this.svd.flushEnabled = flag;
   }
 
+  @Override
   public TypeSystem getTypeSystem() {
     return getTypeSystemImpl();
   }
@@ -618,6 +621,7 @@ public class CASImpl extends AbstractCas
     return this.tsi;
   }
   
+  @Override
   public ConstraintFactory getConstraintFactory() {
     return ConstraintFactory.instance();
   }
@@ -629,6 +633,7 @@ public class CASImpl extends AbstractCas
    * @param type the type to create
    * @return a Java object representing the FeatureStructure impl in Java.
    */
+  @Override
   public <T extends TOP> T createFS(Type type) {
     final TypeImpl ti = (TypeImpl) type;
     if (!ti.isCreatableAndNotBuiltinArray()) {
@@ -661,24 +666,28 @@ public class CASImpl extends AbstractCas
     return (TOP) createArrayFS(arrayLength);
   }
 
+  @Override
   public ArrayFS createArrayFS(int length) {
     checkArrayPreconditions(length);
     return (ArrayFS)           (((FsGeneratorArray)getFsGenerator(TypeSystemImpl.fsArrayTypeCode))
         .createFS(getTypeSystemImpl().fsArrayType, this, length));
   }
 
+  @Override
   public IntArrayFS createIntArrayFS(int length) {
     checkArrayPreconditions(length);
     return (IntArrayFS)        (((FsGeneratorArray)getFsGenerator(TypeSystemImpl.intArrayTypeCode))
         .createFS(getTypeSystemImpl().intArrayType, this, length));
   }
 
+  @Override
   public FloatArrayFS createFloatArrayFS(int length) {
     checkArrayPreconditions(length);
     return (FloatArrayFS)      (((FsGeneratorArray)getFsGenerator(TypeSystemImpl.floatArrayTypeCode))
         .createFS(getTypeSystemImpl().floatArrayType, this, length));
   }
 
+  @Override
   public StringArrayFS createStringArrayFS(int length) {
     checkArrayPreconditions(length);
     return (StringArrayFS)     (((FsGeneratorArray)getFsGenerator(TypeSystemImpl.stringArrayTypeCode))
@@ -747,6 +756,7 @@ public class CASImpl extends AbstractCas
   /**
    * @deprecated
    */
+  @Override
   @Deprecated
   public SofaFS createSofa(SofaID sofaID, String mimeType) {
     // extract absolute SofaName string from the ID
@@ -797,6 +807,7 @@ public class CASImpl extends AbstractCas
   /**
    * @deprecated
    */
+  @Override
   @Deprecated
   public SofaFS getSofa(SofaID sofaID) {
     // extract absolute SofaName string from the ID
@@ -804,7 +815,7 @@ public class CASImpl extends AbstractCas
   }
 
   private SofaFS getSofa(String sofaName) {
-    FSIterator<SofaFS> iterator = this.svd.baseCAS.getSofaIterator();
+    FSIterator<Sofa> iterator = this.svd.baseCAS.getSofaIterator();
     while (iterator.hasNext()) {
       SofaFS sofa = iterator.next();
       if (sofaName.equals(sofa.getSofaID())) {
@@ -839,8 +850,9 @@ public class CASImpl extends AbstractCas
     return this.svd.baseCAS;
   }
 
-  public FSIterator<SofaFS> getSofaIterator() {
-    FSIndex<SofaFS> sofaIndex = this.svd.baseCAS.indexRepository.getIndex(CAS.SOFA_INDEX_NAME);
+  @Override
+  public FSIterator<Sofa> getSofaIterator() {
+    FSIndex<Sofa> sofaIndex = this.svd.baseCAS.indexRepository.getIndex(CAS.SOFA_INDEX_NAME);
     return sofaIndex.iterator();
   }
 
@@ -979,6 +991,7 @@ public class CASImpl extends AbstractCas
     }
   }
 
+  @Override
   public FSIndexRepositoryMgr getIndexRepositoryMgr() {
     // assert(this.cas.getIndexRepository() != null);
     return this.indexRepository;
@@ -993,6 +1006,7 @@ public class CASImpl extends AbstractCas
     getIndexRepository().addFS(fs);
   }
 
+  @Override
   public FeaturePath createFeaturePath() {
     return new FeaturePathImpl();
   }
@@ -1002,10 +1016,12 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.admin.CASMgr#getTypeSystemMgr()
    */
+  @Override
   public TypeSystemMgr getTypeSystemMgr() {
     return getTypeSystemImpl();
   }
 
+  @Override
   public void reset() {
     if (!this.svd.flushEnabled) {
       throw new CASAdminException(CASAdminException.FLUSH_DISABLED);
@@ -1086,11 +1102,13 @@ public class CASImpl extends AbstractCas
   /**
    * @deprecated Use {@link #reset reset()}instead.
    */
+  @Override
   @Deprecated
   public void flush() {
     reset();
   }
   
+  @Override
   public FSIndexRepository getIndexRepository() {
     if (this == this.svd.baseCAS) {
       // BaseCas has no indexes for users
@@ -1125,6 +1143,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.CAS#fs2listIterator(FSIterator)
    */
+  @Override
   public <T extends FeatureStructure> ListIterator<T> fs2listIterator(FSIterator<T> it) {
     return new FSListIteratorImpl<T>(it);
   }
@@ -1132,6 +1151,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.admin.CASMgr#getCAS()
    */
+  @Override
   public CAS getCAS() {
     if (this.indexRepository.isCommitted()) {
       return this;
@@ -1234,6 +1254,7 @@ public class CASImpl extends AbstractCas
     return fs.size();
   }
   
+  @Override
   public int ll_getArraySize(int id) {
     return getArraySize(getFsFromId_checked(id));
   }
@@ -1481,7 +1502,7 @@ public class CASImpl extends AbstractCas
       return fs.getFeatureValue(feat).toString();
     }
     
-    throw new CASRuntimeException(CASRuntimeException.INTERNAL_ERROR);
+    throw new CASRuntimeException(UIMARuntimeException.INTERNAL_ERROR);
   }
 
   /**
@@ -1528,7 +1549,7 @@ public class CASImpl extends AbstractCas
     } else if (range == tsi.javaObjectType) {
       fs.setJavaObjectValue(feat, (s == null) ? null : deserializeJavaObject(s));
     } else {
-      throw new CASRuntimeException(CASRuntimeException.INTERNAL_ERROR);
+      throw new CASRuntimeException(UIMARuntimeException.INTERNAL_ERROR);
     }
   }
 
@@ -1643,6 +1664,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.admin.CASMgr#initCASIndexes()
    */
+  @Override
   public void initCASIndexes() throws CASException {
     final TypeSystemImpl ts = getTypeSystemImpl();
     if (!ts.isCommitted()) {
@@ -1671,6 +1693,7 @@ public class CASImpl extends AbstractCas
   }
 
   
+  @Override
   public CAS getCurrentView() {
     return getView(CAS.NAME_DEFAULT_SOFA);
   }
@@ -1678,6 +1701,7 @@ public class CASImpl extends AbstractCas
   // ///////////////////////////////////////////////////////////////////////////
   // JCas support
 
+  @Override
   public JCas getJCas() {
     if (this.jcas == null) {
       this.jcas = JCasImpl.getJCas(this);
@@ -1703,6 +1727,7 @@ public class CASImpl extends AbstractCas
   }
 
   // Create JCas view of aSofa
+  @Override
   public JCas getJCas(SofaFS aSofa) throws CASException {
     // Create base JCas, if needed
     this.svd.baseCAS.getJCas();
@@ -1721,6 +1746,7 @@ public class CASImpl extends AbstractCas
   /**
    * @deprecated
    */
+  @Override
   @Deprecated
   public JCas getJCas(SofaID aSofaID) throws CASException {
     SofaFS sofa = getSofa(aSofaID);
@@ -1759,6 +1785,7 @@ public class CASImpl extends AbstractCas
     return aView;
   }
 
+  @Override
   public CAS createView(String aSofaID) {
     // do sofa mapping for current component
     String absoluteSofaName = null;
@@ -1779,6 +1806,7 @@ public class CASImpl extends AbstractCas
     return newView;
   }
 
+  @Override
   public CAS getView(String aSofaID) {
     // do sofa mapping for current component
     String absoluteSofaName = null;
@@ -1822,6 +1850,7 @@ public class CASImpl extends AbstractCas
    * This only works if the sofaNbrs go up by 1 (except for the initial sofa) in
    * the input sequence of calls.
    */
+  @Override
   public CAS getView(SofaFS aSofa) {
     Sofa sofa = (Sofa) aSofa;
     final int sofaNbr = sofa.getSofaRef();
@@ -1888,7 +1917,7 @@ public class CASImpl extends AbstractCas
       // ll_getStringValue(((FeatureStructureImpl)aSofa).getAddress(),
       // ((FeatureImpl) idFeat).getCode());
       if (!this.svd.sofaNameSet.contains(id)) {
-        throw new CASRuntimeException(CASRuntimeException.INTERNAL_ERROR);
+        throw new CASRuntimeException(UIMARuntimeException.INTERNAL_ERROR);
 //            CASRuntimeException.SOFANAME_ALREADY_EXISTS, id);
       }
 //      this.svd.sofaNameSet.add(id);
@@ -1900,6 +1929,7 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_getTypeSystem()
    */
+  @Override
   public LowLevelTypeSystem ll_getTypeSystem() {
     return getTypeSystemImpl().getLowLevelTypeSystem();
   }
@@ -1909,6 +1939,7 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_getIndexRepository()
    */
+  @Override
   public LowLevelIndexRepository ll_getIndexRepository() {
     return this.indexRepository;
   }
@@ -1999,6 +2030,7 @@ public class CASImpl extends AbstractCas
     return r;
   }
 
+  @Override
   public final boolean ll_isRefType(int typeCode) {
     if ((typeCode == TypeSystemImpl.intTypeCode) || (typeCode == TypeSystemImpl.floatTypeCode)
         || (typeCode == TypeSystemImpl.stringTypeCode) || (typeCode == TypeSystemImpl.byteTypeCode)
@@ -2012,11 +2044,13 @@ public class CASImpl extends AbstractCas
     return true;
   }
 
+  @Override
   public final int ll_getTypeClass(int typeCode) {
     return TypeSystemImpl.getTypeClass(getTypeSystemImpl().getTypeForCode(typeCode));
   }
 
   // backwards compatibility only
+  @Override
   public final int ll_createFS(int typeCode) {
     Type ti = getTypeSystemImpl().ll_getTypeForCode(typeCode);
     TOP fs = createFS(ti);
@@ -2024,6 +2058,7 @@ public class CASImpl extends AbstractCas
     return fs.id();
   }
 
+  @Override
   public final int ll_createFS(int typeCode, boolean doCheck) {
     TypeImpl ti = (TypeImpl) getTypeSystemImpl().ll_getTypeForCode(typeCode);
     if (doCheck) {
@@ -2039,26 +2074,32 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_createArray(int, int)
    */
+  @Override
   public int ll_createArray(int typeCode, int arrayLength) {
     return createArray(getTypeSystemImpl().getTypeForCode_checked(typeCode), arrayLength).id();      
   }
 
+  @Override
   public int ll_createByteArray(int arrayLength) {
     return ll_createArray(TypeSystemImpl.byteArrayTypeCode, arrayLength);
   }
 
+  @Override
   public int ll_createBooleanArray(int arrayLength) {
     return ll_createArray(TypeSystemImpl.booleanArrayTypeCode, arrayLength);
   }
 
+  @Override
   public int ll_createShortArray(int arrayLength) {
     return ll_createArray(TypeSystemImpl.shortArrayTypeCode, arrayLength);
   }
 
+  @Override
   public int ll_createLongArray(int arrayLength) {
     return ll_createArray(TypeSystemImpl.longArrayTypeCode, arrayLength);
   }
 
+  @Override
   public int ll_createDoubleArray(int arrayLength) {
     return ll_createArray(TypeSystemImpl.doubleArrayTypeCode, arrayLength);
   }
@@ -2068,6 +2109,7 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_createArray(int, int, boolean)
    */
+  @Override
   public int ll_createArray(int typeCode, int arrayLength, boolean doChecks) {
     if (doChecks) {
       final TypeSystemImpl ts = getTypeSystemImpl();
@@ -2101,6 +2143,7 @@ public class CASImpl extends AbstractCas
         || (tc == TYPE_CLASS_SHORTARRAY) || (tc == TYPE_CLASS_LONGARRAY) || (tc == TYPE_CLASS_DOUBLEARRAY));
   }
 
+  @Override
   public final int ll_getFSRef(FeatureStructure fs) {
     if (null == fs) {
       return NULL;
@@ -2108,10 +2151,12 @@ public class CASImpl extends AbstractCas
     return ((FeatureStructureImplC)fs).id();
   }
 
+  @Override
   public <T extends TOP> T ll_getFSForRef(int id) {
     return getFsFromId_checked(id);
   }
 
+  @Override
   public final int ll_getIntValue(int fsRef, int featureCode) {
     return getFsFromId_checked(fsRef).getIntValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode));
   }
@@ -2120,10 +2165,12 @@ public class CASImpl extends AbstractCas
 //    return ll_getFSForRef(fsRef)._intData[featureOffset];
 //  }
 
+  @Override
   public final float ll_getFloatValue(int fsRef, int featureCode) {
     return getFsFromId_checked(fsRef).getFloatValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode));
   }
 
+  @Override
   public final String ll_getStringValue(int fsRef, int featureCode) {
     return getFsFromId_checked(fsRef).getStringValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode));
   }
@@ -2132,6 +2179,7 @@ public class CASImpl extends AbstractCas
 //    return (String) getFsFromId_checked(fsRef)._refData[featureOffset];
 //  }
 
+  @Override
   public final int ll_getRefValue(int fsRef, int featureCode) {
     return getFsFromId_checked(fsRef).getFeatureValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode)).id();
   }
@@ -2140,6 +2188,7 @@ public class CASImpl extends AbstractCas
 //    return ((FeatureStructureImplC)getFsFromId_checked(fsRef)._refData[featureOffset]).id();
 //  }
 
+  @Override
   public final int ll_getIntValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2153,6 +2202,7 @@ public class CASImpl extends AbstractCas
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_getFloatValue(int, int,
    *      boolean)
    */
+  @Override
   public final float ll_getFloatValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2166,6 +2216,7 @@ public class CASImpl extends AbstractCas
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_getStringValue(int, int,
    *      boolean)
    */
+  @Override
   public final String ll_getStringValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2178,6 +2229,7 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_getRefValue(int, int, boolean)
    */
+  @Override
   public final int ll_getRefValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkFsRefConditions(fsRef, featureCode);
@@ -2426,16 +2478,18 @@ public class CASImpl extends AbstractCas
   private boolean removeAndRecord(TOP fs, FSIndexRepositoryImpl ir, FSsTobeAddedback toBeAdded) {
     boolean wasRemoved = ir.removeIfInCorrputableIndexInThisView(fs);
     if (wasRemoved) {
-      ((FSsTobeAddedback) toBeAdded).recordRemove(fs, ir, 1);
+      toBeAdded.recordRemove(fs, ir, 1);
     }
     return wasRemoved;
   }  
 
   
+  @Override
   public final void ll_setIntValue(int fsRef, int featureCode, int value) {
     setFeatureValue(fsRef, featureCode, value);
   }
 
+  @Override
   public final void ll_setFloatValue(int fsRef, int featureCode, float value) {
     setFeatureValue(fsRef, featureCode, float2int(value));
   }
@@ -2444,17 +2498,20 @@ public class CASImpl extends AbstractCas
 //    setFeatureValueNoIndexCorruptionCheck(fsRef, featureCode, float2int(value));
 //  }
 
+  @Override
   public final void ll_setStringValue(int fsRef, int featureCode, String value) {
     TOP fs = getFsFromId_checked(fsRef);
     FeatureImpl feat = getTypeSystemImpl().getFeatureForCode(featureCode);
     fs.setStringValue(feat, value);
   }
 
+  @Override
   public final void ll_setRefValue(int fsRef, int featureCode, int value) {
     // no index check because refs can't be keys
     setFeatureValueNoIndexCorruptionCheck(fsRef, featureCode, getFsFromId_checked(value));
   }
   
+  @Override
   public final void ll_setIntValue(int fsRef, int featureCode, int value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2462,6 +2519,7 @@ public class CASImpl extends AbstractCas
     ll_setIntValue(fsRef, featureCode, value);
   }
 
+  @Override
   public final void ll_setFloatValue(int fsRef, int featureCode, float value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2469,6 +2527,7 @@ public class CASImpl extends AbstractCas
     ll_setFloatValue(fsRef, featureCode, value);
   }
 
+  @Override
   public final void ll_setStringValue(int fsRef, int featureCode, String value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2476,6 +2535,7 @@ public class CASImpl extends AbstractCas
     ll_setStringValue(fsRef, featureCode, value);
   }
 
+  @Override
   public final void ll_setCharBufferValue(int fsRef, int featureCode, char[] buffer, int start,
       int length, boolean doTypeChecks) {
     if (doTypeChecks) {
@@ -2484,6 +2544,7 @@ public class CASImpl extends AbstractCas
     ll_setCharBufferValue(fsRef, featureCode, buffer, start, length);
   }
 
+  @Override
   public final void ll_setCharBufferValue(int fsRef, int featureCode, char[] buffer, int start,
       int length) {
     ll_setStringValue(fsRef, featureCode, new String(buffer, start, length));
@@ -2495,6 +2556,7 @@ public class CASImpl extends AbstractCas
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_copyCharBufferValue(int, int,
    *      char, int)
    */
+  @Override
   public int ll_copyCharBufferValue(int fsRef, int featureCode, char[] buffer, int start) {
     String str = ll_getStringValue(fsRef, featureCode);
     if (str == null) {
@@ -2518,11 +2580,13 @@ public class CASImpl extends AbstractCas
    * @see org.apache.uima.cas.impl.LowLevelCAS#ll_getCharBufferValueSize(int,
    *      int)
    */
+  @Override
   public int ll_getCharBufferValueSize(int fsRef, int featureCode) {
     String str = ll_getStringValue(fsRef, featureCode);
     return str.length();
   }
 
+  @Override
   public final void ll_setRefValue(int fsRef, int featureCode, int value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkFsRefConditions(fsRef, featureCode);
@@ -2546,18 +2610,22 @@ public class CASImpl extends AbstractCas
     return array.get(i);
   }
   
+  @Override
   public final int ll_getIntArrayValue(int fsRef, int position) {
     return getIntArrayValue(((IntegerArray)getFsFromId_checked(fsRef)), position);
   }
 
+  @Override
   public final float ll_getFloatArrayValue(int fsRef, int position) {
     return getFloatArrayValue(((FloatArray)getFsFromId_checked(fsRef)), position);
   }
   
+  @Override
   public final String ll_getStringArrayValue(int fsRef, int position) {
     return getStringArrayValue(((StringArray)getFsFromId_checked(fsRef)), position);
   }
 
+  @Override
   public final int ll_getRefArrayValue(int fsRef, int position) {
     return ((TOP)getRefArrayValue(((FSArray)getFsFromId_checked(fsRef)), position)).id();
   }
@@ -2642,6 +2710,7 @@ public class CASImpl extends AbstractCas
     checkArrayBounds(fsRef, position);
   }
 
+  @Override
   public final int ll_getIntArrayValue(int fsRef, int position, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.intArrayTypeCode, position);
@@ -2649,6 +2718,7 @@ public class CASImpl extends AbstractCas
     return ll_getIntArrayValue(fsRef, position);
   }
 
+  @Override
   public float ll_getFloatArrayValue(int fsRef, int position, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.floatArrayTypeCode, position);
@@ -2656,6 +2726,7 @@ public class CASImpl extends AbstractCas
     return ll_getFloatArrayValue(fsRef, position);
   }
 
+  @Override
   public String ll_getStringArrayValue(int fsRef, int position, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.stringArrayTypeCode, position);
@@ -2663,6 +2734,7 @@ public class CASImpl extends AbstractCas
     return ll_getStringArrayValue(fsRef, position);
   }
 
+  @Override
   public int ll_getRefArrayValue(int fsRef, int position, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.fsArrayTypeCode, position);
@@ -2670,6 +2742,7 @@ public class CASImpl extends AbstractCas
     return ll_getRefArrayValue(fsRef, position);
   }
 
+  @Override
   public void ll_setIntArrayValue(int fsRef, int position, int value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.intArrayTypeCode, position);
@@ -2677,6 +2750,7 @@ public class CASImpl extends AbstractCas
     ll_setIntArrayValue(fsRef, position, value);
   }
 
+  @Override
   public void ll_setFloatArrayValue(int fsRef, int position, float value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.floatArrayTypeCode, position);
@@ -2684,6 +2758,7 @@ public class CASImpl extends AbstractCas
     ll_setFloatArrayValue(fsRef, position, value);
   }
 
+  @Override
   public void ll_setStringArrayValue(int fsRef, int position, String value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.stringArrayTypeCode, position);
@@ -2691,6 +2766,7 @@ public class CASImpl extends AbstractCas
     ll_setStringArrayValue(fsRef, position, value);
   }
 
+  @Override
   public void ll_setRefArrayValue(int fsRef, int position, int value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkPrimitiveArrayConditions(fsRef, TypeSystemImpl.fsArrayTypeCode, position);
@@ -2702,21 +2778,25 @@ public class CASImpl extends AbstractCas
    * Low Level Array Setters
    * ************************/
   
+  @Override
   public void ll_setIntArrayValue(int fsRef, int position, int value) {
     IntegerArray array = getFsFromId_checked(fsRef);
     array.set(position,  value);  // that set operation does required journaling
   }
 
+  @Override
   public void ll_setFloatArrayValue(int fsRef, int position, float value) {
     FloatArray array = getFsFromId_checked(fsRef);
     array.set(position,  value);  // that set operation does required journaling
   }
 
+  @Override
   public void ll_setStringArrayValue(int fsRef, int position, String value) {
     StringArray array = getFsFromId_checked(fsRef);
     array.set(position,  value);  // that set operation does required journaling
   }
 
+  @Override
   public void ll_setRefArrayValue(int fsRef, int position, int value) {
     FSArray array = getFsFromId_checked(fsRef);
     array.set(position,  getFsFromId_checked(value));  // that set operation does required journaling
@@ -2726,19 +2806,23 @@ public class CASImpl extends AbstractCas
    * @param fsRef an id for a FS
    * @return the type code for this FS
    */
+  @Override
   public int ll_getFSRefType(int fsRef) {
     return getFsFromId_checked(fsRef)._getTypeCode();
   }
 
+  @Override
   public int ll_getFSRefType(int fsRef, boolean doChecks) {
     // type code is always valid
     return ll_getFSRefType(fsRef);
   }
 
+  @Override
   public LowLevelCAS getLowLevelCAS() {
     return this;
   }
 
+  @Override
   public int size() {
     throw new UIMARuntimeException(UIMARuntimeException.INTERNAL_ERROR);
   }
@@ -2748,6 +2832,7 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.admin.CASMgr#getJCasClassLoader()
    */
+  @Override
   public ClassLoader getJCasClassLoader() {
     return this.svd.jcasClassLoader;
   }
@@ -2757,6 +2842,7 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.admin.CASMgr#setJCasClassLoader(java.lang.ClassLoader)
    */
+  @Override
   public void setJCasClassLoader(ClassLoader classLoader) {
     this.svd.jcasClassLoader = classLoader;
   }
@@ -2821,11 +2907,13 @@ public class CASImpl extends AbstractCas
 
   }
   
+  @Override
   public FeatureValuePath createFeatureValuePath(String featureValuePath)
       throws CASRuntimeException {
     return FeatureValuePathImpl.getFeaturePath(featureValuePath);
   }
 
+  @Override
   public void setOwner(CasOwner aCasOwner) {
     CASImpl baseCas = getBaseCAS();
     if (baseCas != this) {
@@ -2840,6 +2928,7 @@ public class CASImpl extends AbstractCas
    * 
    * @see org.apache.uima.cas.AbstractCas_ImplBase#release()
    */
+  @Override
   public void release() {
     CASImpl baseCas = getBaseCAS();
     if (baseCas != this) {
@@ -2854,35 +2943,42 @@ public class CASImpl extends AbstractCas
    *    A R R A Y   C R E A T I O N
    ************************************/
   
+  @Override
   public ByteArrayFS createByteArrayFS(int length) throws CASRuntimeException {
     checkArrayPreconditions(length);
     return new ByteArray(this.getJCas(), length);
   }
 
+  @Override
   public BooleanArrayFS createBooleanArrayFS(int length) throws CASRuntimeException {
     checkArrayPreconditions(length);
     return new BooleanArray(this.getJCas(), length);
   }
 
+  @Override
   public ShortArrayFS createShortArrayFS(int length) throws CASRuntimeException {
     checkArrayPreconditions(length);
     return new ShortArray(this.getJCas(), length);
   }
 
+  @Override
   public LongArrayFS createLongArrayFS(int length) throws CASRuntimeException {
     checkArrayPreconditions(length);
     return new LongArray(this.getJCas(), length);
   }
 
+  @Override
   public DoubleArrayFS createDoubleArrayFS(int length) throws CASRuntimeException {
     checkArrayPreconditions(length);
     return new DoubleArray(this.getJCas(), length);
   }
 
+  @Override
   public byte ll_getByteValue(int fsRef, int featureCode) {
     return (byte) ll_getIntValue(fsRef, featureCode);
   }
 
+  @Override
   public byte ll_getByteValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2890,11 +2986,13 @@ public class CASImpl extends AbstractCas
     return ll_getByteValue(fsRef, featureCode);
   }
 
+  @Override
   public boolean ll_getBooleanValue(int fsRef, int featureCode) {
     TOP fs = getFsFromId_checked(fsRef);
     return CASImpl.TRUE == fs.getIntValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode));
   }
 
+  @Override
   public boolean ll_getBooleanValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2902,10 +3000,12 @@ public class CASImpl extends AbstractCas
     return ll_getBooleanValue(fsRef, featureCode);
   }
 
+  @Override
   public short ll_getShortValue(int fsRef, int featureCode) {
     return (short) (ll_getIntValue(fsRef, featureCode));
   }
 
+  @Override
   public short ll_getShortValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2918,6 +3018,7 @@ public class CASImpl extends AbstractCas
 //    return this.getLongHeap().getHeapValue(offset);
 //  }
 
+  @Override
   public long ll_getLongValue(int fsRef, int featureCode) {
     TOP fs = getFsFromId_checked(fsRef);
     return fs.getLongValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode));
@@ -2928,6 +3029,7 @@ public class CASImpl extends AbstractCas
     return fs.getLongValueOffset(offset);
   }
   
+  @Override
   public long ll_getLongValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2935,6 +3037,7 @@ public class CASImpl extends AbstractCas
     return ll_getLongValue(fsRef, featureCode);
   }
 
+  @Override
   public double ll_getDoubleValue(int fsRef, int featureCode) {
     TOP fs = getFsFromId_checked(fsRef);
     return fs.getDoubleValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode));
@@ -2946,6 +3049,7 @@ public class CASImpl extends AbstractCas
   }
 
 
+  @Override
   public double ll_getDoubleValue(int fsRef, int featureCode, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2953,10 +3057,12 @@ public class CASImpl extends AbstractCas
     return ll_getDoubleValue(fsRef, featureCode);
   }
 
+  @Override
   public void ll_setBooleanValue(int fsRef, int featureCode, boolean value) {
     setFeatureValue(fsRef, featureCode, value ? CASImpl.TRUE : CASImpl.FALSE);
   }
 
+  @Override
   public void ll_setBooleanValue(int fsRef, int featureCode, boolean value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2964,10 +3070,12 @@ public class CASImpl extends AbstractCas
     ll_setBooleanValue(fsRef, featureCode, value);
   }
 
+  @Override
   public final void ll_setByteValue(int fsRef, int featureCode, byte value) {
     setFeatureValue(fsRef, featureCode, value);
   }
 
+  @Override
   public void ll_setByteValue(int fsRef, int featureCode, byte value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2975,10 +3083,12 @@ public class CASImpl extends AbstractCas
     ll_setByteValue(fsRef, featureCode, value);
   }
 
+  @Override
   public final void ll_setShortValue(int fsRef, int featureCode, short value) {
     setFeatureValue(fsRef, featureCode, value);
   }
 
+  @Override
   public void ll_setShortValue(int fsRef, int featureCode, short value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2986,12 +3096,14 @@ public class CASImpl extends AbstractCas
     ll_setShortValue(fsRef, featureCode, value);
   }
 
+  @Override
   public void ll_setLongValue(int fsRef, int featureCode, long value) {
     TOP fs = getFsFromId_checked(fsRef);
-    fs.setLongValue((FeatureImpl) getTypeSystemImpl().getFeatureForCode_checked(featureCode), value);
+    fs.setLongValue(getTypeSystemImpl().getFeatureForCode_checked(featureCode), value);
    
   }
 
+  @Override
   public void ll_setLongValue(int fsRef, int featureCode, long value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -2999,10 +3111,12 @@ public class CASImpl extends AbstractCas
     ll_setLongValue(fsRef, featureCode, value);
   }
 
+  @Override
   public void ll_setDoubleValue(int fsRef, int featureCode, double value) {
     ll_setLongValue(fsRef, featureCode, Double.doubleToLongBits(value));
   }
 
+  @Override
   public void ll_setDoubleValue(int fsRef, int featureCode, double value, boolean doTypeChecks) {
     if (doTypeChecks) {
       checkNonArrayConditions(fsRef, featureCode);
@@ -3010,81 +3124,101 @@ public class CASImpl extends AbstractCas
     ll_setDoubleValue(fsRef, featureCode, value);
   }
 
+  @Override
   public byte ll_getByteArrayValue(int fsRef, int position) {
     return ((ByteArray) getFsFromId_checked(fsRef)).get(position);
   }
 
+  @Override
   public byte ll_getByteArrayValue(int fsRef, int position, boolean doTypeChecks) {
     return ll_getByteArrayValue(fsRef, position);
   }
 
+  @Override
   public boolean ll_getBooleanArrayValue(int fsRef, int position) {
     return ((BooleanArray) getFsFromId_checked(fsRef)).get(position);
   }
 
+  @Override
   public boolean ll_getBooleanArrayValue(int fsRef, int position, boolean doTypeChecks) {
     return ll_getBooleanArrayValue(fsRef, position);
   }
 
+  @Override
   public short ll_getShortArrayValue(int fsRef, int position) {
     return ((ShortArray) getFsFromId_checked(fsRef)).get(position);
   }
 
+  @Override
   public short ll_getShortArrayValue(int fsRef, int position, boolean doTypeChecks) {
     return ll_getShortArrayValue(fsRef, position);
   }
 
+  @Override
   public long ll_getLongArrayValue(int fsRef, int position) {
     return ((LongArray) getFsFromId_checked(fsRef)).get(position);
   }
 
+  @Override
   public long ll_getLongArrayValue(int fsRef, int position, boolean doTypeChecks) {
     return ll_getLongArrayValue(fsRef, position);
   }
 
+  @Override
   public double ll_getDoubleArrayValue(int fsRef, int position) {
     return ((DoubleArray) getFsFromId_checked(fsRef)).get(position);
   }
 
+  @Override
   public double ll_getDoubleArrayValue(int fsRef, int position, boolean doTypeChecks) {
     return ll_getDoubleArrayValue(fsRef, position);
   }
 
+  @Override
   public void ll_setByteArrayValue(int fsRef, int position, byte value) {
     ((ByteArray) getFsFromId_checked(fsRef)).set(position, value);
   }
 
+  @Override
   public void ll_setByteArrayValue(int fsRef, int position, byte value, boolean doTypeChecks) {
     ll_setByteArrayValue(fsRef, position, value);}
 
+  @Override
   public void ll_setBooleanArrayValue(int fsRef, int position, boolean b) {
     ((BooleanArray) getFsFromId_checked(fsRef)).set(position, b);
   }
 
+  @Override
   public void ll_setBooleanArrayValue(int fsRef, int position, boolean value, boolean doTypeChecks) {
     ll_setBooleanArrayValue(fsRef, position, value);
   }
 
+  @Override
   public void ll_setShortArrayValue(int fsRef, int position, short value) {
     ((ShortArray) getFsFromId_checked(fsRef)).set(position, value);
   }
 
+  @Override
   public void ll_setShortArrayValue(int fsRef, int position, short value, boolean doTypeChecks) {
     ll_setShortArrayValue(fsRef, position, value);
   }
 
+  @Override
   public void ll_setLongArrayValue(int fsRef, int position, long value) {
     ((LongArray) getFsFromId_checked(fsRef)).set(position, value);
   }
 
+  @Override
   public void ll_setLongArrayValue(int fsRef, int position, long value, boolean doTypeChecks) {
     ll_setLongArrayValue(fsRef, position, value);
   }
 
+  @Override
   public void ll_setDoubleArrayValue(int fsRef, int position, double d) {
     ((DoubleArray) getFsFromId_checked(fsRef)).set(position, d);
   }
 
+  @Override
   public void ll_setDoubleArrayValue(int fsRef, int position, double value, boolean doTypeChecks) {
     ll_setDoubleArrayValue(fsRef, position, value);
   }
@@ -3109,6 +3243,7 @@ public class CASImpl extends AbstractCas
     return this == getBaseCAS();
   }
 
+  @Override
   public AnnotationFS createAnnotation(Type type, int begin, int end) {
     // duplicates a later check
 //    if (this.isBaseCas()) {
@@ -3150,6 +3285,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.CAS#getAnnotationType()
    */
+  @Override
   public Type getAnnotationType() {
     return getTypeSystemImpl().annotType;
   }
@@ -3157,6 +3293,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.CAS#getEndFeature()
    */
+  @Override
   public Feature getEndFeature() {
     return getTypeSystemImpl().endFeat;
   }
@@ -3164,6 +3301,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.CAS#getBeginFeature()
    */
+  @Override
   public Feature getBeginFeature() {
     return getTypeSystemImpl().startFeat;
   }
@@ -3250,6 +3388,7 @@ public class CASImpl extends AbstractCas
    *   DocumentAnnotation or an instance of Annotation - the Java cover class used for 
    *   annotations when JCas is not being used.
    */
+  @Override
   public <T extends Annotation> T getDocumentAnnotation() {
     T docAnnot = getDocumentAnnotationNoCreate();
     if (null == docAnnot) {
@@ -3288,6 +3427,7 @@ public class CASImpl extends AbstractCas
     return 0;
   }
   
+  @Override
   public String getDocumentLanguage() {
     if (this == this.svd.baseCAS) {
       // base CAS has no document
@@ -3297,10 +3437,12 @@ public class CASImpl extends AbstractCas
     return ll_getStringValue(docAnnotAddr, TypeSystemImpl.langFeatCode);
   }
 
+  @Override
   public String getDocumentText() {
     return this.getSofaDataString();
   }
 
+  @Override
   public String getSofaDataString() {
     if (this == this.svd.baseCAS) {
       // base CAS has no document
@@ -3309,6 +3451,7 @@ public class CASImpl extends AbstractCas
     return mySofaIsValid() ? mySofaRef.getLocalStringData() : null;
   }
 
+  @Override
   public FeatureStructure getSofaDataArray() {
     if (this == this.svd.baseCAS) {
       // base CAS has no Sofa
@@ -3317,6 +3460,7 @@ public class CASImpl extends AbstractCas
     return mySofaIsValid() ? mySofaRef.getLocalFSData() : null;
   }
 
+  @Override
   public String getSofaDataURI() {
     if (this == this.svd.baseCAS) {
       // base CAS has no Sofa
@@ -3325,6 +3469,7 @@ public class CASImpl extends AbstractCas
     return mySofaIsValid() ? mySofaRef.getSofaURI() : null;
   }
 
+  @Override
   public InputStream getSofaDataStream() {
     if (this == this.svd.baseCAS) {
       // base CAS has no Sofa nothin
@@ -3335,6 +3480,7 @@ public class CASImpl extends AbstractCas
  
   }
 
+  @Override
   public String getSofaMimeType() {
     if (this == this.svd.baseCAS) {
       // base CAS has no Sofa
@@ -3343,6 +3489,7 @@ public class CASImpl extends AbstractCas
     return mySofaIsValid() ? mySofaRef.getSofaMime() : null;
   }
 
+  @Override
   public Sofa getSofa() {
     return mySofaRef;
   }
@@ -3350,10 +3497,12 @@ public class CASImpl extends AbstractCas
   /**
    * @return the addr of the sofaFS associated with this view, or 0
    */
+  @Override
   public int ll_getSofa() {
     return mySofaIsValid() ? mySofaRef.id() : 0;
   }
 
+  @Override
   public String getViewName() {
     return (this == getViewFromSofaNbr(1)) ? CAS.NAME_DEFAULT_SOFA :
            mySofaIsValid() ? mySofaRef.getSofaID() : 
@@ -3371,6 +3520,7 @@ public class CASImpl extends AbstractCas
     }
   }
 
+  @Override
   public void setDocumentLanguage(String languageCode) {
     if (this == this.svd.baseCAS) {
       throw new CASRuntimeException(CASRuntimeException.INVALID_BASE_CAS_METHOD, "setDocumentLanguage(String)");
@@ -3388,22 +3538,27 @@ public class CASImpl extends AbstractCas
     c.accept(sofa);
   }
 
+  @Override
   public void setDocumentText(String text) {
     setSofaDataString(text, "text");
   }
 
+  @Override
   public void setSofaDataString(String text, String mime) throws CASRuntimeException {
     setSofaThingsMime(sofa -> sofa.setLocalSofaData(text, mime), "setSofaDataString(text, mime)");
   }
 
+  @Override
   public void setSofaDataArray(FeatureStructure array, String mime) {
     setSofaThingsMime(sofa -> sofa.setLocalSofaData(array, mime), "setSofaDataArray(FeatureStructure, mime)");
   }
 
+  @Override
   public void setSofaDataURI(String uri, String mime) throws CASRuntimeException {
     setSofaThingsMime(sofa -> sofa.setRemoteSofaURI(uri, mime), "setSofaDataURI(String, String)");
   }
 
+  @Override
   public void setCurrentComponentInfo(ComponentInfo info) {
     // always store component info in base CAS
     this.svd.componentInfo = info;
@@ -3416,6 +3571,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.CAS#addFsToIndexes(FeatureStructure fs)
    */
+  @Override
   public void addFsToIndexes(FeatureStructure fs) {
 //    if (fs instanceof AnnotationBaseFS) {
 //      final CAS sofaView = ((AnnotationBaseFS) fs).getView();
@@ -3432,6 +3588,7 @@ public class CASImpl extends AbstractCas
   /**
    * @see org.apache.uima.cas.CAS#removeFsFromIndexes(FeatureStructure fs)
    */
+  @Override
   public void removeFsFromIndexes(FeatureStructure fs) {
     this.indexRepository.removeFS(fs);
   }
@@ -3453,6 +3610,7 @@ public class CASImpl extends AbstractCas
 //    return this;
   }
 
+  @Override
   public CASImpl ll_getSofaCasView(int id) {
     return getSofaCasView(getFsFromId_checked(id));
   }
@@ -3471,11 +3629,26 @@ public class CASImpl extends AbstractCas
 //    return viewList.iterator();
 //  }
   
+  /**
+   * Creates the initial view (without a sofa) if not present
+   * @return the number of views, excluding the base view, including the initial view (even if not initially present or no sofa)
+   */
+  public int getNumberOfViews() {
+    CASImpl initialView = (CASImpl) getInitialView();  // creates one if not existing, w/o sofa
+    int nbrSofas = this.svd.baseCAS.indexRepository.getIndex(CAS.SOFA_INDEX_NAME).size();
+    return initialView.mySofaIsValid() ? nbrSofas : 1 + nbrSofas; 
+  }
+  
+  public int getNumberOfSofas() {
+    return this.svd.baseCAS.indexRepository.getIndex(CAS.SOFA_INDEX_NAME).size();
+  }
+   
   /*
    * (non-Javadoc)
    * 
    * @see org.apache.uima.cas.CAS#getViewIterator()
    */
+  @Override
   public Iterator<CAS> getViewIterator() {
     return new Iterator<CAS>() {
       
@@ -3488,7 +3661,7 @@ public class CASImpl extends AbstractCas
                                                            // if initial view has a sofa, we just use the 
                                                            // sofa iterator instead.
 
-      final FSIterator<SofaFS> sofaIter = getSofaIterator(); 
+      final FSIterator<Sofa> sofaIter = getSofaIterator(); 
 
       @Override
       public boolean hasNext() {
@@ -3515,11 +3688,52 @@ public class CASImpl extends AbstractCas
     };
   }
 
+  @Override
+  public Iterator<CASImpl> getViewImplIterator() {
+    return new Iterator<CASImpl>() {
+      
+      final CASImpl initialView = (CASImpl) getInitialView();  // creates one if not existing, w/o sofa  
+
+      boolean isInitialView_but_noSofa = !initialView.mySofaIsValid(); // true if has no Sofa in initial view
+                                                           //     but is reset to false once iterator moves
+                                                           //     off of initial view.
+      
+                                                           // if initial view has a sofa, we just use the 
+                                                           // sofa iterator instead.
+
+      final FSIterator<Sofa> sofaIter = getSofaIterator(); 
+
+      @Override
+      public boolean hasNext() {
+        if (isInitialView_but_noSofa) {
+          return true;
+        }
+        return sofaIter.hasNext(); 
+      }
+
+      @Override
+      public CASImpl next() {
+        if (isInitialView_but_noSofa) {
+          isInitialView_but_noSofa = false;  // no incr of sofa iterator because it was missing initial view
+          return initialView;
+        }
+        return (CASImpl) getView(sofaIter.next());
+      }
+
+      @Override
+      public void remove() {
+        throw new UnsupportedOperationException();
+      }
+      
+    };
+  }
+
   /*
    * (non-Javadoc)
    * 
    * @see org.apache.uima.cas.CAS#getViewIterator(java.lang.String)
    */
+  @Override
   public Iterator<CAS> getViewIterator(String localViewNamePrefix) {
     // do sofa mapping for current component
     String absolutePrefix = null;
@@ -3532,7 +3746,7 @@ public class CASImpl extends AbstractCas
 
     // find Sofas with this prefix
     List<CAS> viewList = new ArrayList<CAS>();
-    FSIterator<SofaFS> sofaIter = getSofaIterator();
+    FSIterator<Sofa> sofaIter = getSofaIterator();
     while (sofaIter.hasNext()) {
       SofaFS sofa = sofaIter.next();
       String sofaId = sofa.getSofaID();
@@ -3629,6 +3843,7 @@ public class CASImpl extends AbstractCas
    * extend the MarkerImpl to keep track of indexes into
    * these IntVectors specifying where that marker starts/ends.
    */
+  @Override
   public Marker createMarker() {
     if (!this.svd.flushEnabled) {
 	  throw new CASAdminException(CASAdminException.FLUSH_DISABLED);