You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by ea...@apache.org on 2013/07/24 21:44:57 UTC

svn commit: r1506677 - in /uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main: java/org/apache/uima/ducc/ java/org/apache/uima/ducc/common/uima/ resources/org/ resources/org/apache/ resources/org/apache/uima/ resources/org/apache/uima/ducc/ resourc...

Author: eae
Date: Wed Jul 24 19:44:57 2013
New Revision: 1506677

URL: http://svn.apache.org/r1506677
Log:
UIMA-3110

Added:
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem_Type.java
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobFlowControlTS.xml
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml
      - copied, changed from r1504164, uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml
Removed:
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml
Modified:
    uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.java

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem.java?rev=1506677&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem.java Wed Jul 24 19:44:57 2013
@@ -0,0 +1,180 @@
+
+
+/* First created by JCasGen Fri Jul 19 18:26:47 EDT 2013 */
+package org.apache.uima.ducc;
+
+import org.apache.uima.jcas.JCas; 
+import org.apache.uima.jcas.JCasRegistry;
+import org.apache.uima.jcas.cas.TOP_Type;
+
+import org.apache.uima.jcas.cas.TOP;
+
+
+/** 
+ * Updated by JCasGen Fri Jul 19 18:26:47 EDT 2013
+ * XML source: /users1/eae/workspace-ducc/uima-ducc/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobFlowControlTS.xml
+ * @generated */
+public class Workitem extends TOP {
+  /** @generated
+   * @ordered 
+   */
+  public final static int typeIndexID = JCasRegistry.register(Workitem.class);
+  /** @generated
+   * @ordered 
+   */
+  public final static int type = typeIndexID;
+  /** @generated  */
+  public              int getTypeIndexID() {return typeIndexID;}
+ 
+  /** Never called.  Disable default constructor
+   * @generated */
+  protected Workitem() {}
+    
+  /** Internal - constructor used by generator 
+   * @generated */
+  public Workitem(int addr, TOP_Type type) {
+    super(addr, type);
+    readObject();
+  }
+  
+  /** @generated */
+  public Workitem(JCas jcas) {
+    super(jcas);
+    readObject();   
+  } 
+
+  /** <!-- begin-user-doc -->
+    * Write your own initialization here
+    * <!-- end-user-doc -->
+  @generated modifiable */
+  private void readObject() {}
+     
+ 
+    
+  //*--------------*
+  //* Feature: inputfile
+
+  /** getter for inputfile - gets 
+   * @generated */
+  public String getInputfile() {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_inputfile == null)
+      jcasType.jcas.throwFeatMissing("inputfile", "org.apache.uima.ducc.Workitem");
+    return jcasType.ll_cas.ll_getStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_inputfile);}
+    
+  /** setter for inputfile - sets  
+   * @generated */
+  public void setInputfile(String v) {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_inputfile == null)
+      jcasType.jcas.throwFeatMissing("inputfile", "org.apache.uima.ducc.Workitem");
+    jcasType.ll_cas.ll_setStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_inputfile, v);}    
+   
+    
+  //*--------------*
+  //* Feature: outputfile
+
+  /** getter for outputfile - gets 
+   * @generated */
+  public String getOutputfile() {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_outputfile == null)
+      jcasType.jcas.throwFeatMissing("outputfile", "org.apache.uima.ducc.Workitem");
+    return jcasType.ll_cas.ll_getStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_outputfile);}
+    
+  /** setter for outputfile - sets  
+   * @generated */
+  public void setOutputfile(String v) {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_outputfile == null)
+      jcasType.jcas.throwFeatMissing("outputfile", "org.apache.uima.ducc.Workitem");
+    jcasType.ll_cas.ll_setStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_outputfile, v);}    
+   
+    
+  //*--------------*
+  //* Feature: encoding
+
+  /** getter for encoding - gets Optional parameter to use when converting input files into Java characters
+   * @generated */
+  public String getEncoding() {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_encoding == null)
+      jcasType.jcas.throwFeatMissing("encoding", "org.apache.uima.ducc.Workitem");
+    return jcasType.ll_cas.ll_getStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_encoding);}
+    
+  /** setter for encoding - sets Optional parameter to use when converting input files into Java characters 
+   * @generated */
+  public void setEncoding(String v) {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_encoding == null)
+      jcasType.jcas.throwFeatMissing("encoding", "org.apache.uima.ducc.Workitem");
+    jcasType.ll_cas.ll_setStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_encoding, v);}    
+   
+    
+  //*--------------*
+  //* Feature: language
+
+  /** getter for language - gets Optional parameter to specify the text language
+   * @generated */
+  public String getLanguage() {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_language == null)
+      jcasType.jcas.throwFeatMissing("language", "org.apache.uima.ducc.Workitem");
+    return jcasType.ll_cas.ll_getStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_language);}
+    
+  /** setter for language - sets Optional parameter to specify the text language 
+   * @generated */
+  public void setLanguage(String v) {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_language == null)
+      jcasType.jcas.throwFeatMissing("language", "org.apache.uima.ducc.Workitem");
+    jcasType.ll_cas.ll_setStringValue(addr, ((Workitem_Type)jcasType).casFeatCode_language, v);}    
+   
+    
+  //*--------------*
+  //* Feature: blocksize
+
+  /** getter for blocksize - gets Optional parameter to process input files in smaller chunks
+   * @generated */
+  public int getBlocksize() {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_blocksize == null)
+      jcasType.jcas.throwFeatMissing("blocksize", "org.apache.uima.ducc.Workitem");
+    return jcasType.ll_cas.ll_getIntValue(addr, ((Workitem_Type)jcasType).casFeatCode_blocksize);}
+    
+  /** setter for blocksize - sets Optional parameter to process input files in smaller chunks 
+   * @generated */
+  public void setBlocksize(int v) {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_blocksize == null)
+      jcasType.jcas.throwFeatMissing("blocksize", "org.apache.uima.ducc.Workitem");
+    jcasType.ll_cas.ll_setIntValue(addr, ((Workitem_Type)jcasType).casFeatCode_blocksize, v);}    
+   
+    
+  //*--------------*
+  //* Feature: blockindex
+
+  /** getter for blockindex - gets Optional parameter to specify block offset into input file to start processing
+   * @generated */
+  public int getBlockindex() {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_blockindex == null)
+      jcasType.jcas.throwFeatMissing("blockindex", "org.apache.uima.ducc.Workitem");
+    return jcasType.ll_cas.ll_getIntValue(addr, ((Workitem_Type)jcasType).casFeatCode_blockindex);}
+    
+  /** setter for blockindex - sets Optional parameter to specify block offset into input file to start processing 
+   * @generated */
+  public void setBlockindex(int v) {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_blockindex == null)
+      jcasType.jcas.throwFeatMissing("blockindex", "org.apache.uima.ducc.Workitem");
+    jcasType.ll_cas.ll_setIntValue(addr, ((Workitem_Type)jcasType).casFeatCode_blockindex, v);}    
+   
+    
+  //*--------------*
+  //* Feature: sendToCC
+
+  /** getter for sendToCC - gets 
+   * @generated */
+  public boolean getSendToCC() {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_sendToCC == null)
+      jcasType.jcas.throwFeatMissing("sendToCC", "org.apache.uima.ducc.Workitem");
+    return jcasType.ll_cas.ll_getBooleanValue(addr, ((Workitem_Type)jcasType).casFeatCode_sendToCC);}
+    
+  /** setter for sendToCC - sets  
+   * @generated */
+  public void setSendToCC(boolean v) {
+    if (Workitem_Type.featOkTst && ((Workitem_Type)jcasType).casFeat_sendToCC == null)
+      jcasType.jcas.throwFeatMissing("sendToCC", "org.apache.uima.ducc.Workitem");
+    jcasType.ll_cas.ll_setBooleanValue(addr, ((Workitem_Type)jcasType).casFeatCode_sendToCC, v);}    
+  }
+
+    
\ No newline at end of file

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem_Type.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem_Type.java?rev=1506677&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem_Type.java (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/Workitem_Type.java Wed Jul 24 19:44:57 2013
@@ -0,0 +1,211 @@
+
+/* First created by JCasGen Fri Jul 19 18:26:47 EDT 2013 */
+package org.apache.uima.ducc;
+
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.JCasRegistry;
+import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.FSGenerator;
+import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.cas.Type;
+import org.apache.uima.cas.impl.FeatureImpl;
+import org.apache.uima.cas.Feature;
+import org.apache.uima.jcas.cas.TOP_Type;
+
+/** 
+ * Updated by JCasGen Fri Jul 19 18:26:47 EDT 2013
+ * @generated */
+public class Workitem_Type extends TOP_Type {
+  /** @generated */
+  protected FSGenerator getFSGenerator() {return fsGenerator;}
+  /** @generated */
+  private final FSGenerator fsGenerator = 
+    new FSGenerator() {
+      public FeatureStructure createFS(int addr, CASImpl cas) {
+  			 if (Workitem_Type.this.useExistingInstance) {
+  			   // Return eq fs instance if already created
+  		     FeatureStructure fs = Workitem_Type.this.jcas.getJfsFromCaddr(addr);
+  		     if (null == fs) {
+  		       fs = new Workitem(addr, Workitem_Type.this);
+  			   Workitem_Type.this.jcas.putJfsFromCaddr(addr, fs);
+  			   return fs;
+  		     }
+  		     return fs;
+        } else return new Workitem(addr, Workitem_Type.this);
+  	  }
+    };
+  /** @generated */
+  public final static int typeIndexID = Workitem.typeIndexID;
+  /** @generated 
+     @modifiable */
+  public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.ducc.Workitem");
+ 
+  /** @generated */
+  final Feature casFeat_inputfile;
+  /** @generated */
+  final int     casFeatCode_inputfile;
+  /** @generated */ 
+  public String getInputfile(int addr) {
+        if (featOkTst && casFeat_inputfile == null)
+      jcas.throwFeatMissing("inputfile", "org.apache.uima.ducc.Workitem");
+    return ll_cas.ll_getStringValue(addr, casFeatCode_inputfile);
+  }
+  /** @generated */    
+  public void setInputfile(int addr, String v) {
+        if (featOkTst && casFeat_inputfile == null)
+      jcas.throwFeatMissing("inputfile", "org.apache.uima.ducc.Workitem");
+    ll_cas.ll_setStringValue(addr, casFeatCode_inputfile, v);}
+    
+  
+ 
+  /** @generated */
+  final Feature casFeat_outputfile;
+  /** @generated */
+  final int     casFeatCode_outputfile;
+  /** @generated */ 
+  public String getOutputfile(int addr) {
+        if (featOkTst && casFeat_outputfile == null)
+      jcas.throwFeatMissing("outputfile", "org.apache.uima.ducc.Workitem");
+    return ll_cas.ll_getStringValue(addr, casFeatCode_outputfile);
+  }
+  /** @generated */    
+  public void setOutputfile(int addr, String v) {
+        if (featOkTst && casFeat_outputfile == null)
+      jcas.throwFeatMissing("outputfile", "org.apache.uima.ducc.Workitem");
+    ll_cas.ll_setStringValue(addr, casFeatCode_outputfile, v);}
+    
+  
+ 
+  /** @generated */
+  final Feature casFeat_encoding;
+  /** @generated */
+  final int     casFeatCode_encoding;
+  /** @generated */ 
+  public String getEncoding(int addr) {
+        if (featOkTst && casFeat_encoding == null)
+      jcas.throwFeatMissing("encoding", "org.apache.uima.ducc.Workitem");
+    return ll_cas.ll_getStringValue(addr, casFeatCode_encoding);
+  }
+  /** @generated */    
+  public void setEncoding(int addr, String v) {
+        if (featOkTst && casFeat_encoding == null)
+      jcas.throwFeatMissing("encoding", "org.apache.uima.ducc.Workitem");
+    ll_cas.ll_setStringValue(addr, casFeatCode_encoding, v);}
+    
+  
+ 
+  /** @generated */
+  final Feature casFeat_language;
+  /** @generated */
+  final int     casFeatCode_language;
+  /** @generated */ 
+  public String getLanguage(int addr) {
+        if (featOkTst && casFeat_language == null)
+      jcas.throwFeatMissing("language", "org.apache.uima.ducc.Workitem");
+    return ll_cas.ll_getStringValue(addr, casFeatCode_language);
+  }
+  /** @generated */    
+  public void setLanguage(int addr, String v) {
+        if (featOkTst && casFeat_language == null)
+      jcas.throwFeatMissing("language", "org.apache.uima.ducc.Workitem");
+    ll_cas.ll_setStringValue(addr, casFeatCode_language, v);}
+    
+  
+ 
+  /** @generated */
+  final Feature casFeat_blocksize;
+  /** @generated */
+  final int     casFeatCode_blocksize;
+  /** @generated */ 
+  public int getBlocksize(int addr) {
+        if (featOkTst && casFeat_blocksize == null)
+      jcas.throwFeatMissing("blocksize", "org.apache.uima.ducc.Workitem");
+    return ll_cas.ll_getIntValue(addr, casFeatCode_blocksize);
+  }
+  /** @generated */    
+  public void setBlocksize(int addr, int v) {
+        if (featOkTst && casFeat_blocksize == null)
+      jcas.throwFeatMissing("blocksize", "org.apache.uima.ducc.Workitem");
+    ll_cas.ll_setIntValue(addr, casFeatCode_blocksize, v);}
+    
+  
+ 
+  /** @generated */
+  final Feature casFeat_blockindex;
+  /** @generated */
+  final int     casFeatCode_blockindex;
+  /** @generated */ 
+  public int getBlockindex(int addr) {
+        if (featOkTst && casFeat_blockindex == null)
+      jcas.throwFeatMissing("blockindex", "org.apache.uima.ducc.Workitem");
+    return ll_cas.ll_getIntValue(addr, casFeatCode_blockindex);
+  }
+  /** @generated */    
+  public void setBlockindex(int addr, int v) {
+        if (featOkTst && casFeat_blockindex == null)
+      jcas.throwFeatMissing("blockindex", "org.apache.uima.ducc.Workitem");
+    ll_cas.ll_setIntValue(addr, casFeatCode_blockindex, v);}
+    
+  
+ 
+  /** @generated */
+  final Feature casFeat_sendToCC;
+  /** @generated */
+  final int     casFeatCode_sendToCC;
+  /** @generated */ 
+  public boolean getSendToCC(int addr) {
+        if (featOkTst && casFeat_sendToCC == null)
+      jcas.throwFeatMissing("sendToCC", "org.apache.uima.ducc.Workitem");
+    return ll_cas.ll_getBooleanValue(addr, casFeatCode_sendToCC);
+  }
+  /** @generated */    
+  public void setSendToCC(int addr, boolean v) {
+        if (featOkTst && casFeat_sendToCC == null)
+      jcas.throwFeatMissing("sendToCC", "org.apache.uima.ducc.Workitem");
+    ll_cas.ll_setBooleanValue(addr, casFeatCode_sendToCC, v);}
+    
+  
+
+
+
+  /** initialize variables to correspond with Cas Type and Features
+	* @generated */
+  public Workitem_Type(JCas jcas, Type casType) {
+    super(jcas, casType);
+    casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator());
+
+ 
+    casFeat_inputfile = jcas.getRequiredFeatureDE(casType, "inputfile", "uima.cas.String", featOkTst);
+    casFeatCode_inputfile  = (null == casFeat_inputfile) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_inputfile).getCode();
+
+ 
+    casFeat_outputfile = jcas.getRequiredFeatureDE(casType, "outputfile", "uima.cas.String", featOkTst);
+    casFeatCode_outputfile  = (null == casFeat_outputfile) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_outputfile).getCode();
+
+ 
+    casFeat_encoding = jcas.getRequiredFeatureDE(casType, "encoding", "uima.cas.String", featOkTst);
+    casFeatCode_encoding  = (null == casFeat_encoding) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_encoding).getCode();
+
+ 
+    casFeat_language = jcas.getRequiredFeatureDE(casType, "language", "uima.cas.String", featOkTst);
+    casFeatCode_language  = (null == casFeat_language) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_language).getCode();
+
+ 
+    casFeat_blocksize = jcas.getRequiredFeatureDE(casType, "blocksize", "uima.cas.Integer", featOkTst);
+    casFeatCode_blocksize  = (null == casFeat_blocksize) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_blocksize).getCode();
+
+ 
+    casFeat_blockindex = jcas.getRequiredFeatureDE(casType, "blockindex", "uima.cas.Integer", featOkTst);
+    casFeatCode_blockindex  = (null == casFeat_blockindex) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_blockindex).getCode();
+
+ 
+    casFeat_sendToCC = jcas.getRequiredFeatureDE(casType, "sendToCC", "uima.cas.Boolean", featOkTst);
+    casFeatCode_sendToCC  = (null == casFeat_sendToCC) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_sendToCC).getCode();
+
+  }
+}
+
+
+
+    
\ No newline at end of file

