Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java?rev=1711942&r1=1711941&r2=1711942&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyStringList.java Mon Nov 2 12:19:46 2015 @@ -19,10 +19,14 @@ package org.apache.uima.jcas.cas; +import org.apache.uima.cas.CAS; +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.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; -public class NonEmptyStringList extends StringList { +public class NonEmptyStringList extends StringList implements NonEmptyList { public final static int typeIndexID = JCasRegistry.register(NonEmptyStringList.class); @@ -32,56 +36,62 @@ public class NonEmptyStringList extends return typeIndexID; } - // Never called. Disable default constructor - protected NonEmptyStringList() { + private final static int head_featCode; + private final static int tail_featCode; + + static { + TypeSystemImpl tsi = TypeSystemImpl.staticTsi; + TypeImpl listType = tsi.getType(CAS.TYPE_NAME_NON_EMPTY_STRING_LIST); + + head_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_HEAD).getCode(); + tail_featCode = listType.getFeatureByBaseName(CAS.FEATURE_BASE_NAME_TAIL).getCode(); } - /* Internal - Constructor used by generator */ - public NonEmptyStringList(int addr, TOP_Type type) { - super(addr, type); + /* local data */ + private String _F_head; + private StringList _F_tail; + + // Never called. Disable default constructor + protected NonEmptyStringList() { } public NonEmptyStringList(JCas jcas) { super(jcas); } - // *------------------* + /** + * used by generator + * Make a new AnnotationBase + * @param c - + * @param t - + */ + + public NonEmptyStringList(TypeImpl t, CASImpl c) { + super(t, c); + } + +// *------------------* // * Feature: head /* getter for head * */ - public String getHead() { - if (NonEmptyStringList_Type.featOkTst - && ((NonEmptyStringList_Type) jcasType).casFeat_head == null) - this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyStringList"); - return jcasType.ll_cas.ll_getStringValue(addr, - ((NonEmptyStringList_Type) jcasType).casFeatCode_head); - } + public String getHead() { return _F_head; } /* setter for head * */ public void setHead(String v) { - if (NonEmptyStringList_Type.featOkTst - && ((NonEmptyStringList_Type) jcasType).casFeat_head == null) - this.jcasType.jcas.throwFeatMissing("head", "uima.cas.NonEmptyStringList"); - jcasType.ll_cas.ll_setStringValue(addr, ((NonEmptyStringList_Type) jcasType).casFeatCode_head, - v); + _F_head = v; + // no corruption check - can't be a key + _casView.maybeLogUpdate(this, head_featCode); } // *------------------* // * Feature: tail /* getter for tail * */ - public StringList getTail() { - if (NonEmptyStringList_Type.featOkTst - && ((NonEmptyStringList_Type) jcasType).casFeat_tail == null) - this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyStringList"); - return (StringList) (jcasType.ll_cas.ll_getFSForRef(jcasType.ll_cas.ll_getRefValue(addr, - ((NonEmptyStringList_Type) jcasType).casFeatCode_tail))); - } + public StringList getTail() { return _F_tail; } /* setter for tail * */ - public void setTail(StringList v) { - if (NonEmptyStringList_Type.featOkTst - && ((NonEmptyStringList_Type) jcasType).casFeat_tail == null) - this.jcasType.jcas.throwFeatMissing("tail", "uima.cas.NonEmptyStringList"); - jcasType.ll_cas.ll_setRefValue(addr, ((NonEmptyStringList_Type) jcasType).casFeatCode_tail, - jcasType.ll_cas.ll_getFSRef(v)); + public void setTail(CommonList v) { + _F_tail = (StringList) v; + // no corruption check - can't be a key + _casView.maybeLogUpdate(this, tail_featCode); } + }
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/ShortArray.java Mon Nov 2 12:19:46 2015 @@ -20,11 +20,13 @@ package org.apache.uima.jcas.cas; import org.apache.uima.cas.ShortArrayFS; +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; /** JCas class model for ShortArray */ -public final class ShortArray extends TOP implements ShortArrayFS { +public final class ShortArray extends TOP implements CommonPrimitiveArray, ShortArrayFS { /** * Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover * class or class instance to the corresponding instance of the _Type class @@ -43,13 +45,11 @@ public final class ShortArray extends TO return typeIndexID; } + private final short[] theArray; // never called. Here to disable default constructor + @SuppressWarnings("unused") private ShortArray() { - } - - /* Internal - Constructor used by generator */ - public ShortArray(int addr, TOP_Type type) { - super(addr, type); + theArray = null; } /** @@ -58,79 +58,80 @@ public final class ShortArray extends TO * @param length The number of elements in the new array */ public ShortArray(JCas jcas, int length) { - this(jcas.getLowLevelCas().ll_createShortArray(length), jcas.getType(typeIndexID)); + super(jcas); + theArray = new short[length]; + } + + /** + * used by generator + * Make a new ShortArray of given size + * @param c - + * @param t - + * @param length The number of elements in the new array + */ + public ShortArray(TypeImpl t, CASImpl c, int length) { + super(t, c); + theArray = new short[length]; } /** * @see org.apache.uima.cas.ShortArrayFS#get(int) */ public short get(int i) { - jcasType.casImpl.checkArrayBounds(addr, i); - return jcasType.ll_cas.ll_getShortArrayValue(addr, i); + return theArray[i]; } /** * @see org.apache.uima.cas.ShortArrayFS#set(int , short) */ public void set(int i, short v) { - jcasType.casImpl.checkArrayBounds(addr, i); - jcasType.ll_cas.ll_setShortArrayValue(addr, i, v); + theArray[i] = v; + _casView.maybeLogArrayUpdate(this, null, i); } /** * @see org.apache.uima.cas.ShortArrayFS#copyFromArray(short[], int, int, int) */ - public void copyFromArray(short[] src, int srcOffset, int destOffset, int length) { - jcasType.casImpl.checkArrayBounds(addr, destOffset, length); - for (int i = 0; i < length; i++) { - jcasType.ll_cas.ll_setShortArrayValue(addr, i + destOffset, src[i + srcOffset]); - } + public void copyFromArray(short[] src, int srcPos, int destPos, int length) { + System.arraycopy(src, srcPos, theArray, destPos, length); } /** * @see org.apache.uima.cas.ShortArrayFS#copyToArray(int, short[], int, int) */ - public void copyToArray(int srcOffset, short[] dest, int destOffset, int length) { - jcasType.casImpl.checkArrayBounds(addr, srcOffset, length); - for (int i = 0; i < length; i++) { - dest[i + destOffset] = jcasType.ll_cas.ll_getShortArrayValue(addr, i + srcOffset); - } + public void copyToArray(int srcPos, short[] dest, int destPos, int length) { + System.arraycopy(theArray, srcPos, dest, destPos, length); } /** * @see org.apache.uima.cas.ShortArrayFS#toArray() */ public short[] toArray() { - final int size = size(); - short[] outArray = new short[size]; - copyToArray(0, outArray, 0, size); - return outArray; + return theArray.clone(); } /** return the size of the array */ public int size() { - return jcasType.casImpl.ll_getArraySize(addr); + return theArray.length; } /** * @see org.apache.uima.cas.ShortArrayFS#copyToArray(int, String[], int, int) */ - public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) { - jcasType.casImpl.checkArrayBounds(addr, srcOffset, length); + public void copyToArray(int srcPos, String[] dest, int destPos, int length) { + _casView.checkArrayBounds(theArray.length, srcPos, length); for (int i = 0; i < length; i++) { - dest[i + destOffset] = Short.toString(jcasType.ll_cas.ll_getShortArrayValue(addr, i - + srcOffset)); + dest[i + destPos] = Short.toString(theArray[i + srcPos]); } } /** * @see org.apache.uima.cas.ShortArrayFS#copyFromArray(String[], int, int, int) */ - public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) { - jcasType.casImpl.checkArrayBounds(addr, destOffset, length); + public void copyFromArray(String[] src, int srcPos, int destPos, int length) { + _casView.checkArrayBounds(theArray.length, destPos, length); for (int i = 0; i < length; i++) { - jcasType.ll_cas.ll_setShortArrayValue(addr, i + destOffset, Short.parseShort(src[i - + srcOffset])); + theArray[i + destPos] = Short.parseShort(src[i + srcPos]); } } @@ -140,4 +141,19 @@ public final class ShortArray extends TO copyToArray(0, strArray, 0, size); return strArray; } + + // internal use + public short[] _getTheArray() { + return theArray; + } + + /* (non-Javadoc) + * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray) + */ + @Override + public void copyValuesFrom(CommonArray v) { + ShortArray bv = (ShortArray) v; + System.arraycopy(bv.theArray, 0, theArray, 0, theArray.length); + } + } Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java?rev=1711942&r1=1711941&r2=1711942&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/Sofa.java Mon Nov 2 12:19:46 2015 @@ -21,264 +21,223 @@ package org.apache.uima.jcas.cas; import java.io.InputStream; -import org.apache.uima.cas.CAS; import org.apache.uima.cas.CASRuntimeException; import org.apache.uima.cas.Feature; import org.apache.uima.cas.FeatureStructure; import org.apache.uima.cas.SofaFS; -import org.apache.uima.cas.SofaID; import org.apache.uima.cas.impl.CASImpl; -import org.apache.uima.cas.impl.FeatureImpl; -import org.apache.uima.jcas.JCas; +import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCasRegistry; -import org.apache.uima.jcas.impl.JCasImpl; -/** - * Updated by JCasGen Fri Apr 29 16:05:04 EDT 2005 - */ public class Sofa extends TOP implements SofaFS { - /** - * @generated - * @ordered - */ + public final static int typeIndexID = JCasRegistry.register(Sofa.class); - /** - * @generated - * @ordered - */ public final static int type = typeIndexID; + @Override + public int getTypeIndexID() { + return typeIndexID; + } + + /* local data */ + + private final int _F_sofaNum; + private final String _F_sofaID; // view name or _InitialView + private String _F_mimeType; // may be changed + private TOP _F_sofaArray; + private String _F_sofaString; + private String _F_sofaURI; + + protected Sofa() { + _F_sofaNum = 0; + _F_sofaID = null; + _F_mimeType = null; + } + + /** + * used by generator, not used + * Make a new Sofa + * @param c - + * @param t - + */ + public Sofa(TypeImpl t, CASImpl c) { + super(t, c); + _F_sofaNum = 0; + _F_sofaID = null; + } + + public Sofa(TypeImpl t, CASImpl c, int sofaNum, String viewName, String mimeType) { + super(t, c); + _F_sofaNum = sofaNum; + _F_sofaID = viewName; + _F_mimeType = mimeType; + } - /** @generated */ - public int getTypeIndexID() { - return typeIndexID; - } - - /** - * Never called. Disable default constructor - * - * @generated - */ - protected Sofa() { - } - - /** - * Internal - constructor used by generator - * - * @generated - * @param addr the address - * @param type the type - */ - public Sofa(int addr, TOP_Type type) { - super(addr, type); - readObject(); - } - - /** - * - * @param jcas JCas - * @param ID the sofa ID - * @param mimeType the mime type - * - * @deprecated As of v2.0, use {@link JCasImpl#createView(String)} to create a view, which will - * also create the Sofa for that view. - - */ - @Deprecated - public Sofa(JCas jcas, SofaID ID, String mimeType) { - super(jcas); - final CASImpl casImpl = jcasType.casImpl; - casImpl.addSofa(casImpl.createFS(this.addr), ID.getSofaID(), mimeType); - casImpl.getView(this); // needed to make reset work - } - - /** - * <!-- begin-user-doc --> Write your own initialization here <!-- end-user-doc --> - * - * @generated modifiable - */ - - private void readObject() { - } + // no constructor for Sofa for users + // use cas createSofa instead + + +// /** +// * +// * @param jcas JCas +// * @param ID the sofa ID +// * @param mimeType the mime type +// * +// * @deprecated As of v2.0, use {@link JCasImpl#createView(String)} to create a view, which will +// * also create the Sofa for that view. +// +// */ +// @Deprecated +// public Sofa(JCas jcas, SofaID ID, String mimeType) { +// super(jcas); +// final CASImpl casImpl = jcasType.casImpl; +// casImpl.addSofa(this, ID.getSofaID(), mimeType); +// casImpl.getView(this); // needed to make reset work +// } // *--------------* // * Feature: sofaNum // ** Note: this gets the same feature, sofaNum, as getSofaRef, below /** - * getter for sofaNum - gets - * - * @generated + * getter for sofaNum * @return the sofa number */ - public int getSofaNum() { - if (Sofa_Type.featOkTst && ((Sofa_Type) jcasType).casFeat_sofaNum == null) - this.jcasType.jcas.throwFeatMissing("sofaNum", "uima.cas.Sofa"); - return jcasType.ll_cas.ll_getIntValue(addr, ((Sofa_Type) jcasType).casFeatCode_sofaNum); - } - + public int getSofaNum() { return _F_sofaNum; } + // *--------------* // * Feature: sofaID /** - * getter for sofaID - gets - * - * @generated + * getter for sofaID + * @return the sofaID, which is the same as the view name */ - public String getSofaID() { - if (Sofa_Type.featOkTst && ((Sofa_Type) jcasType).casFeat_sofaID == null) - this.jcasType.jcas.throwFeatMissing("sofaID", "uima.cas.Sofa"); - return jcasType.ll_cas.ll_getStringValue(addr, ((Sofa_Type) jcasType).casFeatCode_sofaID); - } + @Override + public String getSofaID() { return _F_sofaID; } // *--------------* // * Feature: mimeType /** * getter for mimeType - gets - * - * @generated * @return the mime type */ - public String getMimeType() { - if (Sofa_Type.featOkTst && ((Sofa_Type) jcasType).casFeat_mimeType == null) - this.jcasType.jcas.throwFeatMissing("mimeType", "uima.cas.Sofa"); - return jcasType.ll_cas.ll_getStringValue(addr, ((Sofa_Type) jcasType).casFeatCode_mimeType); - } - - // IMPORTANT: Methods below here are duplicated in SofaFSImpl. If they are - // changed here they must be changed in SofaFSImpl as well. + public String getMimeType() { return _F_mimeType; } /** * @see org.apache.uima.cas.SofaFS#setLocalSofaData(FeatureStructure) This method is duplicated in * SofaFSImpl. Any changes should be made in both places. + * aFS must be an array */ - public void setLocalSofaData(FeatureStructure aFS) { - final Feature arrayFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFAARRAY); - if (isSofaDataSet()) { - CASRuntimeException e = new CASRuntimeException(CASRuntimeException.SOFADATA_ALREADY_SET, - new String[] { "setLocalSofaData()" }); - throw e; - } - super.setFeatureValue(arrayFeat, aFS); + @Override + public void setLocalSofaData(FeatureStructure aFS) { + if (isSofaDataSet()) { throwAlreadySet("setLocalSofaData()"); } + _F_sofaArray = (TOP) aFS; + } + + public void setLocalSofaData(FeatureStructure aFS, String mimeType) { + setLocalSofaData(aFS); + _F_mimeType = mimeType; } /** * @see org.apache.uima.cas.SofaFS#setLocalSofaData(String) This method is duplicated in * SofaFSImpl. Any changes should be made in both places. */ - public void setLocalSofaData(String aString) { - final Feature stringFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFASTRING); - if (isSofaDataSet()) { - CASRuntimeException e = new CASRuntimeException(CASRuntimeException.SOFADATA_ALREADY_SET, - new String[] { "setLocalSofaData()" }); - throw e; - } - super.setStringValue(stringFeat, aString); - // create or update the document annotation for this Sofa's view - CAS view = this.getCASImpl().getView(this); - ((CASImpl) view).updateDocumentAnnotation(); + @Override + public void setLocalSofaData(String aString) { + if (isSofaDataSet()) { throwAlreadySet("setLocalSofaData()"); } + _F_sofaString = aString; + + // create or update the document annotation for this Sofa's view + ((CASImpl)(_casView.getView(this))).updateDocumentAnnotation(); + } + + public void setLocalSofaData(String aString, String mimeType) { + setLocalSofaData(aString); + _F_mimeType = mimeType; } /** - * @see org.apache.uima.cas.SofaFS#getLocalFSData() This method is duplicated in SofaFSImpl. Any - * changes should be made in both places. + * @see org.apache.uima.cas.SofaFS#getLocalFSData() + * returns an UIMA Array whose data represents the sofa */ - public FeatureStructure getLocalFSData() { - final Feature arrayFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFAARRAY); - return this.getFeatureValue(arrayFeat); - } + @Override + public FeatureStructure getLocalFSData() { return _F_sofaArray; } /** * @see org.apache.uima.cas.SofaFS#getLocalStringData() This method is duplicated in SofaFSImpl. * Any changes should be made in both places. */ - public String getLocalStringData() { - final Feature stringFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFASTRING); - return this.getStringValue(stringFeat); - } + @Override + public String getLocalStringData() { return _F_sofaString; } /** * @see org.apache.uima.cas.SofaFS#setRemoteSofaURI(String) This method is duplicated in * SofaFSImpl. Any changes should be made in both places. */ - public void setRemoteSofaURI(String aURI) { - final Feature uriFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFAURI); - if (isSofaDataSet()) { - CASRuntimeException e = new CASRuntimeException(CASRuntimeException.SOFADATA_ALREADY_SET, - new String[] { "setRemoteSofaURI()" }); - throw e; - } - super.setStringValue(uriFeat, aURI); + @Override + public void setRemoteSofaURI(String aURI) { + if (isSofaDataSet()) { throwAlreadySet("setRemoteSofaURI()"); } + _F_sofaURI = aURI; + } + + public void setRemoteSofaURI(String aURI, String mimeType) { + setRemoteSofaURI(aURI); + _F_mimeType = mimeType; } private boolean isSofaDataSet() { - final Feature uriFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFAURI); - final Feature arrayFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFAARRAY); - final Feature stringFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFASTRING); - - if (null != this.getStringValue(uriFeat) || null != this.getFeatureValue(arrayFeat) - || null != this.getStringValue(stringFeat)) { - return true; - } - return false; - } + return getLocalStringData() != null || // string data + getLocalFSData() != null || // array data + getSofaURI() != null; // remote data + } + + @Override + public String getSofaMime() { return _F_mimeType; } - // override setStringValue for SofaFS to not work! - // This method is duplicated in SofaFSImpl. Any changes should be made in both places. - public void setStringValue(Feature feat, String val) { - CASRuntimeException e = new CASRuntimeException(CASRuntimeException.PROTECTED_SOFA_FEATURE); - throw e; - } + @Override + public String getSofaURI() { return _F_sofaURI; } - // override setFeatureValue for SofaFS to not work! - // This method is duplicated in SofaFSImpl. Any changes should be made in both places. - public void setFeatureValue(Feature feat, FeatureStructure fs) { - CASRuntimeException e = new CASRuntimeException(CASRuntimeException.PROTECTED_SOFA_FEATURE); - throw e; - } + // ** Note: this gets the feature named "sofaNum" + @Override + public int getSofaRef() { return _F_sofaNum; } - // override setIntValue for SofaFS to not work! - // This method is duplicated in SofaFSImpl. Any changes should be made in both places. - public void setIntValue(Feature feat, Integer val) { - CASRuntimeException e = new CASRuntimeException(CASRuntimeException.PROTECTED_SOFA_FEATURE); - throw e; + @Override + public InputStream getSofaDataStream() { + return _casView.getSofaDataStream(this); } - - // This method is duplicated in SofaFSImpl. Any changes should be made in both places. - public String getSofaMime() { - final Feature mimeFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFAMIME); - return jcasType.casImpl.getLowLevelCAS().ll_getStringValue(super.addr, - ((FeatureImpl) mimeFeat).getCode()); + + /** + * These getter methods are for creating method handle access + * The getter name must match the feature name + transformation + * - used in generic pretty printing routines + */ + + public TOP getSofaArray() { return _F_sofaArray; } + + public String getSofaString() { return _F_sofaString; } + + + // override setStringValue for SofaFS to prohibit setting in this manner! + @Override + public void setStringValue(Feature feat, String val) { + throw new CASRuntimeException(CASRuntimeException.PROTECTED_SOFA_FEATURE); + } + + // override setFeatureValue for SofaFS to prohibit setting in this manner! + @Override + public void setFeatureValue(Feature feat, FeatureStructure fs) { + throw new CASRuntimeException(CASRuntimeException.PROTECTED_SOFA_FEATURE); } - // This method is duplicated in SofaFSImpl. Any changes should be made in both places. - public String getSofaURI() { - final Feature uriFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFAURI); - return jcasType.casImpl.getLowLevelCAS().ll_getStringValue(super.addr, - ((FeatureImpl) uriFeat).getCode()); - } - - // This method is duplicated in SofaFSImpl. Any changes should be made in both places. - // ** Note: this gets the feature named "sofaNum" - public int getSofaRef() { - final Feature numFeat = jcasType.casImpl.getTypeSystem().getFeatureByFullName( - CAS.FEATURE_FULL_NAME_SOFANUM); - return jcasType.casImpl.getLowLevelCAS().ll_getIntValue(super.addr, - ((FeatureImpl) numFeat).getCode()); - } + // override setIntValue for SofaFS to prohibit setting in this manner! + public void setIntValue(Feature feat, Integer val) { + throw new CASRuntimeException(CASRuntimeException.PROTECTED_SOFA_FEATURE); + } - public InputStream getSofaDataStream() { - return jcasType.casImpl.getSofaDataStream(this); + + private void throwAlreadySet(String msg) { + throw new CASRuntimeException(CASRuntimeException.SOFADATA_ALREADY_SET, msg); } } Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java?rev=1711942&r1=1711941&r2=1711942&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringArray.java Mon Nov 2 12:19:46 2015 @@ -20,11 +20,13 @@ package org.apache.uima.jcas.cas; import org.apache.uima.cas.StringArrayFS; +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; /** JCas class model for StringArray */ -public final class StringArray extends TOP implements StringArrayFS { +public final class StringArray extends TOP implements CommonPrimitiveArray, StringArrayFS { /** * Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover * class or class instance to the corresponding instance of the _Type class @@ -43,13 +45,11 @@ public final class StringArray extends T return typeIndexID; } + private final String[] theArray; // never called. Here to disable default constructor + @SuppressWarnings("unused") private StringArray() { - } - - /* Internal - Constructor used by generator */ - public StringArray(int addr, TOP_Type type) { - super(addr, type); + theArray = null; } /** @@ -58,61 +58,60 @@ public final class StringArray extends T * @param length The number of elements in the new array */ public StringArray(JCas jcas, int length) { - this( - /* addr */jcas.getLowLevelCas().ll_createArray(jcas.getType(typeIndexID).casTypeCode, length, - true), - /* type */jcas.getType(typeIndexID)); + super(jcas); + theArray = new String[length]; + } + + /** + * used by generator + * Make a new StringArray of given size + * @param c - + * @param t - + * @param length the length of the array in bytes + */ + public StringArray(TypeImpl t, CASImpl c, int length) { + super(t, c); + theArray = new String[length]; } /** * @see org.apache.uima.cas.StringArrayFS#get(int) */ public String get(int i) { - jcasType.casImpl.checkArrayBounds(addr, i); - return jcasType.ll_cas.ll_getStringArrayValue(addr, i); + return theArray[i]; } /** * @see org.apache.uima.cas.StringArrayFS#set(int, String) */ public void set(int i, String v) { - jcasType.casImpl.checkArrayBounds(addr, i); - jcasType.ll_cas.ll_setStringArrayValue(addr, i, v); + theArray[i] = v; } /** * @see org.apache.uima.cas.StringArrayFS#copyFromArray(String[], int, int, int) */ - public void copyFromArray(String[] src, int srcOffset, int destOffset, int length) { - jcasType.casImpl.checkArrayBounds(addr, destOffset, length); - for (int i = 0; i < length; i++) { - jcasType.ll_cas.ll_setStringArrayValue(addr, i + destOffset, src[i + srcOffset]); - } + public void copyFromArray(String[] src, int srcPos, int destPos, int length) { + System.arraycopy(src, srcPos, theArray, destPos, length); } /** * @see org.apache.uima.cas.StringArrayFS#copyToArray(int, String[], int, int) */ - public void copyToArray(int srcOffset, String[] dest, int destOffset, int length) { - jcasType.casImpl.checkArrayBounds(addr, srcOffset, length); - for (int i = 0; i < length; i++) { - dest[i + destOffset] = jcasType.ll_cas.ll_getStringArrayValue(addr, i + srcOffset); - } + public void copyToArray(int srcPos, String[] dest, int destPos, int length) { + System.arraycopy(theArray, srcPos, dest, destPos, length); } /** * @see org.apache.uima.cas.StringArrayFS#toArray() */ public String[] toArray() { - final int size = size(); - String[] outArray = new String[size]; - copyToArray(0, outArray, 0, size); - return outArray; + return theArray.clone(); } /** return the size of the array */ public int size() { - return jcasType.casImpl.ll_getArraySize(addr); + return theArray.length; } public String[] toStringArray() { @@ -121,4 +120,19 @@ public final class StringArray extends T copyToArray(0, strArray, 0, size); return strArray; } + + // internal use + public String[] _getTheArray() { + return theArray; + } + + /* (non-Javadoc) + * @see org.apache.uima.jcas.cas.CommonArray#copyValuesFrom(org.apache.uima.jcas.cas.CommonArray) + */ + @Override + public void copyValuesFrom(CommonArray v) { + StringArray bv = (StringArray) v; + System.arraycopy(bv.theArray, 0, theArray, 0, theArray.length); + } + } Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java?rev=1711942&r1=1711941&r2=1711942&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/StringList.java Mon Nov 2 12:19:46 2015 @@ -19,58 +19,75 @@ package org.apache.uima.jcas.cas; -import org.apache.uima.cas.CASRuntimeException; +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; -public class StringList extends org.apache.uima.jcas.cas.TOP { - - public final static int typeIndexID = JCasRegistry.register(StringList.class); - - public final static int type = typeIndexID; - - public int getTypeIndexID() { - return typeIndexID; - } +public abstract class StringList extends CommonList { // Never called. protected StringList() { // Disable default constructor } - /* Internal - Constructor used by generator */ - public StringList(int addr, TOP_Type type) { - super(addr, type); - } - public StringList(JCas jcas) { super(jcas); } - public String getNthElement(int i) { - if (this instanceof EmptyStringList) { - CASRuntimeException casEx = new CASRuntimeException( - CASRuntimeException.JCAS_GET_NTH_ON_EMPTY_LIST, new String[] { "EmptyStringList" }); - throw casEx; - } - - if (i < 0) { - CASRuntimeException casEx = new CASRuntimeException( - CASRuntimeException.JCAS_GET_NTH_NEGATIVE_INDEX, new String[] { Integer.toString(i) }); - throw casEx; - } - - int originali = i; - StringList cg = this; - for (;; i--) { - if (cg instanceof EmptyStringList) { - CASRuntimeException casEx = new CASRuntimeException( - CASRuntimeException.JCAS_GET_NTH_PAST_END, new String[] { Integer.toString(originali) }); - throw casEx; - } - NonEmptyStringList c = (NonEmptyStringList) cg; - if (i == 0) - return c.getHead(); - cg = c.getTail(); - } - } + /** + * used by generator + * Make a new AnnotationBase + * @param c - + * @param t - + */ + + public StringList(TypeImpl t, CASImpl c) { + super(t, c); + } + + public String getNthElement(int i) { + return ((NonEmptyStringList) getNonEmptyNthNode(i)).getHead(); + } + + public NonEmptyStringList createNonEmptyNode(CommonList tail) { + NonEmptyStringList node = new NonEmptyStringList(this._typeImpl, this._casView); + node.setTail((StringList) tail); + return node; + } + + public NonEmptyStringList createNonEmptyNode() { return createNonEmptyNode(null); } + + /* (non-Javadoc) + * @see org.apache.uima.jcas.cas.CommonList#getEmptyNode() + */ + @Override + public EmptyStringList getEmptyNode() { + return EmptyStringList.singleton; + } + + + /* (non-Javadoc) + * @see org.apache.uima.jcas.cas.CommonList#get_headAsString() + */ + @Override + public String get_headAsString() { + return ((NonEmptyStringList)this).getHead(); + } + + /* (non-Javadoc) + * @see org.apache.uima.jcas.cas.CommonList#getTail() + */ + @Override + public CommonList getTail() { + return ((NonEmptyStringList)this).getTail(); + } + + /* (non-Javadoc) + * @see org.apache.uima.jcas.cas.CommonList#setTail(org.apache.uima.jcas.cas.CommonList) + */ + @Override + public void setTail(CommonList v) { + ((NonEmptyStringList)this).setTail(v); + } + + } Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/TOP.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/TOP.java?rev=1711942&r1=1711941&r2=1711942&view=diff ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/TOP.java (original) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/TOP.java Mon Nov 2 12:19:46 2015 @@ -19,166 +19,62 @@ package org.apache.uima.jcas.cas; -import org.apache.uima.cas.CAS; -import org.apache.uima.cas.CASRuntimeException; import org.apache.uima.cas.impl.CASImpl; -import org.apache.uima.cas.impl.FeatureStructureImpl; -import org.apache.uima.cas.impl.LowLevelCAS; +import org.apache.uima.cas.impl.FeatureStructureImplC; +import org.apache.uima.cas.impl.TypeImpl; import org.apache.uima.jcas.JCas; import org.apache.uima.jcas.JCasRegistry; +import org.apache.uima.jcas.impl.JCasImpl; // ********************************* // * Implementation of TOP * // ********************************* /** - * The Java Class model corresponding to the Cas TOP type. This type is the super type of all - * feature structures. This type implements FeatureStructure since subclasses of it are the FSs - * generated by this system. + * The JCas Class model corresponding to the Cas TOP type. This type is the super type of all + * JCas feature structures. */ -public class TOP extends FeatureStructureImpl { +public class TOP extends FeatureStructureImplC { /** * Each cover class when loaded sets an index. Used in the JCas typeArray to go from the cover * class or class instance to the corresponding instance of the _Type class */ - public final static int typeIndexID = JCasRegistry.register(TOP.class); + public final static int typeIndexID = JCasRegistry.register(AnnotationBase.class); public final static int type = typeIndexID; /** - * used to obtain reference to the TOP_Type instance * * @return the type array index */ // can't be factored - refs locally defined field + @Override public int getTypeIndexID() { return typeIndexID; } - /* - * Note this class doesn't extend FeatureStructureImpl because that would add one more slot (the - * casImpl ref) to every instance. - * - * Note: the jcasType slot points to an instance of the _Type class; - * there's one per CAS (unique base cas) - * This slot is updated to reflect the current View, though, to make add to indexes more likely to be what's intended - */ - /** used to reference the corresponding TOP_Type instance */ - public TOP_Type jcasType; - - /** used to reference the corresponding Cas instance */ - protected final int addr; - - // This constructor is never called . - // Have to set "final" values to avoid compile errors - protected TOP() { - jcasType = null; - addr = 0; - throw new RuntimeException("Internal Error: TOP() constructor should never be called."); - } - - /* - * (Internal) make a new instance of TOP, linking it with a pre-existing Cas FeatureStructure - * object. Note: this function invoked via the generator in TOP_Type whenever the CAS needs to - * make a java instance - */ - public TOP(int addr, TOP_Type jcasType) { - this.addr = addr; - this.jcasType = jcasType; - } - - /* - * (Internal) create a new instance of TOP (or subclass of TOP) in Java and Cas, and make them - * correspond. - */ - public TOP(JCas jcas) { - CASImpl casImpl = (CASImpl)jcas.getCas(); - this.jcasType = jcas.getType(getTypeIndexID()); - if (null == jcasType) { - CASRuntimeException e = new CASRuntimeException(CASRuntimeException.JCAS_TYPE_NOT_IN_CAS, - new String[] { this.getClass().getName() }); - throw e; - } - boolean isSubtypeOfAnnotationBase = casImpl.isSubtypeOfAnnotationBaseType(jcasType.casTypeCode); - if (isSubtypeOfAnnotationBase && - (casImpl.getBaseCAS() == casImpl)) { - throw new CASRuntimeException(CASRuntimeException.DISALLOW_CREATE_ANNOTATION_IN_BASE_CAS, - new String[] { this.getClass().getName() }); - } - this.addr = jcasType.ll_cas.ll_createFS(jcasType.casTypeCode); - jcas.putJfsFromCaddr(addr, this); - - if (casImpl.isSubtypeOfAnnotationBaseType(jcasType.casTypeCode)) { - casImpl.setSofaFeat(addr, casImpl.getSofaRef()); - } - } - - /** add the corresponding FeatureStructure to all Cas indexes in the view where this FS was created*/ - public void addToIndexes() { - addToIndexes(jcasType.jcas); - } - - /** - * add this FS to indexes in a specific view, perhaps different from the creation view - * @param jcas the JCas - */ - public void addToIndexes(JCas jcas) { - jcas.getCas().addFsToIndexes(this); - } - - /** remove the corresponding FeatureStructure from all Cas indexes in the view where this FS was created */ - public void removeFromIndexes() { - removeFromIndexes(jcasType.jcas); - } - - /** - * remove this FS from indexes in a specific view, perhaps different from the view where this was created. - * @param jcas the JCas - */ - public void removeFromIndexes(JCas jcas) { - jcas.getLowLevelIndexRepository().ll_removeFS(this.addr); - } - - /* - * functions needed to to implement the FeatureStructure interface - * Note we don't simply implement this class as a subclass of FeatureStructureImpl - * because that would add one more slot to every instance + // never called. Here to disable default constructor + protected TOP() { + } + + /** + * used by generator + * Make a new TOP + * @param c - + * @param t - */ - public int getAddress() { - return this.addr; - } - - public CASImpl getCASImpl() { - return jcasType.casImpl; + public TOP(TypeImpl t, CASImpl c) { + super(t, c); } /** - * @return the CAS view where this FS was created + * This version is used by user code new XXX(jcas) + * @param jcas */ - public CAS getCAS() { - return jcasType.casImpl; - } - - public LowLevelCAS getLowLevelCas() { - return jcasType.casImpl; - } - - public boolean equals(Object o) { - if (o == null) { - return false; - } - if (!(o instanceof TOP)) - return false; - TOP fs = (TOP) o; - if ((this.addr == fs.addr) && (this.jcasType.casImpl.getBaseCAS() == fs.jcasType.casImpl.getBaseCAS())) { - return true; - } - return false; + public TOP(JCas jcas) { + super((JCasImpl) jcas); } - public int hashCode() { - return this.addr; - } }