Author: degenaro
Date: Tue Oct 28 22:00:48 2014
New Revision: 1634998

URL: http://svn.apache.org/r1634998
Log:
UIMA-4069 Redesign of JD toward the main goal of classpath separation for 
container (system) code.

Initial code drop.

Added:
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/mkresources.xml   (with 
props)
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/memo
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/DuccLogger.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccId.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccLogger.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/MessageBuffer.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/IOHelper.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/IJsonWorkItemState.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonConverter.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemState.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemStateFile.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Action.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Event.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Fsm.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/FsmException.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/State.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventKey.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventValue.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IAction.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IEvent.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsm.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsmBuilder.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IState.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventKey.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventValue.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCasManager.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCommon.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverException.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/JobDriverCollectionReader.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/Dispatcher.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IRemoteWorkerIdentity.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IWorkItem.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/NodeInfo.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/ProcessInfo.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/RemoteWorkerIdentity.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/Tod.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/WorkItem.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionAckCAS.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionData.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionEndCAS.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionGetCAS.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionIgnore.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/ActionSendCAS.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/IActionData.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/fsm/wi/WiFsm.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/IMetaCas.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/IMetaCasKeys.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/IMetaCasProvider.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/IMetaCasRequester.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/IMetaCasTransaction.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/IPerformanceMetrics.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/ITransport.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/iface/TimeoutException.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/impl/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/impl/MetaCas.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/impl/MetaCasTransaction.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/net/impl/TransactionId.java
   (with props)
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/
    uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/test/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/test/TestDispatcher.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/test/TestJson.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/test/TestSuite.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/test/TestWiFsm.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/user/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/user/jd/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/user/jd/test/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/user/jd/test/helper/
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/user/jd/test/helper/CR100.java
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/resources/CR100.xml   
(with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/resources/ducc-user.jar
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/resources/uimaj-as-core-2.4.2.jar
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/resources/uimaj-as-core-2.6.0.jar
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/resources/uimaj-core-2.4.2.jar
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/resources/uimaj-core-2.6.0.jar
   (with props)
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/resources/xstream-1.3.1.jar
   (with props)

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-container/mkresources.xml
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/mkresources.xml?rev=1634998&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/mkresources.xml (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/mkresources.xml Tue Oct 28 
22:00:48 2014
@@ -0,0 +1,32 @@
+<project name="uima-ducc-continer" default="all" basedir=".">
+    
+       <property name="resources.dir"         
value="${basedir}/src/test/resources" />
+       
+       <property name="jar.dir"               
value="${basedir}/../uima-ducc-user/target/classes" />
+       <property name="jar.file"                      value="ducc-user.jar" />
+       
+       <property name="xml.dir"               
value="${basedir}/../uima-ducc-user/src/test/resources" />
+       <property name="xml.file"              value="CR100.xml" />
+           
+       <target name="all" depends="jar, xml" />
+       
+       <target name="jar" depends="rm.jar, mk.jar" />
+       <target name="xml" depends="rm.xml, mk.xml" />
+       
+    <target name="mk.jar">
+       <jar file="${resources.dir}/${jar.file}" basedir="${jar.dir}"/>
+    </target>
+       
+    <target name="rm.jar">
+        <delete file="${resources.dir}/${jar.file}"/>
+    </target>
+    
+    <target name="mk.xml">
+        <copy file="${xml.dir}/${xml.file}" todir="${resources.dir}"/>
+    </target>
+    
+    <target name="rm.xml">
+        <delete file="${resources.dir}/${xml.file}"/>
+    </target>
+       
+</project>
\ No newline at end of file

Propchange: uima/sandbox/uima-ducc/trunk/uima-ducc-container/mkresources.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Added: uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/memo
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/memo?rev=1634998&view=auto
==============================================================================
--- uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/memo (added)
+++ uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/memo Tue Oct 
28 22:00:48 2014
@@ -0,0 +1 @@
+URLClassLoader jedClassloader = new URLClassLoader(cp_urls, 
ClassLoader.getSystemClassLoader().getParent());
\ No newline at end of file

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/DuccLogger.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/DuccLogger.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/DuccLogger.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/DuccLogger.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,101 @@
+package org.apache.uima.ducc.container.common;
+
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+
+public class DuccLogger implements IDuccLogger {
+
+       static public DuccLogger getLogger(@SuppressWarnings("rawtypes") Class 
clazz, String component) {
+               return new DuccLogger(clazz, component);
+       }
+       
+       private static enum Type { 
+               DEBUG(true), INFO(true), WARN(true), ERROR(true);
+               private boolean active = true;
+               private Type(boolean value) {
+                       active = value;
+               }
+               public boolean isActive() {
+                       return(active);
+               }
+       };
+       
+       private static SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd 
HH:mm:ss zzz yyyy");
+       
+       public DuccLogger(@SuppressWarnings("rawtypes") Class clazz, String 
component) {
+               setClazz(clazz);
+               setComponent(component);
+       }
+       
+       private String clazz = null;
+       private String component = null;
+       
+       private boolean displayComponent = false;
+       
+       private void setClazz(Class<?> value) {
+               clazz = value.getSimpleName();
+       }
+
+       private void setComponent(String value) {
+               component = value;
+       }
+       
+       private String format(Object...args) {
+               StringBuffer text = new StringBuffer();
+               if(args != null) {
+                       for(Object arg : args) {
+                               if(arg != null) {
+                                       if(arg instanceof String) {
+                                               text.append(arg);
+                                       }
+                                       else {
+                                               text.append(arg.toString());
+                                       }
+                                       text.append(" ");       
+                               }
+                       }
+               }
+               return text.toString().trim();
+       }
+       
+       private void log(Type type, String location, IDuccId jobid, Object... 
args) {
+               StringBuffer text = new StringBuffer();
+               Date date = Calendar.getInstance().getTime();
+               text.append(sdf.format(date));
+               text.append(" ");
+               text.append(type.name());
+               text.append(" ");
+               if(displayComponent) {
+                       text.append(component);
+                       text.append(":");
+               }
+               text.append(clazz);
+               text.append(".");
+               text.append(location);
+               text.append(" ");       
+               text.append(format(args));
+               System.out.println(text);
+       }
+       
+       @Override
+       public void debug(String location, IDuccId jobid, Object... args) {
+               if(Type.DEBUG.isActive()) {
+                       log(Type.DEBUG, location, jobid, args);
+               }
+       }
+       
+       @Override
+       public void error(String location, IDuccId jobid, Object... args) {
+               if(Type.ERROR.isActive()) {
+                       log(Type.ERROR, location, jobid, args);
+               }
+       }
+       
+       @Override
+       public void info(String location, IDuccId jobid, Object... args) {
+               if(Type.INFO.isActive()) {
+                       log(Type.INFO, location, jobid, args);
+               }
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/DuccLogger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccId.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccId.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccId.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccId.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,6 @@
+package org.apache.uima.ducc.container.common;
+
+public interface IDuccId {
+
+       public static IDuccId null_id = null;
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccId.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccLogger.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccLogger.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccLogger.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccLogger.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,11 @@
+package org.apache.uima.ducc.container.common;
+
+
+public interface IDuccLogger {
+
+       public enum Component { JD, OR, WS };
+
+       public void debug(String location, IDuccId jobid, Object ... args);
+       public void error(String location, IDuccId jobid, Object ... args);
+       public void info(String location, IDuccId jobid, Object ... args);
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/IDuccLogger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/MessageBuffer.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/MessageBuffer.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/MessageBuffer.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/MessageBuffer.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,18 @@
+package org.apache.uima.ducc.container.common;
+
+public class MessageBuffer {
+
+       private StringBuffer sb = new StringBuffer();
+       
+       public void append(String text) {
+               if(sb.length() > 0) {
+                       sb.append(" ");
+               }
+               sb.append(text);
+       }
+       
+       @Override
+       public String toString() {
+               return sb.toString();
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/MessageBuffer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,28 @@
+package org.apache.uima.ducc.container.common;
+
+public class Standardize {
+
+       public enum Label {
+               state,
+               event,
+               curr,
+               prev,
+               hash,
+               loaded,
+               seqNo,
+               transNo,
+               remote,
+               action,
+               type,
+               AckMsecs,
+               EndMsecs,
+               ;
+               
+               Label() {
+               }
+               
+               public String get() {
+                       return this+"=";
+               }
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/Standardize.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/IOHelper.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/IOHelper.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/IOHelper.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/IOHelper.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,60 @@
+/*
+ * 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.ducc.container.common.files;
+
+import java.io.File;
+
+public class IOHelper {
+       
+       public static String marryDir2File(String dirname, String filename) {
+               StringBuffer sb = new StringBuffer();
+               String dname = "";
+               String fname = "";
+               if(dirname != null) {
+                       dname = dirname;
+               }
+               if(filename != null) {
+                       fname = filename;
+               }
+               if(dname.endsWith(File.separator)) {
+                       sb.append(dirname);
+               }
+               else {
+                       sb.append(dirname);
+                       sb.append(File.separator);
+               }
+               if(fname.startsWith(File.separator)) {
+                       sb.append(fname.substring(1));
+               }
+               else {
+                       sb.append(fname);
+               }
+               return sb.toString();   
+       }
+       
+       public static boolean mkdirs(String directory) {
+               boolean created = false;
+               File file = new File(directory);
+               if(!file.exists()) {
+                       file.mkdirs();
+                       created = true;
+               }
+               return created;
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/IOHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/IJsonWorkItemState.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/IJsonWorkItemState.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/IJsonWorkItemState.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/IJsonWorkItemState.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,16 @@
+package org.apache.uima.ducc.container.common.files.json;
+
+import org.apache.uima.ducc.container.jd.dispatch.IRemoteWorkerIdentity;
+import org.apache.uima.ducc.container.net.iface.IMetaCasKeys;
+
+public interface IJsonWorkItemState extends IMetaCasKeys, 
IRemoteWorkerIdentity {
+
+       public String getStatus();
+       public void setStatus(String value);
+       
+       public long getTransferTime();
+       public void setTransferTime(long value);
+       
+       public long getProcessingTime();
+       public void setProcessingTime(long value);
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/IJsonWorkItemState.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonConverter.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonConverter.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonConverter.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonConverter.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,36 @@
+package org.apache.uima.ducc.container.common.files.json;
+
+import java.lang.reflect.Type;
+import java.util.concurrent.ConcurrentHashMap;
+
+import com.google.gson.Gson;
+import com.google.gson.reflect.TypeToken;
+
+public class JsonConverter {
+
+       private static Gson gson = new Gson();
+       
+       private static String linend = "\n";
+       
+       public static String workItemStateToJson(IJsonWorkItemState jsonObject) 
{
+               String json = gson.toJson(jsonObject)+linend;
+               return json;
+       }
+       
+       public static IJsonWorkItemState workItemStateFromJson(String 
jsonString) {
+               Type typeOfMap = new TypeToken<JsonWorkItemState>() { 
}.getType();
+               IJsonWorkItemState retVal = gson.fromJson(jsonString, 
typeOfMap);
+               return retVal;
+       }
+       
+       public static String 
workItemStateMapToJson(ConcurrentHashMap<String,JsonWorkItemState> jsonObject) {
+               String json = gson.toJson(jsonObject);
+               return json;
+       }
+       
+       public static ConcurrentHashMap<String,JsonWorkItemState> 
workItemStateMapFromJson(String jsonString) {
+               Type typeOfMap = new 
TypeToken<ConcurrentHashMap<String,JsonWorkItemState>>() { }.getType();
+               ConcurrentHashMap<String,JsonWorkItemState> retVal = 
gson.fromJson(jsonString, typeOfMap);
+               return retVal;
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonConverter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemState.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemState.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemState.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemState.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,99 @@
+package org.apache.uima.ducc.container.common.files.json;
+
+public class JsonWorkItemState implements IJsonWorkItemState {
+
+       private static final long serialVersionUID = 1L;
+       
+       private String systemKey = null;
+       private String userKey = null;
+       
+       private String node = null;
+       private int pid = 0;
+       private int tid = 0;
+       
+       private String status = null;
+       
+       private long transferTime = 0;
+       private long processingTime = 0;
+       
+       @Override
+       public String getSystemKey() {
+               return systemKey;
+       }
+
+       @Override
+       public void setSystemKey(String value) {
+               systemKey = value;
+       }
+
+       @Override
+       public String getUserKey() {
+               return userKey;
+       }
+
+       @Override
+       public void setUserKey(String value) {
+               userKey = value;
+       }
+       
+       @Override
+       public String getNode() {
+               return node;
+       }
+
+       @Override
+       public void setNode(String value) {
+               node = value;
+       }
+
+       @Override
+       public int getPid() {
+               return pid;
+       }
+
+       @Override
+       public void setPid(int value) {
+               pid = value;
+       }
+
+       @Override
+       public int getTid() {
+               return tid;
+       }
+
+       @Override
+       public void setTid(int value) {
+               tid = value;
+       }
+
+       @Override
+       public String getStatus() {
+               return status;
+       }
+
+       @Override
+       public void setStatus(String value) {
+               status = value;
+       }
+
+       @Override
+       public long getTransferTime() {
+               return transferTime;
+       }
+
+       @Override
+       public void setTransferTime(long value) {
+               transferTime = value;
+       }
+
+       @Override
+       public long getProcessingTime() {
+               return processingTime;
+       }
+
+       @Override
+       public void setProcessingTime(long value) {
+               processingTime = value;
+       }
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemState.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemStateFile.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemStateFile.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemStateFile.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemStateFile.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,5 @@
+package org.apache.uima.ducc.container.common.files.json;
+
+public class JsonWorkItemStateFile {
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/files/json/JsonWorkItemStateFile.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Action.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Action.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Action.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Action.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,27 @@
+package org.apache.uima.ducc.container.common.fsm;
+
+import org.apache.uima.ducc.container.common.DuccLogger;
+import org.apache.uima.ducc.container.common.IDuccId;
+import org.apache.uima.ducc.container.common.IDuccLogger;
+import org.apache.uima.ducc.container.common.MessageBuffer;
+import org.apache.uima.ducc.container.common.Standardize;
+import org.apache.uima.ducc.container.common.fsm.iface.IAction;
+
+public class Action implements IAction {
+
+       private IDuccLogger logger = DuccLogger.getLogger(Action.class, 
IDuccLogger.Component.JD.name());
+       
+       @Override
+       public String getName() {
+               return "default";
+       }
+
+       @Override
+       public void engage(Object actionData) {
+               String location = "engage";
+               MessageBuffer mb = new MessageBuffer();
+               mb.append(Standardize.Label.action.get()+getName());
+               logger.debug(location, IDuccId.null_id, mb.toString());
+       }
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Action.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Event.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Event.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Event.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Event.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,62 @@
+package org.apache.uima.ducc.container.common.fsm;
+
+import org.apache.uima.ducc.container.common.fsm.iface.IEvent;
+
+public class Event implements IEvent {
+
+       private String name = null;
+       
+       public Event(String name) throws FsmException {
+               if(name == null) {
+                       throw new FsmException("event name is null");
+               }
+               setName(name);
+       }
+       
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result + ((name == null) ? 0 : 
name.hashCode());
+               return result;
+       }
+       
+       @Override 
+       public boolean equals(Object o) {
+               boolean retVal = false;
+               if(o != null) {
+                       if(o instanceof IEvent) {
+                               IEvent that = (IEvent)o;
+                               String thisName = this.getName();
+                               String thatName = that.getName();
+                               retVal = thisName.compareTo(thatName) == 0;
+                       }
+               }
+               return retVal;
+       }
+       
+       @Override
+       public int compareTo(Object o) {
+               int retVal = 0;
+               if(name != null) {
+                       if(o != null) {
+                               if(o instanceof IEvent) {
+                                       IEvent that = (IEvent)o;
+                                       String thisName = this.getName();
+                                       String thatName = that.getName();
+                                       retVal = thisName.compareTo(thatName);
+                               }
+                       }
+               }
+               return retVal;
+       }
+
+       @Override
+       public String getName() {
+               return name;
+       }
+       
+       private void setName(String value) {
+               name = value;
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Event.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Fsm.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Fsm.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Fsm.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Fsm.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,122 @@
+package org.apache.uima.ducc.container.common.fsm;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.uima.ducc.container.common.DuccLogger;
+import org.apache.uima.ducc.container.common.IDuccId;
+import org.apache.uima.ducc.container.common.IDuccLogger;
+import org.apache.uima.ducc.container.common.MessageBuffer;
+import org.apache.uima.ducc.container.common.Standardize;
+import org.apache.uima.ducc.container.common.fsm.iface.IAction;
+import org.apache.uima.ducc.container.common.fsm.iface.IEvent;
+import org.apache.uima.ducc.container.common.fsm.iface.IFsmBuilder;
+import org.apache.uima.ducc.container.common.fsm.iface.IState;
+import org.apache.uima.ducc.container.common.fsm.iface.IStateEventKey;
+import org.apache.uima.ducc.container.common.fsm.iface.IStateEventValue;
+
+public class Fsm implements IFsmBuilder {
+       
+       private static IDuccLogger logger = DuccLogger.getLogger(Fsm.class, 
IDuccLogger.Component.JD.name());
+       
+       private ConcurrentHashMap<IStateEventKey, IStateEventValue> map = new 
ConcurrentHashMap<IStateEventKey, IStateEventValue>();
+       
+       private IState stateCurrent = null;
+       private IState statePrevious = null;
+       
+       @Override
+       public void add(IState current, IEvent event, IAction action, IState 
next) throws FsmException {
+               String location = "add";
+               IStateEventKey key = new StateEventKey(current, event);
+               IStateEventValue value = new StateEventValue(action, next);
+               IStateEventValue result = putIfAbsent(key, value);
+               if(result != null) {
+                       MessageBuffer mb = new MessageBuffer();
+                       mb.append("duplicate");
+                       
mb.append(Standardize.Label.state.get()+current.getName());
+                       
mb.append(Standardize.Label.event.get()+event.getName());
+                       throw new FsmException(mb.toString());
+               }
+               MessageBuffer mb = new MessageBuffer();
+               mb.append(Standardize.Label.state.get()+current.getName());
+               mb.append(Standardize.Label.event.get()+event.getName());
+               logger.debug(location, IDuccId.null_id, mb.toString());
+       }
+
+       @Override
+       public void addInitial(IState current, IEvent event, IAction action, 
IState next) throws FsmException {
+               add(current, event, action, next);
+               setStateCurrent(current);
+       }
+       
+       private void setStateCurrent(IState value) {
+               stateCurrent = value;
+       }
+
+       @Override
+       public IState getStateCurrent() {
+               return stateCurrent;
+       }
+       
+       private void setStatePrevious(IState value) {
+               statePrevious = value;
+       }
+       
+       @Override
+       public IState getStatePrevious() {
+               return statePrevious;
+       }
+       
+       private IStateEventValue putIfAbsent(IStateEventKey key, 
IStateEventValue value) {
+               String location = "putIfAbsent";
+               MessageBuffer mb = new MessageBuffer();
+               
mb.append(Standardize.Label.state.get()+key.getState().getName());
+               
mb.append(Standardize.Label.event.get()+key.getEvent().getName());
+               mb.append(Standardize.Label.hash.get()+key.hashCode());
+               logger.debug(location, IDuccId.null_id, mb.toString());
+               return map.putIfAbsent(key, value);
+       }
+       
+       private IStateEventValue get(IStateEventKey key) {
+               String location = "get";
+               MessageBuffer mb = new MessageBuffer();
+               
mb.append(Standardize.Label.state.get()+key.getState().getName());
+               
mb.append(Standardize.Label.event.get()+key.getEvent().getName());
+               mb.append(Standardize.Label.hash.get()+key.hashCode());
+               logger.debug(location, IDuccId.null_id, mb.toString());
+               IStateEventValue value = map.get(key);
+               return value;
+       }
+       
+       @Override
+       public void transition(IEvent event, Object actionData) throws 
FsmException {
+               String location = "transition";
+               try {
+                       synchronized(map) {
+                               IState _stateCurrent = getStateCurrent();
+                               IStateEventKey key = new 
StateEventKey(_stateCurrent, event);
+                               IStateEventValue value = get(key);
+                               if(value == null) {
+                                       MessageBuffer mb = new MessageBuffer();
+                                       mb.append("undefined");
+                                       
mb.append(Standardize.Label.state.get()+_stateCurrent.getName());
+                                       
mb.append(Standardize.Label.event.get()+event.getName());
+                                       throw new FsmException(mb.toString());
+                               }
+                               IAction action = value.getAction();
+                               action.engage(actionData);
+                               IState _statePrevious = _stateCurrent;
+                               _stateCurrent = value.getState();
+                               setStateCurrent(_stateCurrent);
+                               setStatePrevious(_statePrevious);
+                               MessageBuffer mb = new MessageBuffer();
+                               
mb.append(Standardize.Label.curr.get()+_stateCurrent.getName());
+                               
mb.append(Standardize.Label.prev.get()+_statePrevious.getName());
+                               logger.info(location, IDuccId.null_id, 
mb.toString());
+                       }
+               }
+               catch(Exception e) {
+                       throw new FsmException(e);
+               }
+       }
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/Fsm.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/FsmException.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/FsmException.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/FsmException.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/FsmException.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,14 @@
+package org.apache.uima.ducc.container.common.fsm;
+
+public class FsmException extends RuntimeException {
+
+       private static final long serialVersionUID = 1L;
+
+       public FsmException(String text) {
+               super(text);
+       }
+       
+       public FsmException(Exception e) {
+               super(e);
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/FsmException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/State.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/State.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/State.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/State.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,62 @@
+package org.apache.uima.ducc.container.common.fsm;
+
+import org.apache.uima.ducc.container.common.fsm.iface.IState;
+
+public class State implements IState {
+
+       private String name = null;
+       
+       public State(String name) throws FsmException {
+               if(name == null) {
+                       throw new FsmException("state name is null");
+               }
+               setName(name);
+       }
+       
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result + ((name == null) ? 0 : 
name.hashCode());
+               return result;
+       }
+       
+       @Override 
+       public boolean equals(Object o) {
+               boolean retVal = false;
+               if(o != null) {
+                       if(o instanceof IState) {
+                               IState that = (IState)o;
+                               String thisName = this.getName();
+                               String thatName = that.getName();
+                               retVal = thisName.compareTo(thatName) == 0;
+                       }
+               }
+               return retVal;
+       }
+       
+       @Override
+       public int compareTo(Object o) {
+               int retVal = 0;
+               if(name != null) {
+                       if(o != null) {
+                               if(o instanceof IState) {
+                                       IState that = (IState)o;
+                                       String thisName = this.getName();
+                                       String thatName = that.getName();
+                                       retVal = thisName.compareTo(thatName);
+                               }
+                       }
+               }
+               return retVal;
+       }
+       
+       @Override
+       public String getName() {
+               return name;
+       }
+       
+       private void setName(String value) {
+               name = value;
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/State.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventKey.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventKey.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventKey.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventKey.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,89 @@
+package org.apache.uima.ducc.container.common.fsm;
+
+import org.apache.uima.ducc.container.common.fsm.iface.IEvent;
+import org.apache.uima.ducc.container.common.fsm.iface.IState;
+import org.apache.uima.ducc.container.common.fsm.iface.IStateEventKey;
+
+public class StateEventKey implements IStateEventKey {
+
+       private IState state = null;
+       private IEvent event = null;
+       
+       public StateEventKey(IState state, IEvent event) throws FsmException {
+               if(state == null) {
+                       throw new FsmException("state object is null");
+               }
+               if(event == null) {
+                       throw new FsmException("event object is null");
+               }
+               setState(state);
+               setEvent(event);
+       }
+       
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result + ((state == null) ? 0 : 
state.hashCode());
+               result = prime * result + ((event == null) ? 0 : 
event.hashCode());
+               return result;
+       }
+       
+       @Override 
+       public boolean equals(Object o) {
+               boolean retVal = false;
+               if(o != null) {
+                       if(o instanceof IStateEventKey) {
+                               IStateEventKey that = (IStateEventKey) o;
+                               IState thatState = that.getState();
+                               IEvent thatEvent = that.getEvent();
+                               if(thatState != null) {
+                                       if(thatEvent != null) {
+                                               if(thatState.equals(state)) {
+                                                       
if(thatEvent.equals(event)) {
+                                                               retVal = true;
+                                                       }
+                                               }
+                                       }
+                               }
+                       }
+               }
+               return retVal;
+       }
+       
+       @Override
+       public int compareTo(Object o) {
+               int retVal = 0;
+               if(state != null) {
+                       if(event != null) {
+                               if(o != null) {
+                                       StateEventKey that = (StateEventKey)o;
+                                       retVal = 
this.state.compareTo(that.state);
+                                       if(retVal == 0) {
+                                               retVal = 
this.event.compareTo(that.event);
+                                       }
+                               }
+                       }
+               }
+               return retVal;
+       }
+
+       private void setState(IState value) {
+               state = value;
+       }
+
+       @Override
+       public IState getState() {
+               return state;
+       }
+       
+       private void setEvent(IEvent value) {
+               event = value;
+       }
+
+       @Override
+       public IEvent getEvent() {
+               return event;
+       }
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventKey.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventValue.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventValue.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventValue.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventValue.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,41 @@
+package org.apache.uima.ducc.container.common.fsm;
+
+import org.apache.uima.ducc.container.common.fsm.iface.IAction;
+import org.apache.uima.ducc.container.common.fsm.iface.IState;
+import org.apache.uima.ducc.container.common.fsm.iface.IStateEventValue;
+
+public class StateEventValue implements IStateEventValue {
+
+       private IAction action = null;
+       private IState state = null;
+       
+       public StateEventValue(IAction action, IState state) throws 
FsmException {
+               if(action == null) {
+                       throw new FsmException("action object is null");
+               }
+               if(state == null) {
+                       throw new FsmException("state object is null");
+               }
+               setAction(action);
+               setState(state);
+       }
+
+       @Override
+       public IAction getAction() {
+               return action;
+       }
+       
+       private void setAction(IAction value) {
+               action = value;
+       }
+       
+       @Override
+       public IState getState() {
+               return state;
+       }
+       
+       private void setState(IState value) {
+               state = value;
+       }
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/StateEventValue.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IAction.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IAction.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IAction.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IAction.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,7 @@
+package org.apache.uima.ducc.container.common.fsm.iface;
+
+public interface IAction {
+       
+       public String getName();
+       public void engage(Object actionData);
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IAction.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IEvent.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IEvent.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IEvent.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IEvent.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,6 @@
+package org.apache.uima.ducc.container.common.fsm.iface;
+
+public interface IEvent extends Comparable<Object> {
+
+       public String getName();
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IEvent.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsm.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsm.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsm.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsm.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,10 @@
+package org.apache.uima.ducc.container.common.fsm.iface;
+
+import org.apache.uima.ducc.container.common.fsm.FsmException;
+
+public interface IFsm {
+       
+       public void transition(IEvent event, Object actionData) throws 
FsmException;
+       public IState getStateCurrent();
+       public IState getStatePrevious();
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsm.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsmBuilder.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsmBuilder.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsmBuilder.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsmBuilder.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,9 @@
+package org.apache.uima.ducc.container.common.fsm.iface;
+
+import org.apache.uima.ducc.container.common.fsm.FsmException;
+
+public interface IFsmBuilder extends IFsm {
+       
+       public void add(IState current, IEvent event, IAction action, IState 
next) throws FsmException;
+       public void addInitial(IState current, IEvent event, IAction action, 
IState next) throws FsmException;
+}
\ No newline at end of file

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IFsmBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IState.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IState.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IState.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IState.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,6 @@
+package org.apache.uima.ducc.container.common.fsm.iface;
+
+public interface IState extends Comparable<Object> {
+
+       public String getName();
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IState.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventKey.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventKey.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventKey.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventKey.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,7 @@
+package org.apache.uima.ducc.container.common.fsm.iface;
+
+public interface IStateEventKey extends Comparable<Object> {
+       
+       public IState getState();
+       public IEvent getEvent();
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventKey.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventValue.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventValue.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventValue.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventValue.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,7 @@
+package org.apache.uima.ducc.container.common.fsm.iface;
+
+public interface IStateEventValue {
+
+       public IAction getAction();
+       public IState getState();
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/common/fsm/iface/IStateEventValue.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCasManager.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCasManager.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCasManager.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCasManager.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,81 @@
+package org.apache.uima.ducc.container.jd;
+
+import java.net.URL;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.uima.ducc.container.common.DuccLogger;
+import org.apache.uima.ducc.container.common.IDuccId;
+import org.apache.uima.ducc.container.common.IDuccLogger;
+import org.apache.uima.ducc.container.jd.classload.JobDriverCollectionReader;
+import org.apache.uima.ducc.container.net.impl.MetaCas;
+
+public class JobDriverCasManager {
+
+       private IDuccLogger logger = 
DuccLogger.getLogger(JobDriverCasManager.class, 
IDuccLogger.Component.JD.name());
+       
+       private JobDriverCollectionReader jdcr = null;
+       
+       private LinkedBlockingQueue<MetaCas> cacheQueue = new 
LinkedBlockingQueue<MetaCas>();
+       
+       private AtomicInteger countGet = new AtomicInteger(0);
+       private AtomicInteger countPut = new AtomicInteger(0);
+       private AtomicInteger countGetCr = new AtomicInteger(0);
+       
+       public JobDriverCasManager(String[] classpath, String crXml, String 
crCfg) throws JobDriverException {
+               initialize(classpath, crXml, crCfg);
+       }
+       
+       public void initialize(String[] classpath, String crXml, String crCfg) 
throws JobDriverException {
+               String location = "initialize";
+               try {
+                       URL[] classLoaderUrls = new URL[classpath.length];
+                       int i = 0;
+                       for(String item : classpath) {
+                               classLoaderUrls[i] = 
this.getClass().getResource(item);
+                               i++;
+                       }
+                       jdcr = new JobDriverCollectionReader(classLoaderUrls, 
crXml, crCfg);
+               }
+               catch(JobDriverException e) {
+                       logger.error(location, IDuccId.null_id, e);
+                       throw e;
+               }
+       }
+       
+       public MetaCas getMetaCas() throws JobDriverException {
+               MetaCas retVal = cacheQueue.poll();
+               if(retVal != null) {
+                       countGet.incrementAndGet();
+               }
+               else {
+                       retVal = jdcr.getMetaCas();
+                       if(retVal != null) {
+                               countGetCr.incrementAndGet();
+                               countGet.incrementAndGet();
+                       }
+               }
+               return retVal;
+       }
+       
+       public void putMetaCas(MetaCas metaCas) {
+               cacheQueue.add(metaCas);
+               countPut.incrementAndGet();
+       }
+       
+       public int getTotal() throws JobDriverException {
+               return jdcr.getTotal();
+       }
+       
+       public int getGets() {
+               return countGet.intValue();
+       }
+       
+       public int getPuts() {
+               return countPut.intValue();
+       }
+       
+       public int getGetsCr() {
+               return countGetCr.intValue();
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCasManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCommon.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCommon.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCommon.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCommon.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,50 @@
+package org.apache.uima.ducc.container.jd;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.uima.ducc.container.common.DuccLogger;
+import org.apache.uima.ducc.container.common.IDuccId;
+import org.apache.uima.ducc.container.common.IDuccLogger;
+import org.apache.uima.ducc.container.jd.dispatch.IRemoteWorkerIdentity;
+import org.apache.uima.ducc.container.jd.dispatch.IWorkItem;
+
+public class JobDriverCommon {
+
+       private static IDuccLogger logger = 
DuccLogger.getLogger(JobDriverCommon.class, IDuccLogger.Component.JD.name());
+       
+       private static JobDriverCommon instance = null;
+       
+       public static JobDriverCommon getInstance() {
+               return instance;
+       }
+       
+       private ConcurrentHashMap<IRemoteWorkerIdentity, IWorkItem> map = null;
+       private JobDriverCasManager jdcm = null;
+       
+       public JobDriverCommon(String[] classpath, String crXml, String crCfg) {
+               initialize(classpath, crXml, crCfg);
+               if(instance == null) {
+                       instance = this;
+               }
+       }
+       
+       public void initialize(String[] classpath, String crXml, String crCfg) {
+               String location = "initialize";
+               try {
+                       map = new ConcurrentHashMap<IRemoteWorkerIdentity, 
IWorkItem>();
+                       jdcm = new JobDriverCasManager(classpath, crXml, crCfg);
+               }
+               catch(Exception e) {
+                       logger.error(location, IDuccId.null_id, e);
+               }
+               
+       }
+       
+       public ConcurrentHashMap<IRemoteWorkerIdentity, IWorkItem> getMap() {
+               return map;
+       }
+       
+       public JobDriverCasManager getCasManager() {
+               return jdcm;
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverCommon.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverException.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverException.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverException.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverException.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,14 @@
+package org.apache.uima.ducc.container.jd;
+
+public class JobDriverException extends Exception {
+
+       private static final long serialVersionUID = 1L;
+       
+       public JobDriverException(String text) {
+               super(text);
+       }
+       
+       public JobDriverException(Exception e) {
+               super(e);
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/JobDriverException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/JobDriverCollectionReader.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/JobDriverCollectionReader.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/JobDriverCollectionReader.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/JobDriverCollectionReader.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,192 @@
+package org.apache.uima.ducc.container.jd.classload;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+import org.apache.uima.ducc.container.common.DuccLogger;
+import org.apache.uima.ducc.container.common.IDuccId;
+import org.apache.uima.ducc.container.common.IDuccLogger;
+import org.apache.uima.ducc.container.common.MessageBuffer;
+import org.apache.uima.ducc.container.common.Standardize;
+import org.apache.uima.ducc.container.jd.JobDriverException;
+import org.apache.uima.ducc.container.net.impl.MetaCas;
+
+public class JobDriverCollectionReader {
+
+       private IDuccLogger logger = 
DuccLogger.getLogger(JobDriverCollectionReader.class, 
IDuccLogger.Component.JD.name());
+       
+       private URLClassLoader urlClassLoader = null;
+       private String crXml = null;
+       private String crCfg = null;
+       
+       private Class<?>[] nullClassArray = null;
+       private Object[] nullObjectArray = null;
+       
+       private Class<?> class_JdUserCollectionReader = null;
+       private Object instance_JdUserCollectionReader = null;
+       
+       private String name_getTotal = "getTotal";
+       private Method method_getTotal = null;
+       
+       private Class<?> class_JdUserMetaCas = null;
+       
+       private String name_getJdUserMetaCas = "getJdUserMetaCas";
+       private Method method_getJdUserMetaCas = null;
+       
+       private String name_getSeqNo = "getSeqNo";
+       private String name_getDocumentText = "getDocumentText";
+       private String name_getSerializedCas = "getSerializedCas";
+       
+       private String[] requiredClasses = { 
+                       
"org.apache.uima.ducc.user.jd.iface.JdUserCollectionReader", 
+                       "org.apache.uima.aae.UimaSerializer",
+                       "org.apache.uima.cas.CAS",
+                       "com.thoughtworks.xstream.XStream",
+                       };
+       
+       public JobDriverCollectionReader(URLClassLoader classLoader, String 
crXml, String cfCfg) throws JobDriverException {
+               construct(classLoader, crXml, cfCfg);
+       }
+       
+       public JobDriverCollectionReader(URL[] classLoaderUrls, String crXml, 
String cfCfg) throws JobDriverException {
+               URLClassLoader classLoader = new 
URLClassLoader(classLoaderUrls);
+               construct(classLoader, crXml, cfCfg);
+       }
+       
+       public int getTotal() throws JobDriverException {
+               int retVal = -1;
+               try {
+                       retVal = 
(Integer)method_getTotal.invoke(instance_JdUserCollectionReader, 
nullObjectArray);
+               } catch (IllegalAccessException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (IllegalArgumentException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (InvocationTargetException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               }
+               return retVal;
+       }
+       
+       public MetaCas getMetaCas() throws JobDriverException {
+               MetaCas retVal = null;
+               try {
+                       method_getJdUserMetaCas = 
class_JdUserCollectionReader.getMethod(name_getJdUserMetaCas, nullClassArray);
+                       Object instance_metaCas = 
method_getJdUserMetaCas.invoke(instance_JdUserCollectionReader, 
nullObjectArray);
+                       if(instance_metaCas != null) {
+                               Method method_getSeqNo = 
class_JdUserMetaCas.getMethod(name_getSeqNo, nullClassArray);
+                               Integer x = 
(Integer)method_getSeqNo.invoke(instance_metaCas, nullObjectArray);
+                               int seqNo = x.intValue();
+                               Method method_getSerializedCas = 
class_JdUserMetaCas.getMethod(name_getSerializedCas, nullClassArray);
+                               Object serializedCas = 
method_getSerializedCas.invoke(instance_metaCas, nullObjectArray);
+                               Method method_getDocumentText = 
class_JdUserMetaCas.getMethod(name_getDocumentText, nullClassArray);
+                               String docId = 
(String)method_getDocumentText.invoke(instance_metaCas, nullObjectArray);
+                               retVal = new MetaCas(seqNo, docId, 
serializedCas);
+                       }
+               } catch (NoSuchMethodException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (SecurityException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (IllegalAccessException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (IllegalArgumentException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (InvocationTargetException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               }       
+               return retVal;
+       }
+       
+       private void construct(URLClassLoader classLoader, String crXml, String 
cfCfg) throws JobDriverException {
+               prepare(classLoader, crXml, cfCfg);
+               validate();
+               initialize();
+       }
+       
+       private void prepare(URLClassLoader urlClassLoader, String crXml, 
String crCfg) throws JobDriverException {
+               if(urlClassLoader == null) {
+                       throw new JobDriverException("missing URLClassLoader");
+               }
+               setURLClassLoader(urlClassLoader);
+               if(crXml == null) {
+                       throw new JobDriverException("missing CollectionReader 
xml");
+               }
+               setCrXml(crXml);
+               setCrCfg(crCfg);
+       }
+       
+       private void validate() throws JobDriverException {
+               for(String className : requiredClasses) {
+                       loadClass(className);
+               }
+       }
+       
+       private void initialize() throws JobDriverException {
+               try {
+                       class_JdUserCollectionReader = 
urlClassLoader.loadClass("org.apache.uima.ducc.user.jd.iface.JdUserCollectionReader");
+                       Constructor<?> constructor_JdUserCollectionReader = 
class_JdUserCollectionReader.getConstructor(String.class,String.class);
+                       instance_JdUserCollectionReader = 
constructor_JdUserCollectionReader.newInstance(new Object[] { crXml, crCfg });
+                       method_getTotal = 
class_JdUserCollectionReader.getMethod(name_getTotal, nullClassArray);
+                       class_JdUserMetaCas = 
urlClassLoader.loadClass("org.apache.uima.ducc.user.jd.iface.JdUserMetaCas");
+                       method_getJdUserMetaCas = 
class_JdUserCollectionReader.getMethod(name_getJdUserMetaCas, nullClassArray);
+               } catch (ClassNotFoundException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (NoSuchMethodException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (SecurityException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (InstantiationException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (IllegalAccessException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (IllegalArgumentException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               } catch (InvocationTargetException e) {
+                       JobDriverException jobDriverException = new 
JobDriverException(e);
+                       throw jobDriverException;
+               }
+       }
+       
+       private void setURLClassLoader(URLClassLoader value) {
+               String location = "setURLClassLoader";
+               logger.debug(location, IDuccId.null_id, value);
+               urlClassLoader = value;
+       }
+       
+       private void setCrXml(String value) {
+               crXml = value;
+       }
+       
+       private void setCrCfg(String value) {
+               crCfg = value;
+       }
+       
+       private void loadClass(String className) throws JobDriverException {
+               String location = "loadClass";
+               try {
+                       logger.info(location, IDuccId.null_id, "loading 
"+className);
+                       Class<?> loadedClass = 
urlClassLoader.loadClass(className);
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.loaded.get()+loadedClass.getName());
+                       logger.debug(location, IDuccId.null_id, mb.toString());
+               } catch (ClassNotFoundException e) {
+                       throw new JobDriverException(e);
+               }
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/classload/JobDriverCollectionReader.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/Dispatcher.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/Dispatcher.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/Dispatcher.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/Dispatcher.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,157 @@
+package org.apache.uima.ducc.container.jd.dispatch;
+
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.apache.uima.ducc.container.common.DuccLogger;
+import org.apache.uima.ducc.container.common.IDuccId;
+import org.apache.uima.ducc.container.common.IDuccLogger;
+import org.apache.uima.ducc.container.common.MessageBuffer;
+import org.apache.uima.ducc.container.common.Standardize;
+import org.apache.uima.ducc.container.common.fsm.iface.IEvent;
+import org.apache.uima.ducc.container.common.fsm.iface.IFsm;
+import org.apache.uima.ducc.container.jd.JobDriverCommon;
+import org.apache.uima.ducc.container.jd.fsm.wi.ActionData;
+import org.apache.uima.ducc.container.jd.fsm.wi.WiFsm;
+import org.apache.uima.ducc.container.net.iface.IMetaCas;
+import org.apache.uima.ducc.container.net.iface.IMetaCasTransaction;
+import org.apache.uima.ducc.container.net.iface.IMetaCasTransaction.Type;
+
+public class Dispatcher {
+
+       private static IDuccLogger logger = 
DuccLogger.getLogger(Dispatcher.class, IDuccLogger.Component.JD.name());
+       
+       public Dispatcher() {
+       }
+       
+       public void downNode(NodeInfo nodeInfo) {
+               
+       }
+       
+       public void downProcess(ProcessInfo processInfo) {
+               
+       }
+       
+       public void preemptProcess(ProcessInfo processInfo) {
+               
+       }
+       
+       public void handleMetaCasTransation(IMetaCasTransaction trans) {
+               String location = "handleMetaCasTransation";
+               try {
+                       RemoteWorkerIdentity rwi = new 
RemoteWorkerIdentity(trans);
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.remote.get()+rwi.toString());
+                       mb.append(Standardize.Label.type.get()+trans.getType());
+                       logger.info(location, IDuccId.null_id, mb.toString());
+                       Type type = trans.getType();
+                       switch(type) {
+                       case Get:
+                               handleMetaCasTransationGet(trans, rwi);
+                               break;
+                       case Ack:
+                               handleMetaCasTransationAck(trans, rwi);
+                               break;
+                       case End:
+                               handleMetaCasTransationEnd(trans, rwi);
+                               break;
+                       default:
+                               break;
+                       }
+               }
+               catch(Exception e) {
+                       logger.error(location, IDuccId.null_id, e);
+               }
+       }
+       
+       private IWorkItem register(IRemoteWorkerIdentity rwi) {
+               String location = "register";
+               ConcurrentHashMap<IRemoteWorkerIdentity, IWorkItem> map = 
JobDriverCommon.getInstance().getMap();
+               IWorkItem wi = map.get(rwi);
+               while(wi == null) {
+                       IMetaCas metaCas = null;
+                       IFsm fsm = new WiFsm();
+                       map.putIfAbsent(rwi, new WorkItem(metaCas, fsm));
+                       wi = map.get(rwi);
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.remote.get()+rwi.toString());
+                       logger.debug(location, IDuccId.null_id, mb.toString());
+               }
+               return wi;
+       }
+       
+       private IWorkItem find(IRemoteWorkerIdentity rwi) {
+               String location = "find";
+               ConcurrentHashMap<IRemoteWorkerIdentity, IWorkItem> map = 
JobDriverCommon.getInstance().getMap();
+               IWorkItem wi = map.get(rwi);
+               if(wi != null) {
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.remote.get()+rwi.toString());
+                       
mb.append(Standardize.Label.seqNo.get()+wi.getMetaCas().getSystemKey());
+                       logger.debug(location, IDuccId.null_id, mb.toString());
+               }
+               else {
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.remote.get()+rwi.toString());
+                       mb.append("has no work assigned presently");
+                       logger.debug(location, IDuccId.null_id, mb.toString());
+               }
+               return wi;
+       }
+       
+       public void handleMetaCasTransationGet(IMetaCasTransaction trans, 
IRemoteWorkerIdentity rwi) {
+               IWorkItem wi = register(rwi);
+               IFsm fsm = wi.getFsm();
+               IEvent event = WiFsm.Get_Request;
+               Object actionData = new ActionData(wi, rwi, trans);
+               fsm.transition(event, actionData);
+               IMetaCas metaCas = trans.getMetaCas();
+               if(metaCas != null) {
+                       wi.setMetaCas(metaCas);
+                       event = WiFsm.CAS_Available;
+               }
+               else {
+                       event = WiFsm.CAS_Unavailable;
+               }
+               fsm.transition(event, actionData);
+       }
+       
+       public void handleMetaCasTransationAck(IMetaCasTransaction trans, 
IRemoteWorkerIdentity rwi) {
+               String location = "handleMetaCasTransationAck";
+               IWorkItem wi = find(rwi);
+               if(wi == null) {
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.remote.get()+rwi.toString());
+                       mb.append("has no work assigned presently");
+                       logger.debug(location, IDuccId.null_id, mb.toString());
+               }
+               else {
+                       trans.setMetaCas(wi.getMetaCas());
+                       IFsm fsm = wi.getFsm();
+                       IEvent event = WiFsm.Ack_Request;
+                       Object actionData = new ActionData(wi, rwi, trans);
+                       fsm.transition(event, actionData);
+               }
+       }
+       
+       public void handleMetaCasTransationEnd(IMetaCasTransaction trans, 
IRemoteWorkerIdentity rwi) {
+               String location = "handleMetaCasTransationEnd";
+               IWorkItem wi = find(rwi);
+               if(wi == null) {
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.remote.get()+rwi.toString());
+                       mb.append("has no work assigned presently");
+                       logger.debug(location, IDuccId.null_id, mb.toString());
+               }
+               else {
+                       trans.setMetaCas(wi.getMetaCas());
+                       IFsm fsm = wi.getFsm();
+                       IEvent event = WiFsm.End_Request;
+                       Object actionData = new ActionData(wi, rwi, trans);
+                       fsm.transition(event, actionData);
+                       MessageBuffer mb = new MessageBuffer();
+                       
mb.append(Standardize.Label.AckMsecs.get()+(wi.getTodAck()-wi.getTodGet()));
+                       
mb.append(Standardize.Label.EndMsecs.get()+(wi.getTodEnd()-wi.getTodAck()));
+                       logger.debug(location, IDuccId.null_id, mb.toString());
+               }
+       }
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/Dispatcher.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IRemoteWorkerIdentity.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IRemoteWorkerIdentity.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IRemoteWorkerIdentity.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IRemoteWorkerIdentity.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,13 @@
+package org.apache.uima.ducc.container.jd.dispatch;
+
+public interface IRemoteWorkerIdentity {
+
+       public String getNode();
+       public void setNode(String value);
+       
+       public int getPid();
+       public void setPid(int value);
+       
+       public int getTid();
+       public void setTid(int value);
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IRemoteWorkerIdentity.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IWorkItem.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IWorkItem.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IWorkItem.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IWorkItem.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,22 @@
+package org.apache.uima.ducc.container.jd.dispatch;
+
+import org.apache.uima.ducc.container.common.fsm.iface.IFsm;
+import org.apache.uima.ducc.container.net.iface.IMetaCas;
+
+public interface IWorkItem {
+       
+       public void setMetaCas(IMetaCas value);
+       public IMetaCas getMetaCas();
+       
+       public void setFsm(IFsm value);
+       public IFsm getFsm();
+       
+       public void setTodGet();
+       public long getTodGet();
+       
+       public void setTodAck();
+       public long getTodAck();
+       
+       public void setTodEnd();
+       public long getTodEnd();
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/IWorkItem.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/NodeInfo.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/NodeInfo.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/NodeInfo.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/NodeInfo.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,5 @@
+package org.apache.uima.ducc.container.jd.dispatch;
+
+public class NodeInfo {
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/NodeInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/ProcessInfo.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/ProcessInfo.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/ProcessInfo.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/ProcessInfo.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,5 @@
+package org.apache.uima.ducc.container.jd.dispatch;
+
+public class ProcessInfo {
+
+}

Propchange: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/ProcessInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/RemoteWorkerIdentity.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/RemoteWorkerIdentity.java?rev=1634998&view=auto
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/RemoteWorkerIdentity.java
 (added)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/main/java/org/apache/uima/ducc/container/jd/dispatch/RemoteWorkerIdentity.java
 Tue Oct 28 22:00:48 2014
@@ -0,0 +1,158 @@
+package org.apache.uima.ducc.container.jd.dispatch;
+
+import org.apache.uima.ducc.container.common.DuccLogger;
+import org.apache.uima.ducc.container.common.IDuccId;
+import org.apache.uima.ducc.container.common.IDuccLogger;
+import org.apache.uima.ducc.container.net.iface.IMetaCasRequester;
+
+public class RemoteWorkerIdentity implements IRemoteWorkerIdentity, 
Comparable<Object> {
+       
+       private IDuccLogger logger = 
DuccLogger.getLogger(RemoteWorkerIdentity.class, 
IDuccLogger.Component.JD.name());
+       
+       private String node = null;
+       private int pid = 0;
+       private int tid = 0;
+       
+       public RemoteWorkerIdentity(IMetaCasRequester metaCasRequester) {
+               setNode(metaCasRequester.getRequesterName());
+               setPid(metaCasRequester.getRequesterProcessId());
+               setTid(metaCasRequester.getRequesterThreadId());
+       }
+       
+       public RemoteWorkerIdentity(String node, int pid, int tid) {
+               setNode(node);
+               setPid(pid);
+               setTid(tid);
+       }
+       
+       @Override
+       public String toString() {
+               StringBuffer sb = new StringBuffer();
+               if(node != null) {
+                       sb.append(node);
+                       sb.append(".");
+               }
+               sb.append(pid);
+               sb.append(".");
+               sb.append(tid);
+               return sb.toString();
+       }
+       
+       @Override
+       public String getNode() {
+               return node;
+       }
+       
+       @Override
+       public void setNode(String value) {
+               node = value;
+       }
+       
+       @Override
+       public int getPid() {
+               return pid;
+       }
+       
+       @Override
+       public void setPid(int value) {
+               pid = value;
+       }
+       
+       @Override
+       public int getTid() {
+               return tid;
+       }
+       
+       @Override
+       public void setTid(int value) {
+               tid = value;
+       }
+       
+       private int compareNode(RemoteWorkerIdentity that) {
+               int retVal = 0;
+               String thisNode = this.getNode();
+               String thatNode = that.getNode();
+               if(thisNode != null) {
+                       if(thatNode != null) {
+                               retVal = thisNode.compareTo(thatNode);
+                       }
+               }
+               return retVal;
+       }
+       
+       private int comparePid(RemoteWorkerIdentity that) {
+               int retVal = 0;
+               Integer thisPid = new Integer(this.pid);
+               Integer thatPid = new Integer(that.pid);
+               retVal = thisPid.compareTo(thatPid);
+               return retVal;
+       }
+       
+       private int compareTid(RemoteWorkerIdentity that) {
+               int retVal = 0;
+               Integer thisTid = new Integer(this.tid);
+               Integer thatTid = new Integer(that.tid);
+               retVal = thisTid.compareTo(thatTid);
+               return retVal;
+       }
+       
+       @Override
+       public int compareTo(Object o) {
+               String location = "compareTo";
+               int retVal = 0;
+               try {
+                       if(o != null) {
+                               RemoteWorkerIdentity that = 
(RemoteWorkerIdentity) o;
+                               if(retVal == 0) {
+                                       retVal = compareNode(that);
+                               }
+                               if(retVal == 0) {
+                                       retVal = comparePid(that);
+                               }
+                               if(retVal == 0) {
+                                       retVal = compareTid(that);
+                               }
+                       }
+               }
+               catch(Exception e) {
+                       logger.error(location, IDuccId.null_id, e);
+               }
+               return retVal;
+       }
+       
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               String thisNode = this.getNode();
+               Integer thisPid = new Integer(this.pid);
+               Integer thisTid = new Integer(this.tid);
+               result = prime * result + ((thisNode == null) ? 0 : 
thisNode.hashCode());
+               result = prime * result + ((thisPid == null) ? 0 : 
thisPid.hashCode());
+               result = prime * result + ((thisTid == null) ? 0 : 
thisTid.hashCode());
+               return result;
+       }
+       
+       @Override
+       public boolean equals(Object obj) {
+               String location = "equals";
+               boolean retVal = false;
+               try {
+                       if(obj != null) {
+                               if(this == obj) {
+                                       retVal = true;
+                               }
+                               else {
+                                       RemoteWorkerIdentity that = 
(RemoteWorkerIdentity) obj;
+                                       if(this.compareTo(that) == 0) {
+                                               retVal = true;
+                                       }
+                               }
+                       }
+               }
+               catch(Exception e) {
+                       logger.error(location, IDuccId.null_id, e);
+               }
+               return retVal;
+       }
+}


Reply via email to