Modified: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.java?rev=1506677&r1=1506676&r2=1506677&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.java (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.java Wed Jul 24 19:44:57 2013
@@ -20,32 +20,40 @@ package org.apache.uima.ducc.common.uima
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
+import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
 import org.apache.uima.analysis_engine.metadata.FixedFlow;
 import org.apache.uima.analysis_engine.metadata.FlowConstraints;
 import org.apache.uima.cas.CAS;
-import org.apache.uima.flow.CasFlowController_ImplBase;
-import org.apache.uima.flow.CasFlow_ImplBase;
+import org.apache.uima.ducc.Workitem;
 import org.apache.uima.flow.FinalStep;
 import org.apache.uima.flow.Flow;
 import org.apache.uima.flow.FlowControllerContext;
+import org.apache.uima.flow.JCasFlowController_ImplBase;
+import org.apache.uima.flow.JCasFlow_ImplBase;
 import org.apache.uima.flow.SimpleStep;
 import org.apache.uima.flow.Step;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.cas.TOP;
 import org.apache.uima.resource.ResourceInitializationException;
+import org.apache.uima.resource.metadata.OperationalProperties;
 
 /**
  * Ducc FlowController for Job Processes assembled from user components
- * If WI-Cas is sent to initial CM, it is then dropped
- * All other parent CASes continue thru the flow
+ * If CM delegate exists then WI-Cas is first sent there
+ *    and then optionally to CC delegate if so specified by flag in WorkItem feature structure.
+ * If no CM delegate, then WI-Cas is sent to AE and CC if it exists.
  */
-public class DuccJobProcessFC extends CasFlowController_ImplBase {
+public class DuccJobProcessFC extends JCasFlowController_ImplBase {
 
-  /**
-   */
-  private String cmKey="DuccXmiZipReaderCM";
+  //private String cmKey="DuccXmiZipReaderCM";
+  
   private List<String> mSequence;
+  private Boolean mHasCasMultiplier=false;
 
   public void initialize(FlowControllerContext aContext) throws ResourceInitializationException {
     super.initialize(aContext);
@@ -59,6 +67,17 @@ public class DuccJobProcessFC extends Ca
       throw new ResourceInitializationException(ResourceInitializationException.FLOW_CONTROLLER_REQUIRES_FLOW_CONSTRAINTS,
               new Object[]{this.getClass().getName(), "fixedFlow", aContext.getAggregateMetadata().getSourceUrlString()});
     }
+
+    // check if first delegate is a CasMultiplier
+    Iterator aeIter = getContext().getAnalysisEngineMetaDataMap().entrySet().iterator();
+    while (aeIter.hasNext()) {
+      Map.Entry entry = (Map.Entry) aeIter.next();
+      AnalysisEngineMetaData md = (AnalysisEngineMetaData) entry.getValue();
+      OperationalProperties op = md.getOperationalProperties();
+      if (op.getOutputsNewCASes()) {
+    	mHasCasMultiplier = true;
+      }
+    }
   }
 
   /*
@@ -66,14 +85,15 @@ public class DuccJobProcessFC extends Ca
    * 
    * @see org.apache.uima.flow.CasFlowController_ImplBase#computeFlow(org.apache.uima.cas.CAS)
    */
-  public Flow computeFlow(CAS aCAS) throws AnalysisEngineProcessException {
+  public Flow computeFlow(JCas aCAS) throws AnalysisEngineProcessException {
     return new FixedFlowObject(0);
   }
 
-  class FixedFlowObject extends CasFlow_ImplBase {
+  class FixedFlowObject extends JCasFlow_ImplBase {
     private int currentStep;
-    private boolean hasBeenToDuccCM = false;
+    private boolean hasBeenToCM = false;
     private boolean internallyCreatedCas = false;
+    private boolean hasBeenToCC = false;
 
     /**
      * Create a new fixed flow starting at step <code>startStep</code> of the fixed sequence.
@@ -106,24 +126,40 @@ public class DuccJobProcessFC extends Ca
      * @see org.apache.uima.flow.Flow#next()
      */
     public Step next() throws AnalysisEngineProcessException {
-      // Drop the Work Item CAS after it has been to the Ducc CM
       if (!internallyCreatedCas) {
-        if (hasBeenToDuccCM) {
-          return new FinalStep();
+    	// this is a Work Item CAS
+        if (mHasCasMultiplier) {
+          if (!hasBeenToCM) {
+        	// will send it there this time thru
+        	hasBeenToCM = true;
+          }
+          else {
+        	// has been to CM, see if should go to CC
+        	if (!hasBeenToCC) {
+	          Iterator<TOP> fsIter = this.getJCas().getJFSIndexRepository().getAllIndexedFS(Workitem.type);
+	          if (fsIter.hasNext()) {
+	        	Workitem wi = (Workitem) fsIter.next();
+	        	if (fsIter.hasNext()) {
+	        	  throw new IllegalStateException("More than one instance of Workitem type");
+	        	}
+	        	if (wi.getSendToCC()) {
+	        	  hasBeenToCC = true;
+	        	  return new SimpleStep((String)mSequence.get(mSequence.size()-1));
+	        	}
+	        	else {
+	        	  return new FinalStep();
+	        	}
+	          }
+            }
+          }
         }
       }
 
-      if (currentStep >= mSequence.size()) {
-        return new FinalStep(); // this CAS has finished the sequence
-      }
-
-      // Check if WI CAS is going to Ducc CM
-      if (!internallyCreatedCas && cmKey.equals(mSequence.get(currentStep))) {
-        // set flag for next time thru
-        hasBeenToDuccCM = true;
+      if (hasBeenToCC || currentStep >= mSequence.size()) {
+        return new FinalStep(); // this CAS is cooked
       }
 
-      // now send the CAS to the next AE in sequence.
+      // send the CAS to the next AE in sequence.
       return new SimpleStep((String)mSequence.get(currentStep++));
     }
 
@@ -133,11 +169,8 @@ public class DuccJobProcessFC extends Ca
      * @see org.apache.uima.flow.CasFlow_ImplBase#newCasProduced(CAS, String)
      */
     public Flow newCasProduced(CAS newCas, String producedBy) throws AnalysisEngineProcessException {
-      // start the new output CAS from the next node after the CasMultiplier that produced it
-      int i = 0;
-      while (!mSequence.get(i).equals(producedBy))
-        i++;
-      return new FixedFlowObject(i + 1, true);
+      // since the CM will always be in position 0 ...
+      return new FixedFlowObject(1, true);
     }
   }
 }

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobFlowControlTS.xml
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobFlowControlTS.xml?rev=1506677&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobFlowControlTS.xml (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobFlowControlTS.xml Wed Jul 24 19:44:57 2013
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<typeSystemDescription xmlns="http://uima.apache.org/resourceSpecifier">
+  <name>Ducc Job Text Processing Control Types [String]</name>
+  <description>Type for communication between CR, CM, FC and CC</description>
+  <version>1.0</version>
+  <vendor>IBM</vendor>
+  <types>
+    <typeDescription>
+      <name>org.apache.uima.ducc.Workitem</name>
+      <description/>
+      <supertypeName>uima.cas.TOP</supertypeName>
+      <features>
+        <featureDescription>
+          <name>inputfile</name>
+          <description/>
+          <rangeTypeName>uima.cas.String</rangeTypeName>
+        </featureDescription>
+        <featureDescription>
+          <name>outputfile</name>
+          <description/>
+          <rangeTypeName>uima.cas.String</rangeTypeName>
+        </featureDescription>
+        <featureDescription>
+          <name>encoding</name>
+          <description>Optional parameter to use when converting input files into Java characters</description>
+          <rangeTypeName>uima.cas.String</rangeTypeName>
+        </featureDescription>
+        <featureDescription>
+          <name>language</name>
+          <description>Optional parameter to specify the text language</description>
+          <rangeTypeName>uima.cas.String</rangeTypeName>
+        </featureDescription>
+        <featureDescription>
+          <name>blocksize</name>
+          <description>Optional parameter to process input files in smaller chunks</description>
+          <rangeTypeName>uima.cas.Integer</rangeTypeName>
+        </featureDescription>
+        <featureDescription>
+          <name>blockindex</name>
+          <description>Optional parameter to specify block offset into input file to start processing</description>
+          <rangeTypeName>uima.cas.Integer</rangeTypeName>
+        </featureDescription>
+        <featureDescription>
+          <name>sendToCC</name>
+          <description/>
+          <rangeTypeName>uima.cas.Boolean</rangeTypeName>
+        </featureDescription>
+      </features>
+    </typeDescription>
+  </types>
+</typeSystemDescription>

Copied: uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml (from r1504164, uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml)
URL: http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml?p2=uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml&p1=uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml&r1=1504164&r2=1506677&rev=1506677&view=diff
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/java/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml (original)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-common/src/main/resources/org/apache/uima/ducc/common/uima/DuccJobProcessFC.xml Wed Jul 24 19:44:57 2013
@@ -21,12 +21,17 @@
   <frameworkImplementation>org.apache.uima.java</frameworkImplementation>
   <implementationName>org.apache.uima.ducc.common.uima.DuccJobProcessFC</implementationName>
   <processingResourceMetaData>
-    <name>Fixed Flow Controller</name>
+    <name>DUCC Job Flow Controller</name>
     <description>Ducc FlowController for Job Processes assembled from user components. If WI-Cas is sent to initial CM, it is then dropped. All other parent CASes continue thru the flow.</description>
     <version>1.0</version>
     <vendor>IBM</vendor>
     <configurationParameters/>
     <configurationParameterSettings/>
+    <typeSystemDescription>
+      <imports>
+        <import location="DuccJobFlowControlTS.xml"/>
+      </imports>
+    </typeSystemDescription>
     <capabilities>
       <capability>
         <inputs/>