Author: schor Date: Mon Nov 2 12:39:21 2015 New Revision: 1711946 URL: http://svn.apache.org/viewvc?rev=1711946&view=rev Log: [UIMA-4663] add interfaces representing common operations among groups of JCas classes.
Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonArray.java uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyList.java Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonArray.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonArray.java?rev=1711946&view=auto ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonArray.java (added) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonArray.java Mon Nov 2 12:39:21 2015 @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.uima.jcas.cas; + +import org.apache.uima.cas.impl.CASImpl; +import org.apache.uima.cas.impl.TypeImpl; +import org.apache.uima.jcas.JCas; + +/** + * This class is the super class of arrays of Feature Structures + */ +public interface CommonArray { + + int size(); + + void copyValuesFrom(CommonArray v); +} Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java?rev=1711946&view=auto ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java (added) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonList.java Mon Nov 2 12:39:21 2015 @@ -0,0 +1,137 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.uima.jcas.cas; + +import java.util.IdentityHashMap; +import java.util.Set; + +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; + +/** + * This class is the super class of list nodes (both empty and non empty) + */ +public abstract class CommonList extends TOP { + + // Never called. + protected CommonList() { // Disable default constructor + } + + public CommonList(JCas jcas) { + super(jcas); + } + + /** + * used by generator + * Make a new AnnotationBase + * @param c - + * @param t - + */ + + public CommonList(TypeImpl t, CASImpl c) { + super(t, c); + } + + /** + * Get the nth node. + * @param i - + * @return the nth node, which may be an "empty" node + */ + public CommonList getNthNode(int i) { + if (this instanceof EmptyList) { + throw new CASRuntimeException(CASRuntimeException.JCAS_GET_NTH_ON_EMPTY_LIST, "EmptyList"); + } + if (i < 0) { + throw new CASRuntimeException(CASRuntimeException.JCAS_GET_NTH_NEGATIVE_INDEX, i); + } + int originali = i; + CommonList node = this; + + for (;; i--) { + if (i == 0) { + return node; + } + node = node.getTail(); + if (node instanceof EmptyList) { + throw new CASRuntimeException(CASRuntimeException.JCAS_GET_NTH_PAST_END, originali); + } + } + } + + public CommonList getNonEmptyNthNode(int i) { + CommonList node = getNthNode(i); + if (node instanceof EmptyList) { + throw new CASRuntimeException(CASRuntimeException.JCAS_GET_NTH_PAST_END, i); + } + return node; + } + + public abstract CommonList getTail(); // tail offset changes + + public abstract void setTail(CommonList v); // tail offset changes + + /** + * length of a list, handling list loops. + * returns the number of unique nodes in the list + * @param fs - a list element + * @return the number of items in the list + */ + public int getLength() { + // detect loops + final Set<CommonList> visited = new IdentityHashMap<CommonList, Boolean>().keySet(); + + int length = 0; + CommonList node = this; + while (node instanceof NonEmptyList) { + length ++; + visited.add(node); + node = node.getTail(); + if (visited.contains(node)) { + break; + } + } + return length; + } + + public static void setNewValueInExistingNode(CommonList node, String v) { +// node.setHead(null); + throw new CASRuntimeException(); // not yet impl + } + + public abstract CommonList createNonEmptyNode(); + public abstract CommonList createNonEmptyNode(CommonList tail); + public abstract CommonList getEmptyNode(); // returns a shared constant empty node + public abstract String get_headAsString(); + /** + * insert a new nonempty node following this node + * @return the new node + */ + public CommonList insertNode() { + assert(this instanceof NonEmptyList); + CommonList newNode = createNonEmptyNode(); + CommonList tail = getTail(); + setTail(newNode); + newNode.setTail(tail); + return newNode; + } + +} Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java?rev=1711946&view=auto ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java (added) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/CommonPrimitiveArray.java Mon Nov 2 12:39:21 2015 @@ -0,0 +1,31 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.uima.jcas.cas; + +import org.apache.uima.cas.impl.CASImpl; +import org.apache.uima.cas.impl.TypeImpl; +import org.apache.uima.jcas.JCas; + +/** + * This interface is implemented by arrays of non-FeatureStructure components + * boolean, byte, short, int, long, float, double, String, JavaObject + */ +public interface CommonPrimitiveArray extends CommonArray { +} Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyList.java URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyList.java?rev=1711946&view=auto ============================================================================== --- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyList.java (added) +++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/EmptyList.java Mon Nov 2 12:39:21 2015 @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.uima.jcas.cas; + +/** + * a marker interface for empty lists + */ +public interface EmptyList { +}