Author: lewismc
Date: Wed Sep 16 03:11:50 2015
New Revision: 1703320

URL: http://svn.apache.org/r1703320
Log:
OODT-866 Integrate Avro RPC with the workflow module

Added:
    oodt/branches/avro_rpc/workflow/src/main/avro/
    oodt/branches/avro_rpc/workflow/src/main/avro/types/
    oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflow.avsc
    
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowCondition.avsc
    
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstance.avsc
    
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstancePage.avsc
    oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowTask.avsc
    oodt/branches/avro_rpc/workflow/src/main/avro/types/protocol.avdl
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManager.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManagerClient.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManager.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerClient.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerClientStarter.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/WorkflowManagerStarter.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/rpc/
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/rpc/AvroRpcWorkflowManagerFactory.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/rpc/RpcCommunicationFactory.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/rpc/WorkflowManagerFactory.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/rpc/XmlRpcWorkflowManagerFactory.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/util/AvroTypeFactory.java
    
oodt/branches/avro_rpc/workflow/src/test/java/org/apache/oodt/cas/workflow/system/MockWorkflowManagerClient.java
    
oodt/branches/avro_rpc/workflow/src/test/java/org/apache/oodt/cas/workflow/system/TestAvroRpcWorkflowManager.java
    
oodt/branches/avro_rpc/workflow/src/test/java/org/apache/oodt/cas/workflow/system/TestWorkflowManagerClient.java
Modified:
    oodt/branches/avro_rpc/CHANGES.txt
    
oodt/branches/avro_rpc/crawler/src/main/java/org/apache/oodt/cas/crawl/action/WorkflowMgrStatusUpdate.java
    
oodt/branches/avro_rpc/filemgr/src/test/java/org/apache/oodt/cas/filemgr/system/TestXmlRpcFileManager.java
    
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr
    
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr-client
    
oodt/branches/avro_rpc/pcs/core/src/main/java/org/apache/oodt/pcs/util/WorkflowManagerUtils.java
    
oodt/branches/avro_rpc/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
    
oodt/branches/avro_rpc/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
    oodt/branches/avro_rpc/protocol/imaps/pom.xml
    
oodt/branches/avro_rpc/protocol/imaps/src/test/java/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
    
oodt/branches/avro_rpc/webapp/components/src/main/java/org/apache/oodt/cas/webcomponents/workflow/WorkflowMgrConn.java
    oodt/branches/avro_rpc/workflow/pom.xml
    oodt/branches/avro_rpc/workflow/src/main/bin/wmgr
    oodt/branches/avro_rpc/workflow/src/main/bin/wmgr-client
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetFirstPageCliAction.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetLastPageCliAction.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetNextPageCliAction.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetPrevPageCliAction.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstCliAction.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstsCliAction.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/WorkflowCliAction.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/BranchRedirector.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/RandomStatusUpdateTask.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/TaskJob.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/WorkflowInstancePage.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/XmlRpcWorkflowManager.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/XmlRpcWorkflowManagerClient.java
    
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/tools/InstanceRepoCleaner.java
    oodt/branches/avro_rpc/workflow/src/main/resources/workflow.properties
    
oodt/branches/avro_rpc/workflow/src/test/java/org/apache/oodt/cas/workflow/cli/TestWorkflowCli.java
    
oodt/branches/avro_rpc/workflow/src/test/java/org/apache/oodt/cas/workflow/cli/UseMockClientCmdLineActionStore.java

Modified: oodt/branches/avro_rpc/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/CHANGES.txt?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- oodt/branches/avro_rpc/CHANGES.txt (original)
+++ oodt/branches/avro_rpc/CHANGES.txt Wed Sep 16 03:11:50 2015
@@ -3,12 +3,14 @@ Apache OODT Change Log
 
 Current Development
 
+* OODT-866 Integrate Avro RPC with the workflow module (Radu Manole, mattmann, 
lewismc)
+
 * OODT-874 Corrected workflow/bin/wmgr and resource/bin/resmgr to make sure
   they both delete the cas.xxxx.pid file when stopped using the 'stop'
   command. (mallder)
 
 * OODT-858 Integrate Avro RPC with the filemanager module
-  OODT-856 Separate XMLRPC from OODT logic in the filemgr module (Radu Manole, 
mattmann, lewismc))
+  OODT-856 Separate XMLRPC from OODT logic in the filemgr module (Radu Manole, 
mattmann, lewismc)
 
 * OODT-872 Upgrade Jena dependencies to org.apache.jena 3.0.0 (mattmann, 
lewismc)
 

Modified: 
oodt/branches/avro_rpc/crawler/src/main/java/org/apache/oodt/cas/crawl/action/WorkflowMgrStatusUpdate.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/crawler/src/main/java/org/apache/oodt/cas/crawl/action/WorkflowMgrStatusUpdate.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/crawler/src/main/java/org/apache/oodt/cas/crawl/action/WorkflowMgrStatusUpdate.java
 (original)
+++ 
oodt/branches/avro_rpc/crawler/src/main/java/org/apache/oodt/cas/crawl/action/WorkflowMgrStatusUpdate.java
 Wed Sep 16 03:11:50 2015
@@ -25,7 +25,8 @@ import org.apache.commons.lang.Validate;
 import org.apache.oodt.cas.crawl.structs.exceptions.CrawlerActionException;
 import org.apache.oodt.cas.filemgr.metadata.CoreMetKeys;
 import org.apache.oodt.cas.metadata.Metadata;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 
 //Spring imports
 import org.springframework.beans.factory.annotation.Required;
@@ -50,8 +51,7 @@ public class WorkflowMgrStatusUpdate ext
    public boolean performAction(File product, Metadata productMetadata)
          throws CrawlerActionException {
       try {
-         XmlRpcWorkflowManagerClient wClient = new XmlRpcWorkflowManagerClient(
-               new URL(this.workflowMgrUrl));
+         WorkflowManagerClient wClient = 
RpcCommunicationFactory.createClient(new URL(this.workflowMgrUrl));
          String ingestSuffix = this.ingestSuffix;
          return wClient.sendEvent(productMetadata.getMetadata(PRODUCT_TYPE)
                + ingestSuffix, productMetadata);

Modified: 
oodt/branches/avro_rpc/filemgr/src/test/java/org/apache/oodt/cas/filemgr/system/TestXmlRpcFileManager.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/filemgr/src/test/java/org/apache/oodt/cas/filemgr/system/TestXmlRpcFileManager.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/filemgr/src/test/java/org/apache/oodt/cas/filemgr/system/TestXmlRpcFileManager.java
 (original)
+++ 
oodt/branches/avro_rpc/filemgr/src/test/java/org/apache/oodt/cas/filemgr/system/TestXmlRpcFileManager.java
 Wed Sep 16 03:11:50 2015
@@ -51,8 +51,8 @@ public class TestXmlRpcFileManager exten
 
   private String luceneCatLoc;
 
-  private static final String transferServiceFacClass = "org.apache.oodt.cas."
-      + "filemgr.datatransfer.LocalDataTransferFactory";
+  private static final String transferServiceFacClass = 
+      "org.apache.oodt.cas.filemgr.datatransfer.LocalDataTransferFactory";
 
   private Properties initialProperties = new Properties(
       System.getProperties());
@@ -169,7 +169,8 @@ public class TestXmlRpcFileManager exten
    * 
    * @see junit.framework.TestCase#setUp()
    */
-  protected void setUp() throws Exception {
+  @Override
+  public void setUp() throws Exception {
     startXmlRpcFileManager();
     ingestTestFile();
   }
@@ -179,7 +180,8 @@ public class TestXmlRpcFileManager exten
    * 
    * @see junit.framework.TestCase#tearDown()
    */
-  protected void tearDown() throws Exception {
+  @Override
+  public void tearDown() throws Exception {
     fm.shutdown();
     fm = null;
 

Modified: 
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr
 (original)
+++ 
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr
 Wed Sep 16 03:11:50 2015
@@ -86,7 +86,7 @@ if [ "$1" = "start" ]; then
     -Djava.io.tmpdir="$OODT_TMPDIR" \
     -Dorg.apache.oodt.cas.pge.task.metkeys.legacyMode="true" \
     -Dorg.apache.oodt.cas.pge.task.status.legacyMode="true" \
-    org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManager \
+    org.apache.oodt.cas.workflow.system.WorkflowManagerStarter \
     --portNum "$WORKFLOW_PORT" 2>&1 &
 
   if [ ! -z "$WORKFLOW_PID" ]; then

Modified: 
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr-client
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr-client?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr-client
 (original)
+++ 
oodt/branches/avro_rpc/mvn/archetypes/radix/src/main/resources/archetype-resources/workflow/src/main/resources/bin/wmgr-client
 Wed Sep 16 03:11:50 2015
@@ -72,4 +72,4 @@ cd "$WORKFLOW_HOME"/bin
   -Djava.util.logging.config.file="$WORKFLOW_HOME"/etc/logging.properties \
   
-Dorg.apache.oodt.cas.cli.action.spring.config=file:"$WORKFLOW_HOME"/policy/cmd-line-actions.xml
 \
   
-Dorg.apache.oodt.cas.cli.option.spring.config=file:"$WORKFLOW_HOME"/policy/cmd-line-options.xml
 \
-  org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient "$@"
+  org.apache.oodt.cas.workflow.system.WorkflowManagerClientStarter "$@"

Modified: 
oodt/branches/avro_rpc/pcs/core/src/main/java/org/apache/oodt/pcs/util/WorkflowManagerUtils.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/pcs/core/src/main/java/org/apache/oodt/pcs/util/WorkflowManagerUtils.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/pcs/core/src/main/java/org/apache/oodt/pcs/util/WorkflowManagerUtils.java
 (original)
+++ 
oodt/branches/avro_rpc/pcs/core/src/main/java/org/apache/oodt/pcs/util/WorkflowManagerUtils.java
 Wed Sep 16 03:11:50 2015
@@ -28,7 +28,8 @@ import java.util.logging.Logger;
 
 //OODT imports
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 import org.apache.xmlrpc.XmlRpcClient;
 
 /**
@@ -42,7 +43,7 @@ import org.apache.xmlrpc.XmlRpcClient;
 public class WorkflowManagerUtils {
 
   /* our workflow manager client */
-  private XmlRpcWorkflowManagerClient client;
+  private WorkflowManagerClient client;
 
   /* our log stream */
   private static final Logger LOG = Logger.getLogger(WorkflowManagerUtils.class
@@ -55,11 +56,11 @@ public class WorkflowManagerUtils {
   }
 
   public WorkflowManagerUtils(URL url) {
-    this.client = new XmlRpcWorkflowManagerClient(url);
+    this.client = RpcCommunicationFactory.createClient(url);
     this.wmUrl = url;
   }
 
-  public WorkflowManagerUtils(XmlRpcWorkflowManagerClient client) {
+  public WorkflowManagerUtils(WorkflowManagerClient client) {
     this.client = client;
   }
 
@@ -118,7 +119,7 @@ public class WorkflowManagerUtils {
   /**
    * @return the client
    */
-  public XmlRpcWorkflowManagerClient getClient() {
+  public WorkflowManagerClient getClient() {
     return client;
   }
 
@@ -126,7 +127,7 @@ public class WorkflowManagerUtils {
    * @param client
    *          the client to set
    */
-  public void setClient(XmlRpcWorkflowManagerClient client) {
+  public void setClient(WorkflowManagerClient client) {
     this.client = client;
     if (this.client != null) {
       this.wmUrl = this.client.getWorkflowManagerUrl();

Modified: 
oodt/branches/avro_rpc/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
 (original)
+++ 
oodt/branches/avro_rpc/pge/src/main/java/org/apache/oodt/cas/pge/PGETaskInstance.java
 Wed Sep 16 03:11:50 2015
@@ -85,7 +85,8 @@ import org.apache.oodt.cas.workflow.meta
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskConfiguration;
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskInstance;
 import 
org.apache.oodt.cas.workflow.structs.exceptions.WorkflowTaskInstanceException;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 import org.apache.oodt.cas.workflow.util.ScriptFile;
 import org.apache.oodt.commons.exec.ExecUtils;
 
@@ -107,7 +108,7 @@ import com.google.common.collect.Lists;
 public class PGETaskInstance implements WorkflowTaskInstance {
 
    protected Logger logger = Logger.getLogger(PGETaskInstance.class.getName());
-   protected XmlRpcWorkflowManagerClient wm;
+   protected WorkflowManagerClient wm;
    protected String workflowInstId;
    protected PgeMetadata pgeMetadata;
    protected PgeConfig pgeConfig;
@@ -264,12 +265,12 @@ public class PGETaskInstance implements
             pgeConfig.getPropertyAdderCustomArgs());
    }
 
-   protected XmlRpcWorkflowManagerClient createWorkflowManagerClient()
+   protected WorkflowManagerClient createWorkflowManagerClient()
          throws Exception {
       String url = pgeMetadata.getMetadata(WORKFLOW_MANAGER_URL);
       logger.info("Creating WorkflowManager client for url [" + url + "]");
       Validate.notNull(url, "Must specify " + WORKFLOW_MANAGER_URL);
-      return new XmlRpcWorkflowManagerClient(new URL(url));
+      return RpcCommunicationFactory.createClient(new URL(url));
    }
 
    protected String getWorkflowInstanceId() throws Exception {

Modified: 
oodt/branches/avro_rpc/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
 (original)
+++ 
oodt/branches/avro_rpc/pge/src/test/java/org/apache/oodt/cas/pge/TestPGETaskInstance.java
 Wed Sep 16 03:11:50 2015
@@ -49,12 +49,14 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 import java.util.UUID;
-import java.net.URL;
 import java.util.logging.Handler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -85,7 +87,6 @@ import org.apache.oodt.cas.pge.metadata.
 import org.apache.oodt.cas.pge.writers.MockDynamicConfigFileWriter;
 import org.apache.oodt.cas.workflow.metadata.CoreMetKeys;
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskConfiguration;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
 
 //Google imports
 import com.google.common.collect.Lists;
@@ -280,7 +281,7 @@ public class TestPGETaskInstance extends
       PGETaskInstance pgeTask = createTestInstance();
       pgeTask.pgeMetadata.replaceMetadata(WORKFLOW_MANAGER_URL,
             "http://localhost:8888";);
-      XmlRpcWorkflowManagerClient wmClient =
+      WorkflowManagerClient wmClient =
          pgeTask.createWorkflowManagerClient();
       assertNotNull(wmClient);
    }
@@ -360,7 +361,6 @@ public class TestPGETaskInstance extends
       pgeTask.pgeMetadata.replaceMetadata(DUMP_METADATA, "true");
       pgeTask.dumpMetadataIfRequested();
       assertTrue(dumpMetFile.exists());
-      @SuppressWarnings("unchecked")
       String expectedMetString =    "<?xml version=\"1.0\" 
encoding=\"UTF-8\"?>"
                + "<cas:metadata 
xmlns:cas=\"http://oodt.jpl.nasa.gov/1.0/cas\";>"
                + "<keyval type=\"vector\">"
@@ -465,7 +465,7 @@ public class TestPGETaskInstance extends
       pgeTask.pgeMetadata.replaceMetadata(ATTEMPT_INGEST_ALL, 
Boolean.toString(true));
       pgeTask.workflowInstId = "WorkflowInstanceId";
 
-      pgeTask.wm = createMock(XmlRpcWorkflowManagerClient.class);
+      pgeTask.wm = createMock(WorkflowManagerClient.class);
       expect(pgeTask.wm.updateWorkflowInstanceStatus(pgeTask.workflowInstId,
             CRAWLING.getWorkflowStatusName())).andReturn(true);
       replay(pgeTask.wm);
@@ -482,7 +482,7 @@ public class TestPGETaskInstance extends
       verify(pc);
 
       // Case: UpdateStatus Fail
-      pgeTask.wm = createMock(XmlRpcWorkflowManagerClient.class);
+      pgeTask.wm = createMock(WorkflowManagerClient.class);
       expect(pgeTask.wm.updateWorkflowInstanceStatus(pgeTask.workflowInstId,
             CRAWLING.getWorkflowStatusName())).andReturn(false);
       replay(pgeTask.wm);
@@ -499,7 +499,7 @@ public class TestPGETaskInstance extends
       verify(pc);
 
       // Case: UpdateStatus Success, VerifyIngest Fail
-      pgeTask.wm = createMock(XmlRpcWorkflowManagerClient.class);
+      pgeTask.wm = createMock(WorkflowManagerClient.class);
       expect(pgeTask.wm.updateWorkflowInstanceStatus(pgeTask.workflowInstId,
             CRAWLING.getWorkflowStatusName())).andReturn(true);
       replay(pgeTask.wm);

Modified: oodt/branches/avro_rpc/protocol/imaps/pom.xml
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/protocol/imaps/pom.xml?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- oodt/branches/avro_rpc/protocol/imaps/pom.xml (original)
+++ oodt/branches/avro_rpc/protocol/imaps/pom.xml Wed Sep 16 03:11:50 2015
@@ -83,14 +83,15 @@
                <dependency>
                        <groupId>com.icegreen</groupId>
                        <artifactId>greenmail</artifactId>
-                       <version>1.3.1b</version>
+                       <version>1.4.1</version>
                        <scope>test</scope>
                </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-simple</artifactId>
-            <version>1.3.1</version>
-        </dependency>
+               <!-- Test scope -->
+               <dependency>
+                       <groupId>org.slf4j</groupId>
+                       <artifactId>slf4j-log4j12</artifactId>
+                       <version>1.7.2</version>
+               </dependency>
         <dependency>
                        <groupId>junit</groupId>
                        <artifactId>junit</artifactId>

Modified: 
oodt/branches/avro_rpc/protocol/imaps/src/test/java/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/protocol/imaps/src/test/java/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/protocol/imaps/src/test/java/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
 (original)
+++ 
oodt/branches/avro_rpc/protocol/imaps/src/test/java/org/apache/oodt/cas/protocol/imaps/TestImapsProtocol.java
 Wed Sep 16 03:11:50 2015
@@ -19,6 +19,7 @@ package org.apache.oodt.cas.protocol.ima
 //JDK imports
 import java.io.File;
 import java.io.IOException;
+import java.net.ServerSocket;
 import java.util.List;
 
 //Apache imports
@@ -33,6 +34,7 @@ import org.apache.oodt.cas.protocol.exce
 import com.icegreen.greenmail.util.DummySSLSocketFactory;
 import com.icegreen.greenmail.util.GreenMail;
 import com.icegreen.greenmail.util.GreenMailUtil;
+import com.icegreen.greenmail.util.ServerSetupTest;
 
 //JUnit imports
 import junit.framework.TestCase;
@@ -51,7 +53,8 @@ public class TestImapsProtocol extends T
        public void setUp() {
        System.setProperty("mail.imaps.socketFactory.class", 
DummySSLSocketFactory.class.getCanonicalName());
                System.setProperty("mail.imaps.socketFactory.fallback", 
"false");
-               gMail = new GreenMail();
+               //gMail = new GreenMail(new ServerSetup(findAvailablePort(3035, 
8000), null, "imaps"));
+               gMail = new GreenMail(ServerSetupTest.ALL);
                gMail.setUser("[email protected]", "password");
                gMail.start();
                ImapsProtocol.port = gMail.getImaps().getPort();
@@ -109,4 +112,17 @@ public class TestImapsProtocol extends T
                emails = imapsProtocol.ls();
                assertEquals(0, emails.size());
        }
+
+       private static int findAvailablePort(int min, int max) {
+               for (int port = min; port < max; port++) {
+                       try {
+               new ServerSocket(port).close();
+               return port;
+               } catch (IOException e) {
+            // Must already be taken
+               }
+       }
+       throw new IllegalStateException("Could not find available port in range 
"
+            + min + " to " + max);
+       }
 }

Modified: 
oodt/branches/avro_rpc/webapp/components/src/main/java/org/apache/oodt/cas/webcomponents/workflow/WorkflowMgrConn.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/webapp/components/src/main/java/org/apache/oodt/cas/webcomponents/workflow/WorkflowMgrConn.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/webapp/components/src/main/java/org/apache/oodt/cas/webcomponents/workflow/WorkflowMgrConn.java
 (original)
+++ 
oodt/branches/avro_rpc/webapp/components/src/main/java/org/apache/oodt/cas/webcomponents/workflow/WorkflowMgrConn.java
 Wed Sep 16 03:11:50 2015
@@ -30,7 +30,8 @@ import org.apache.oodt.cas.workflow.stru
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
 import org.apache.oodt.cas.workflow.structs.WorkflowTask;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 
 /**
  * 
@@ -47,11 +48,11 @@ public class WorkflowMgrConn implements
   private static final Logger LOG = Logger.getLogger(WorkflowMgrConn.class
       .getName());
 
-  private XmlRpcWorkflowManagerClient wm;
+  private WorkflowManagerClient wm;
 
   public WorkflowMgrConn(String wmUrlStr) {
     try {
-      this.wm = new XmlRpcWorkflowManagerClient(new URL(wmUrlStr));
+      this.wm = RpcCommunicationFactory.createClient(new URL(wmUrlStr));
     } catch (MalformedURLException e) {
       LOG.log(Level.SEVERE, "Unable to contact Workflow Manager at URL: ["
           + wmUrlStr + "]: Message: " + e.getMessage());
@@ -184,7 +185,7 @@ public class WorkflowMgrConn implements
     }
   }
 
-  public XmlRpcWorkflowManagerClient getWM() {
+  public WorkflowManagerClient getWM() {
     return this.wm;
   }
 

Modified: oodt/branches/avro_rpc/workflow/pom.xml
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/pom.xml?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- oodt/branches/avro_rpc/workflow/pom.xml (original)
+++ oodt/branches/avro_rpc/workflow/pom.xml Wed Sep 16 03:11:50 2015
@@ -74,7 +74,43 @@ the License.
             </goals>
           </execution>
         </executions>
-      </plugin> 
+      </plugin>
+      <plugin>
+        <groupId>org.apache.avro</groupId>
+        <artifactId>avro-maven-plugin</artifactId>
+        <version>1.7.7</version>
+        <configuration>
+          <stringType>String</stringType>
+          <detail>true</detail>
+        </configuration>
+        <executions>
+          <execution>
+            <id>schemas</id>
+            <configuration>
+              <imports>
+                
<import>${basedir}/src/main/avro/types/AvroWorkflowCondition.avsc</import>
+                
<import>${basedir}/src/main/avro/types/AvroWorkflowTask.avsc</import>
+                
<import>${basedir}/src/main/avro/types/AvroWorkflow.avsc</import>
+                
<import>${basedir}/src/main/avro/types/AvroWorkflowInstance.avsc</import>
+                
<import>${basedir}/src/main/avro/types/AvroWorkflowInstancePage.avsc</import>
+              </imports>
+            </configuration>
+            <goals>
+              <goal>schema</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>protocol</id>
+            <configuration><imports>
+              <import>${basedir}/src/main/avro/types</import>
+            </imports>
+            </configuration>
+            <goals>
+              <goal>idl-protocol</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
   <profiles>
@@ -108,6 +144,16 @@ the License.
   </profiles>
   <dependencies>
     <dependency>
+      <groupId>org.apache.avro</groupId>
+      <artifactId>avro</artifactId>
+      <version>1.7.7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.avro</groupId>
+      <artifactId>avro-ipc</artifactId>
+      <version>1.7.7</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.oodt</groupId>
       <artifactId>oodt-commons</artifactId>
       <version>${project.parent.version}</version>

Added: oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflow.avsc
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflow.avsc?rev=1703320&view=auto
==============================================================================
--- oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflow.avsc 
(added)
+++ oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflow.avsc Wed 
Sep 16 03:11:50 2015
@@ -0,0 +1,14 @@
+{
+  "type":"record",
+  "name":"AvroWorkflow",
+  "default":"null",
+  "namespace":"org.apache.oodt.cas.workflow.struct.avrotypes",
+  "imports":["AvroWorkflowTask.avsc","AvroWorkflowCondition.avsc"],
+  "fields":[
+    {"name":"name","type":["null","string"]},
+    {"name":"id","type":["null","string"]},
+    {"name":"tasks","type":{"type":"array","items":"AvroWorkflowTask"}},
+    
{"name":"preConditions","type":{"type":"array","items":"AvroWorkflowCondition"}},
+    
{"name":"postConditions","type":{"type":"array","items":"AvroWorkflowCondition"}}
+  ]
+}
\ No newline at end of file

Added: 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowCondition.avsc
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowCondition.avsc?rev=1703320&view=auto
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowCondition.avsc 
(added)
+++ 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowCondition.avsc 
Wed Sep 16 03:11:50 2015
@@ -0,0 +1,15 @@
+{
+  "type":"record",
+  "name":"AvroWorkflowCondition",
+  "default":"null",
+  "namespace":"org.apache.oodt.cas.workflow.struct.avrotypes",
+  "fields":[
+    {"name":"conditionName","type":["null","string"]},
+    {"name":"conditionId","type":["null","string"]},
+    {"name":"conditionInstanceClassName","type":["null","string"]},
+    {"name":"order","type":"int","default":-1},
+    {"name":"condConfig","type":{"type":"map","values":"string"}},
+    {"name":"timeoutSeconds","type":"long"},
+    {"name":"optional","type":"boolean"}
+  ]
+}
\ No newline at end of file

Added: 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstance.avsc
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstance.avsc?rev=1703320&view=auto
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstance.avsc 
(added)
+++ 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstance.avsc 
Wed Sep 16 03:11:50 2015
@@ -0,0 +1,19 @@
+{
+  "type":"record",
+  "name":"AvroWorkflowInstance",
+  "default":"null",
+  "namespace":"org.apache.oodt.cas.workflow.struct.avrotypes",
+  "imports":["AvroWorkflow.avsc"],
+  "fields":[
+    {"name":"workflow","type":"AvroWorkflow"},
+    {"name":"id","type":["null","string"]},
+    {"name":"status","type":["null","string"]},
+    {"name":"currentTaskId","type":["null","string"]},
+    {"name":"startDateTimeIsoStr","type":["null","string"]},
+    {"name":"endDateTimeIsoStr","type":["null","string"]},
+    {"name":"currentTaskStartDateTimeIsoStr","type":["null","string"]},
+    {"name":"currentTaskEndDateTimeIsoStr","type":["null","string"]},
+    {"name":"sharedContext","type":{"type":"map","values":"string"}},
+    {"name":"priority","type":["null","double"]}
+  ]
+}
\ No newline at end of file

Added: 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstancePage.avsc
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstancePage.avsc?rev=1703320&view=auto
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstancePage.avsc
 (added)
+++ 
oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowInstancePage.avsc
 Wed Sep 16 03:11:50 2015
@@ -0,0 +1,13 @@
+{
+  "type":"record",
+  "name":"AvroWorkflowInstancePage",
+  "default":"null",
+  "namespace":"org.apache.oodt.cas.workflow.struct.avrotypes",
+  "imports":["AvroWorkflowInstance.avsc"],
+  "fields":[
+    {"name":"pageNum","type":"int","default":-1},
+    {"name":"totalPages","type":"int","default":-1},
+    {"name":"pageSize","type":"int","default":-1},
+    
{"name":"pageWorkflows","type":{"type":"array","items":"AvroWorkflowInstance"}}
+  ]
+}
\ No newline at end of file

Added: oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowTask.avsc
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowTask.avsc?rev=1703320&view=auto
==============================================================================
--- oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowTask.avsc 
(added)
+++ oodt/branches/avro_rpc/workflow/src/main/avro/types/AvroWorkflowTask.avsc 
Wed Sep 16 03:11:50 2015
@@ -0,0 +1,20 @@
+{
+  "type":"record",
+  "name":"AvroWorkflowTask",
+  "default":"null",
+  "namespace":"org.apache.oodt.cas.workflow.struct.avrotypes",
+  "imports":"AvroWorkflowCondition.avsc",
+  "fields":[
+    {"name":"taskId","type":["null","string"]},
+    {"name":"taskName","type":["null","string"]},
+    {"name":"taskConfig","type":{"type":"map","values":"string"}},
+    
{"name":"preConditions","type":{"type":"array","items":"AvroWorkflowCondition"}},
+    
{"name":"postConditions","type":{"type":"array","items":"AvroWorkflowCondition"}},
+    {"name":"taskInstanceClassName","type":["null","string"]},
+    {"name":"order","type":"int","default":-1},
+    {"name":"requiredMetFields","type":{"type":"array","items":"string"}},
+    {"name":"startDate","type":["null","string"]},
+    {"name":"endDate","type":["null","string"]}
+  ]
+
+}
\ No newline at end of file

Added: oodt/branches/avro_rpc/workflow/src/main/avro/types/protocol.avdl
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/avro/types/protocol.avdl?rev=1703320&view=auto
==============================================================================
--- oodt/branches/avro_rpc/workflow/src/main/avro/types/protocol.avdl (added)
+++ oodt/branches/avro_rpc/workflow/src/main/avro/types/protocol.avdl Wed Sep 
16 03:11:50 2015
@@ -0,0 +1,75 @@
+@namespace("org.apache.oodt.cas.workflow.struct.avrotypes")
+protocol WorkflowManager {
+import schema "AvroWorkflowCondition.avsc";
+import schema "AvroWorkflowTask.avsc";
+import schema "AvroWorkflow.avsc";
+import schema "AvroWorkflowInstance.avsc";
+import schema "AvroWorkflowInstancePage.avsc";
+
+    boolean refreshRepository();
+
+    string executeDynamicWorkflow(array<string> taskIds, map<string> metadata);
+
+    array<string> getRegisteredEvents();
+
+    AvroWorkflowInstancePage getFirstPage();
+
+    AvroWorkflowInstancePage getNextPage(AvroWorkflowInstancePage currentPage);
+
+    AvroWorkflowInstancePage getPrevPage(AvroWorkflowInstancePage currentPage);
+
+    AvroWorkflowInstancePage getLastPage();
+
+    AvroWorkflowInstancePage paginateWorkflowInstancesOfStatus(int pageNum, 
string status);
+
+    AvroWorkflowInstancePage paginateWorkflowInstances(int pageNum);
+
+    array<AvroWorkflow> getWorkflowsByEvent(string eventName);
+
+    map<string> getWorkflowInstanceMetadata(string wInstId);
+
+    boolean handleEvent(string eventName, map<string> metadata);
+
+    AvroWorkflowInstance getWorkflowInstanceById(string wInstId);
+
+    boolean stopWorkflowInstance(string workflowInstId);
+
+    boolean pauseWorkflowInstance(string workflowInstId);
+
+    boolean resumeWorkflowInstance(string workflowInstId);
+
+    double getWorkflowWallClockMinutes(string workflowInstId);
+
+    double getWorkflowCurrentTaskWallClockMinutes(string workflowInstId);
+
+    int getNumWorkflowInstancesByStatus(string status);
+
+    int getNumWorkflowInstances();
+
+    array<AvroWorkflowInstance> getWorkflowInstancesByStatus(string status);
+
+    array<AvroWorkflowInstance> getWorkflowInstances();
+
+    array<AvroWorkflow> getWorkflows();
+
+    AvroWorkflowTask getTaskById(string taskId);
+
+    AvroWorkflowCondition getConditionById(string conditionId);
+
+    AvroWorkflow getWorkflowById(string workflowId);
+
+    boolean updateMetadataForWorkflow(
+            string workflowInstId, map<string> metadata);
+
+    boolean updateWorkflowInstance(AvroWorkflowInstance instance);
+
+    boolean setWorkflowInstanceCurrentTaskStartDateTime(
+            string wInstId, string startDateTimeIsoStr);
+
+    boolean setWorkflowInstanceCurrentTaskEndDateTime(
+            string wInstId, string endDateTimeIsoStr);
+
+    boolean updateWorkflowInstanceStatus(
+            string workflowInstId, string status);
+
+}
\ No newline at end of file

Modified: oodt/branches/avro_rpc/workflow/src/main/bin/wmgr
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/bin/wmgr?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- oodt/branches/avro_rpc/workflow/src/main/bin/wmgr (original)
+++ oodt/branches/avro_rpc/workflow/src/main/bin/wmgr Wed Sep 16 03:11:50 2015
@@ -53,7 +53,7 @@ case "$1" in
         -Dorg.apache.oodt.cas.workflow.properties=${CAS_WORKFLOW_PROPS} \
         -Dorg.apache.oodt.cas.pge.task.metkeys.legacyMode="true" \
         -Dorg.apache.oodt.cas.pge.task.status.legacyMode="true" \
-        org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManager --portNum 
$SERVER_PORT &       
+        org.apache.oodt.cas.workflow.system.WorkflowManagerStarter --portNum 
$SERVER_PORT &
         echo $! >${RUN_HOME}/cas.workflow.pid 
         echo "OK"
         sleep 5

Modified: oodt/branches/avro_rpc/workflow/src/main/bin/wmgr-client
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/bin/wmgr-client?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- oodt/branches/avro_rpc/workflow/src/main/bin/wmgr-client (original)
+++ oodt/branches/avro_rpc/workflow/src/main/bin/wmgr-client Wed Sep 16 
03:11:50 2015
@@ -28,4 +28,4 @@ $JAVA_HOME/bin/java \
         -Djava.util.logging.config.file=../etc/logging.properties \
         
-Dorg.apache.oodt.cas.cli.action.spring.config=../policy/cmd-line-actions.xml \
         
-Dorg.apache.oodt.cas.cli.option.spring.config=../policy/cmd-line-options.xml \
-        org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient $*
+        org.apache.oodt.cas.workflow.system.WorkflowManagerClientStarter $*

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetFirstPageCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetFirstPageCliAction.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetFirstPageCliAction.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetFirstPageCliAction.java
 Wed Sep 16 03:11:50 2015
@@ -23,7 +23,7 @@ import java.util.List;
 import org.apache.oodt.cas.cli.exception.CmdLineActionException;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
 
 /**
  * Gets the first page of workflow instances.
@@ -39,7 +39,7 @@ public class GetFirstPageCliAction exten
    public void execute(ActionMessagePrinter printer)
          throws CmdLineActionException {
       try {
-         XmlRpcWorkflowManagerClient client = getClient();
+         WorkflowManagerClient client = getClient();
          WorkflowInstancePage page = null;
          if (status != null && !status.equals("")) {
             page = client.paginateWorkflowInstances(1, status);

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetLastPageCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetLastPageCliAction.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetLastPageCliAction.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetLastPageCliAction.java
 Wed Sep 16 03:11:50 2015
@@ -23,7 +23,7 @@ import java.util.List;
 import org.apache.oodt.cas.cli.exception.CmdLineActionException;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
 
 /**
  * A {@link CmdLineOption} which gets the last page of workflows.
@@ -39,7 +39,7 @@ public class GetLastPageCliAction extend
    public void execute(ActionMessagePrinter printer)
          throws CmdLineActionException {
       try {
-         XmlRpcWorkflowManagerClient client = getClient();
+         WorkflowManagerClient client = getClient();
          WorkflowInstancePage page = null;
          if (status != null && !status.equals("")) {
             WorkflowInstancePage firstPage = client.paginateWorkflowInstances(

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetNextPageCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetNextPageCliAction.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetNextPageCliAction.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetNextPageCliAction.java
 Wed Sep 16 03:11:50 2015
@@ -26,7 +26,7 @@ import org.apache.commons.lang.Validate;
 import org.apache.oodt.cas.cli.exception.CmdLineActionException;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
 
 /**
  * A {@link CmdLineAction} which gets the next page of workflows.
@@ -45,7 +45,7 @@ public class GetNextPageCliAction extend
       Validate.isTrue(pageNum != -1);
 
       try {
-         XmlRpcWorkflowManagerClient client = getClient();
+         WorkflowManagerClient client = getClient();
          WorkflowInstancePage page = null;
          if (status != null && !status.equals("")) {
             page = client.paginateWorkflowInstances(pageNum + 1, status);

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetPrevPageCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetPrevPageCliAction.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetPrevPageCliAction.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetPrevPageCliAction.java
 Wed Sep 16 03:11:50 2015
@@ -26,7 +26,7 @@ import org.apache.commons.lang.Validate;
 import org.apache.oodt.cas.cli.exception.CmdLineActionException;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
 
 /**
  * A {@link CmdLineAction} which gets the previous page of workflows.
@@ -45,7 +45,7 @@ public class GetPrevPageCliAction extend
       Validate.isTrue(pageNum != -1);
 
       try {
-         XmlRpcWorkflowManagerClient client = getClient();
+         WorkflowManagerClient client = getClient();
          WorkflowInstancePage page = null;
          if (status != null && !status.equals("")) {
             page = client.paginateWorkflowInstances(pageNum - 1, status);

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstCliAction.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstCliAction.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstCliAction.java
 Wed Sep 16 03:11:50 2015
@@ -19,7 +19,7 @@ package org.apache.oodt.cas.workflow.cli
 //OODT imports
 import org.apache.oodt.cas.cli.exception.CmdLineActionException;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
 
 /**
  * A {@link CmdLineAction} which get WorkflowInstance information by given
@@ -35,7 +35,7 @@ public class GetWorkflowInstCliAction ex
    public void execute(ActionMessagePrinter printer)
          throws CmdLineActionException {
       try {
-         XmlRpcWorkflowManagerClient client = getClient();
+         WorkflowManagerClient client = getClient();
          WorkflowInstance inst = client.getWorkflowInstanceById(instanceId);
          if (inst == null) {
             throw new Exception(

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstsCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstsCliAction.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstsCliAction.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/GetWorkflowInstsCliAction.java
 Wed Sep 16 03:11:50 2015
@@ -22,7 +22,7 @@ import java.util.List;
 //OODT imports
 import org.apache.oodt.cas.cli.exception.CmdLineActionException;
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
 
 /**
  * A {@link CmdLineAction} which lists workflow instances current managed by
@@ -37,7 +37,7 @@ public class GetWorkflowInstsCliAction e
          throws CmdLineActionException {
 
       try {
-         XmlRpcWorkflowManagerClient client = getClient();
+         WorkflowManagerClient client = getClient();
          @SuppressWarnings("unchecked")
          List<WorkflowInstance> insts = client.getWorkflowInstances();
 

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/WorkflowCliAction.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/WorkflowCliAction.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/WorkflowCliAction.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/cli/action/WorkflowCliAction.java
 Wed Sep 16 03:11:50 2015
@@ -25,7 +25,8 @@ import org.apache.commons.lang.Validate;
 
 //OODT imports
 import org.apache.oodt.cas.cli.action.CmdLineAction;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 
 /**
  * Base {@link CmdLineAction} for Workflow Manager.
@@ -34,24 +35,24 @@ import org.apache.oodt.cas.workflow.syst
  */
 public abstract class WorkflowCliAction extends CmdLineAction {
 
-   private XmlRpcWorkflowManagerClient client;
+   private WorkflowManagerClient client;
 
    public String getUrl() {
       return System.getProperty("org.apache.oodt.cas.workflow.url");
    }
 
-   protected XmlRpcWorkflowManagerClient getClient()
+   protected WorkflowManagerClient getClient()
          throws MalformedURLException {
       Validate.notNull(getUrl());
 
       if (client != null) {
          return client;
       } else {
-         return new XmlRpcWorkflowManagerClient(new URL(getUrl()));
+         return RpcCommunicationFactory.createClient(new URL(getUrl()));
       }
    }
 
-   public void setClient(XmlRpcWorkflowManagerClient client) {
+   public void setClient(WorkflowManagerClient client) {
       this.client = client;
    }
 }

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/BranchRedirector.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/BranchRedirector.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/BranchRedirector.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/BranchRedirector.java
 Wed Sep 16 03:11:50 2015
@@ -26,7 +26,8 @@ import org.apache.oodt.cas.workflow.meta
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskConfiguration;
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskInstance;
 import 
org.apache.oodt.cas.workflow.structs.exceptions.WorkflowTaskInstanceException;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 
 /**
  * 
@@ -54,11 +55,11 @@ public class BranchRedirector implements
   @Override
   public void run(Metadata metadata, WorkflowTaskConfiguration config)
       throws WorkflowTaskInstanceException {
-    XmlRpcWorkflowManagerClient wm = null;
+    WorkflowManagerClient wm = null;
 
     try {
-      wm = new XmlRpcWorkflowManagerClient(new URL(
-          metadata.getMetadata(CoreMetKeys.WORKFLOW_MANAGER_URL)));
+      wm = RpcCommunicationFactory.createClient(new URL(
+              metadata.getMetadata(CoreMetKeys.WORKFLOW_MANAGER_URL)));
       wm.sendEvent(config.getProperty("eventName"), metadata);
     } catch (Exception e) {
       throw new WorkflowTaskInstanceException(e.getMessage());

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/RandomStatusUpdateTask.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/RandomStatusUpdateTask.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/RandomStatusUpdateTask.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/examples/RandomStatusUpdateTask.java
 Wed Sep 16 03:11:50 2015
@@ -28,8 +28,9 @@ import org.apache.oodt.cas.metadata.Meta
 import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskConfiguration;
 import org.apache.oodt.cas.workflow.structs.WorkflowTaskInstance;
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
 import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManager;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 
 /**
  * @author mattmann
@@ -48,7 +49,7 @@ public class RandomStatusUpdateTask impl
 
     private final int numStatusesToDisplay = 10;
 
-    private XmlRpcWorkflowManagerClient client = null;
+    private WorkflowManagerClient client = null;
 
     /*
      * (non-Javadoc)
@@ -91,7 +92,7 @@ public class RandomStatusUpdateTask impl
 
     private void setWorkflowMgrUrl(String wmUrlStr) {
         System.out.println("Connecting to workflow mgr: ["+wmUrlStr+"]");
-        this.client = new XmlRpcWorkflowManagerClient(safeGetUrl(wmUrlStr));
+        this.client = 
RpcCommunicationFactory.createClient(safeGetUrl(wmUrlStr));
     }
 
     private URL safeGetUrl(String urlStr) {

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/TaskJob.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/TaskJob.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/TaskJob.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/TaskJob.java
 Wed Sep 16 03:11:50 2015
@@ -27,6 +27,8 @@ import java.util.Date;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.apache.oodt.cas.workflow.system.WorkflowManagerClient;
+import org.apache.oodt.cas.workflow.system.rpc.RpcCommunicationFactory;
 import org.apache.oodt.commons.util.DateConvert;
 
 //OODT imports
@@ -36,7 +38,6 @@ import org.apache.oodt.cas.resource.stru
 import org.apache.oodt.cas.resource.structs.exceptions.JobInputException;
 import org.apache.oodt.cas.workflow.metadata.CoreMetKeys;
 import 
org.apache.oodt.cas.workflow.structs.exceptions.WorkflowTaskInstanceException;
-import org.apache.oodt.cas.workflow.system.XmlRpcWorkflowManagerClient;
 import org.apache.oodt.cas.workflow.util.GenericWorkflowObjectFactory;
 
 /**
@@ -117,7 +118,7 @@ public class TaskJob implements JobInsta
 
     private void updateStatus(String status, Metadata met) {
         String workflowInstId = met.getMetadata(WORKFLOW_INST_ID);
-        XmlRpcWorkflowManagerClient wClient = getWmClientFromMetadata(met);
+        WorkflowManagerClient wClient = getWmClientFromMetadata(met);
 
         try {
             if (!wClient.updateWorkflowInstanceStatus(workflowInstId, status)) 
{
@@ -131,7 +132,7 @@ public class TaskJob implements JobInsta
 
     private void updateMetadata(Metadata met) {
         String workflowInstId = met.getMetadata(WORKFLOW_INST_ID);
-        XmlRpcWorkflowManagerClient wClient = getWmClientFromMetadata(met);
+        WorkflowManagerClient wClient = getWmClientFromMetadata(met);
 
         try {
             if (!wClient.updateMetadataForWorkflow(workflowInstId, met)) {
@@ -146,7 +147,7 @@ public class TaskJob implements JobInsta
     private void setWorkflowInstanceCurrentTaskStartDateTime(
             String startDateTime, Metadata met) {
         String workflowInstId = met.getMetadata(WORKFLOW_INST_ID);
-        XmlRpcWorkflowManagerClient wClient = getWmClientFromMetadata(met);
+        WorkflowManagerClient wClient = getWmClientFromMetadata(met);
 
         try {
             if (!wClient.setWorkflowInstanceCurrentTaskStartDateTime(
@@ -162,7 +163,7 @@ public class TaskJob implements JobInsta
     private void setWorkflowInstanceCurrentTaskEndDateTime(String endDateTime,
             Metadata met) {
         String workflowInstId = met.getMetadata(WORKFLOW_INST_ID);
-        XmlRpcWorkflowManagerClient wClient = getWmClientFromMetadata(met);
+        WorkflowManagerClient wClient = getWmClientFromMetadata(met);
 
         try {
             if (!wClient.setWorkflowInstanceCurrentTaskEndDateTime(
@@ -175,7 +176,7 @@ public class TaskJob implements JobInsta
         }
     }
 
-    private XmlRpcWorkflowManagerClient getWmClientFromMetadata(Metadata met) {
+    private WorkflowManagerClient getWmClientFromMetadata(Metadata met) {
         String workflowMgrUrlStr = met.getMetadata(WORKFLOW_MANAGER_URL);
         if (workflowMgrUrlStr == null
                 || (workflowMgrUrlStr != null && 
workflowMgrUrlStr.equals(""))) {
@@ -184,8 +185,7 @@ public class TaskJob implements JobInsta
             workflowMgrUrlStr = "http://localhost:9001";;
         }
 
-        return new XmlRpcWorkflowManagerClient(
-                safeGetUrlFromString(workflowMgrUrlStr));
+        return 
RpcCommunicationFactory.createClient(safeGetUrlFromString(workflowMgrUrlStr));
     }
 
     private String getHostname() {

Modified: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/WorkflowInstancePage.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/WorkflowInstancePage.java?rev=1703320&r1=1703319&r2=1703320&view=diff
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/WorkflowInstancePage.java
 (original)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/structs/WorkflowInstancePage.java
 Wed Sep 16 03:11:50 2015
@@ -41,7 +41,7 @@ public class WorkflowInstancePage {
     /* the size of the number of workflows on this page */
     private int pageSize = -1;
 
-    /* the list of produdcts associated with this page */
+    /* the list of products associated with this page */
     private List pageWorkflows = null;
 
     /**

Added: 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManager.java
URL: 
http://svn.apache.org/viewvc/oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManager.java?rev=1703320&view=auto
==============================================================================
--- 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManager.java
 (added)
+++ 
oodt/branches/avro_rpc/workflow/src/main/java/org/apache/oodt/cas/workflow/system/AvroRpcWorkflowManager.java
 Wed Sep 16 03:11:50 2015
@@ -0,0 +1,717 @@
+/*
+ * 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.oodt.cas.workflow.system;
+
+import com.google.common.base.Preconditions;
+import org.apache.avro.AvroRemoteException;
+import org.apache.avro.ipc.NettyServer;
+import org.apache.avro.ipc.Server;
+import org.apache.avro.ipc.specific.SpecificResponder;
+import org.apache.oodt.cas.metadata.Metadata;
+import org.apache.oodt.cas.workflow.engine.ThreadPoolWorkflowEngineFactory;
+import org.apache.oodt.cas.workflow.engine.WorkflowEngine;
+import 
org.apache.oodt.cas.workflow.repository.DataSourceWorkflowRepositoryFactory;
+import org.apache.oodt.cas.workflow.repository.WorkflowRepository;
+import org.apache.oodt.cas.workflow.struct.avrotypes.AvroWorkflowInstancePage;
+import org.apache.oodt.cas.workflow.struct.avrotypes.AvroWorkflowInstance;
+import org.apache.oodt.cas.workflow.struct.avrotypes.AvroWorkflow;
+import org.apache.oodt.cas.workflow.struct.avrotypes.AvroWorkflowTask;
+import org.apache.oodt.cas.workflow.struct.avrotypes.AvroWorkflowCondition;
+import org.apache.oodt.cas.workflow.structs.WorkflowInstancePage;
+import org.apache.oodt.cas.workflow.structs.Workflow;
+import org.apache.oodt.cas.workflow.structs.WorkflowTask;
+import org.apache.oodt.cas.workflow.structs.WorkflowInstance;
+import org.apache.oodt.cas.workflow.structs.WorkflowCondition;
+import org.apache.oodt.cas.workflow.structs.exceptions.EngineException;
+import 
org.apache.oodt.cas.workflow.structs.exceptions.InstanceRepositoryException;
+import org.apache.oodt.cas.workflow.structs.exceptions.RepositoryException;
+import org.apache.oodt.cas.workflow.util.AvroTypeFactory;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.net.URL;
+import java.net.InetAddress;
+import java.net.MalformedURLException;
+import java.net.UnknownHostException;
+import java.net.InetSocketAddress;
+import java.util.List;
+import java.util.Map;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+
+import static 
org.apache.oodt.cas.workflow.util.GenericWorkflowObjectFactory.getWorkflowEngineFromClassName;
+import static 
org.apache.oodt.cas.workflow.util.GenericWorkflowObjectFactory.getWorkflowRepositoryFromClassName;
+
+/**
+ * @author radu
+ *
+ * <p>
+ * The Avro RPC based workflow manager.
+ * </p>
+ */
+public class AvroRpcWorkflowManager implements 
WorkflowManager,org.apache.oodt.cas.workflow.struct.avrotypes.WorkflowManager {
+
+    private int webServerPort;
+
+    private Server server;
+
+    private static final Logger LOG = 
Logger.getLogger(AvroRpcWorkflowManager.class.getName());
+
+    private final WorkflowEngine engine;
+
+    private WorkflowRepository repo;
+
+
+    public AvroRpcWorkflowManager(){
+        this(DEFAULT_WEB_SERVER_PORT);
+    }
+
+    public AvroRpcWorkflowManager(int port){
+        Preconditions.checkArgument(port > 0, "Must specify a port greater 
than 0");
+        webServerPort = port;
+
+        engine = getWorkflowEngineFromProperty();
+        engine.setWorkflowManagerUrl(safeGetUrlFromString("http://";
+                + getHostname() + ":" + this.webServerPort));
+        repo = getWorkflowRepositoryFromProperty();
+
+        // start up the server
+        server = new NettyServer(new SpecificResponder(
+                
org.apache.oodt.cas.workflow.struct.avrotypes.WorkflowManager.class,this),
+                new InetSocketAddress(this.webServerPort));
+        server.start();
+        LOG.log(Level.INFO, "Workflow Manager started by "
+                + System.getProperty("user.name", "unknown"));
+
+    }
+
+    @Override
+    public boolean shutdown() {
+        if (server != null) {
+            server.close();
+            server = null;
+            return true;
+        } else
+            return false;
+    }
+
+    @Override
+    public boolean refreshRepository() throws AvroRemoteException {
+        repo = getWorkflowRepositoryFromProperty();
+        return true;
+    }
+
+    @Override
+    public String executeDynamicWorkflow(List<String> taskIds, Map<String, 
String> metadata)
+            throws AvroRemoteException {
+        try {
+            if (taskIds == null || (taskIds != null && taskIds.size() == 0))
+                throw new RepositoryException(
+                        "Must specify task identifiers to build dynamic 
workflows!");
+            Workflow dynamicWorkflow = new Workflow();
+
+            for (String taskId : taskIds) {
+                WorkflowTask task = this.repo.getWorkflowTaskById(taskId);
+                if (task == null)
+                throw new RepositoryException("Dynamic workflow task: [" + 
taskId
+                        + "] is not defined!");
+                    dynamicWorkflow.getTasks().add(task);
+            }
+
+            dynamicWorkflow.setId(this.repo.addWorkflow(dynamicWorkflow));
+            dynamicWorkflow.setName("Dynamic Workflow-" + 
dynamicWorkflow.getId());
+
+            Metadata met = new Metadata();
+            met.addMetadata(AvroTypeFactory.getMetadata(metadata));
+
+            WorkflowInstance inst = this.engine.startWorkflow(dynamicWorkflow, 
met);
+            return inst.getId();
+
+        }catch (RepositoryException e){
+            throw new AvroRemoteException(e);
+        }catch (EngineException e){
+            throw new AvroRemoteException(e);
+        }
+
+    }
+
+    @Override
+    public List<String> getRegisteredEvents() throws AvroRemoteException {
+        List events = null;
+        try {
+            events = repo.getRegisteredEvents();
+            return events;
+
+        } catch (RepositoryException e) {
+            e.printStackTrace();
+            throw new AvroRemoteException(
+                    "Exception getting registered events from repository: 
Message: "
+                            + e.getMessage());
+        }
+    }
+
+    @Override
+    public AvroWorkflowInstancePage getFirstPage() throws AvroRemoteException {
+        WorkflowInstancePage page = engine.getInstanceRepository()
+                .getFirstPage();
+        if (page != null) {
+            populateWorkflows(page.getPageWorkflows());
+            return AvroTypeFactory.getAvroWorkflowInstancePage(page);
+        } else
+            return 
AvroTypeFactory.getAvroWorkflowInstancePage(WorkflowInstancePage
+                    .blankPage());
+
+    }
+
+    @Override
+    public AvroWorkflowInstancePage getNextPage(AvroWorkflowInstancePage 
currentPage) throws AvroRemoteException {
+        // first unpack current page
+        WorkflowInstancePage currPage = 
AvroTypeFactory.getWorkflowInstancePage(currentPage);
+        WorkflowInstancePage page = engine.getInstanceRepository().getNextPage(
+                currPage);
+        if (page != null) {
+            populateWorkflows(page.getPageWorkflows());
+            return AvroTypeFactory.getAvroWorkflowInstancePage(page);
+        } else
+            return 
AvroTypeFactory.getAvroWorkflowInstancePage(WorkflowInstancePage
+                    .blankPage());
+    }
+
+    @Override
+    public AvroWorkflowInstancePage getPrevPage(AvroWorkflowInstancePage 
currentPage) throws AvroRemoteException {
+        // first unpack current page
+        WorkflowInstancePage currPage = 
AvroTypeFactory.getWorkflowInstancePage(currentPage);
+        WorkflowInstancePage page = engine.getInstanceRepository().getPrevPage(
+                currPage);
+        if (page != null) {
+            populateWorkflows(page.getPageWorkflows());
+            return AvroTypeFactory.getAvroWorkflowInstancePage(page);
+        } else
+            return 
AvroTypeFactory.getAvroWorkflowInstancePage(WorkflowInstancePage
+                    .blankPage());
+    }
+
+    @Override
+    public AvroWorkflowInstancePage getLastPage() throws AvroRemoteException {
+        WorkflowInstancePage page = engine.getInstanceRepository()
+                .getLastPage();
+        if (page != null) {
+            populateWorkflows(page.getPageWorkflows());
+            return AvroTypeFactory.getAvroWorkflowInstancePage(page);
+        } else
+            return 
AvroTypeFactory.getAvroWorkflowInstancePage(WorkflowInstancePage
+                    .blankPage());
+    }
+
+    @Override
+    public AvroWorkflowInstancePage paginateWorkflowInstancesOfStatus(int 
pageNum, String status)
+    throws AvroRemoteException{
+        WorkflowInstancePage page = null;
+        try {
+            page = engine.getInstanceRepository()
+                    .getPagedWorkflows(pageNum, status);
+        if (page != null) {
+            populateWorkflows(page.getPageWorkflows());
+            return AvroTypeFactory.getAvroWorkflowInstancePage(page);
+        } else
+            return 
AvroTypeFactory.getAvroWorkflowInstancePage(WorkflowInstancePage
+                    .blankPage());
+        } catch (InstanceRepositoryException e) {
+            throw new AvroRemoteException(e);
+        }
+    }
+
+    @Override
+    public AvroWorkflowInstancePage paginateWorkflowInstances(int pageNum) 
throws AvroRemoteException {
+        WorkflowInstancePage page = null;
+        try {
+            page = engine.getInstanceRepository()
+                    .getPagedWorkflows(pageNum);
+        if (page != null) {
+            populateWorkflows(page.getPageWorkflows());
+            return AvroTypeFactory.getAvroWorkflowInstancePage(page);
+        } else
+            return 
AvroTypeFactory.getAvroWorkflowInstancePage(WorkflowInstancePage
+                    .blankPage());
+        } catch (InstanceRepositoryException e) {
+            throw new AvroRemoteException(e);
+        }
+
+    }
+
+    @Override
+    public List<AvroWorkflow> getWorkflowsByEvent(String eventName) throws 
AvroRemoteException {
+        List workflows = null;
+        try {
+            workflows = repo.getWorkflowsForEvent(eventName);
+            if (workflows != null)
+                return AvroTypeFactory.getAvroWorkflows(workflows);
+            else
+                return new ArrayList();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new AvroRemoteException(
+                    "Exception getting workflows for event: " + eventName
+                            + " from repository: Message: " + e.getMessage());
+        }
+    }
+
+    @Override
+    public Map<String, String> getWorkflowInstanceMetadata(String wInstId) 
throws AvroRemoteException {
+        Metadata met = engine.getWorkflowInstanceMetadata(wInstId);
+        return AvroTypeFactory.getAvroMetadata(met);
+    }
+
+
+    @Override
+    public boolean handleEvent(String eventName, Map<String, String> metadata) 
throws AvroRemoteException {
+        LOG.log(Level.INFO, "WorkflowManager: Received event: " + eventName);
+
+        List workflows = null;
+
+        try {
+            workflows = repo.getWorkflowsForEvent(eventName);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new AvroRemoteException(
+                    "Exception getting workflows associated with event: "
+                            + eventName + ": Message: " + e.getMessage());
+        }
+
+        if (workflows != null) {
+            for (Iterator i = workflows.iterator(); i.hasNext();) {
+                Workflow w = (Workflow) i.next();
+                LOG.log(Level.INFO, "WorkflowManager: Workflow " + w.getName()
+                        + " retrieved for event " + eventName);
+
+                Metadata m = new Metadata();
+                m.addMetadata(AvroTypeFactory.getMetadata(metadata));
+
+                try {
+                    engine.startWorkflow(w, m);
+                } catch (Exception e) {
+                    e.printStackTrace();
+                    throw new AvroRemoteException(
+                            "Engine exception when starting workflow: "
+                                    + w.getName() + ": Message: "
+                                    + e.getMessage());
+                }
+            }
+            return true;
+        } else
+            return false;
+
+    }
+
+    @Override
+    public AvroWorkflowInstance getWorkflowInstanceById(String wInstId) throws 
AvroRemoteException {
+        WorkflowInstance inst = null;
+
+        try {
+            inst = engine.getInstanceRepository().getWorkflowInstanceById(
+                    wInstId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOG.log(Level.WARNING,
+                    "Error obtaining workflow instance with ID: [" + wInstId
+                            + "]: Message: " + e.getMessage());
+            inst = new WorkflowInstance();
+        }
+
+        return AvroTypeFactory.getAvroWorkflowInstance(inst);
+
+    }
+
+    @Override
+    public boolean stopWorkflowInstance(String workflowInstId) throws 
AvroRemoteException {
+        engine.stopWorkflow(workflowInstId);
+        return true;
+    }
+
+    @Override
+    public boolean pauseWorkflowInstance(String workflowInstId) throws 
AvroRemoteException {
+        engine.pauseWorkflowInstance(workflowInstId);
+        return true;
+    }
+
+    @Override
+    public boolean resumeWorkflowInstance(String workflowInstId) throws 
AvroRemoteException {
+        engine.resumeWorkflowInstance(workflowInstId);
+        return true;
+    }
+
+
+
+    @Override
+    public double getWorkflowWallClockMinutes(String workflowInstId) throws 
AvroRemoteException {
+        return engine.getWallClockMinutes(workflowInstId);
+    }
+
+    @Override
+    public double getWorkflowCurrentTaskWallClockMinutes(String 
workflowInstId) throws AvroRemoteException {
+        return engine.getCurrentTaskWallClockMinutes(workflowInstId);
+    }
+
+    @Override
+    public int getNumWorkflowInstancesByStatus(String status) throws 
AvroRemoteException {
+        try {
+            return 
engine.getInstanceRepository().getNumWorkflowInstancesByStatus(
+                    status);
+        } catch (InstanceRepositoryException e) {
+            throw new AvroRemoteException(e);
+        }
+    }
+
+    @Override
+    public int getNumWorkflowInstances() throws AvroRemoteException {
+        try {
+            return engine.getInstanceRepository().getNumWorkflowInstances();
+        } catch (InstanceRepositoryException e) {
+            e.printStackTrace();
+            throw new AvroRemoteException(e);
+        }
+    }
+
+
+    // gimiky trebuie sa ma uit mai bine sa o examinez 
--------------------------------
+    @Override
+    public List<AvroWorkflowInstance> getWorkflowInstancesByStatus(String 
status) throws AvroRemoteException {
+        List workflowInsts = null;
+        List<AvroWorkflowInstance> avroWorkflowInstances = new 
ArrayList<AvroWorkflowInstance>();
+        try {
+            workflowInsts = engine.getInstanceRepository()
+                    .getWorkflowInstancesByStatus(status);
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOG.log(Level.WARNING,
+                    "Exception getting workflow instances by status: Message: 
["
+                            + e.getMessage() + "]");
+            return avroWorkflowInstances; 
//AvroTypeFactory.getAvroWorkflowInstances(workflowInsts);
+        }
+
+        if (workflowInsts != null) {
+            LOG.log(Level.INFO,
+                    "Getting workflow instances by status: retrieved: "
+                            + workflowInsts.size() + " instances");
+
+            try {
+
+                for (WorkflowInstance wi :(List<WorkflowInstance>) 
workflowInsts){
+                    // pick up the description of the workflow
+                    Workflow wDesc = 
repo.getWorkflowById(wi.getWorkflow().getId());
+                    // TODO: hack for now, fix this, we shouldn't have to cast
+                    // here, bad
+                    // design
+                    if(wDesc == null){
+                        //Possible dynamic workflow for instance
+                        //reconsitute it from cache
+                        wDesc = wi.getWorkflow();
+                        repo.addWorkflow(wDesc);
+                    }
+                    wi.setWorkflow(wDesc);
+                    
avroWorkflowInstances.add(AvroTypeFactory.getAvroWorkflowInstance(wi));
+
+                }
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new AvroRemoteException(
+                        "Exception getting workflow instances by statusfrom 
workflow engine: Message: "
+                                + e.getMessage());
+            }
+        }
+
+        return avroWorkflowInstances;
+
+    }
+
+    @Override
+    public List<AvroWorkflowInstance> getWorkflowInstances() throws 
AvroRemoteException {
+        List workflowInsts = null;
+        List<AvroWorkflowInstance> avroWorkflowInstances = new 
ArrayList<AvroWorkflowInstance>();
+
+        try {
+            workflowInsts = engine.getInstanceRepository()
+                    .getWorkflowInstances();
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOG.log(Level.WARNING,
+                    "Exception getting workflow instances: Message: ["
+                            + e.getMessage() + "]");
+            return avroWorkflowInstances;
+        }
+
+        if (workflowInsts != null) {
+            LOG.log(Level.INFO, "Getting workflow instances: retrieved: "
+                    + workflowInsts.size() + " instances");
+
+            try {
+                for (WorkflowInstance wi :(List<WorkflowInstance>) 
workflowInsts){
+                    // pick up the description of the workflow
+                    Workflow wDesc = repo.getWorkflowById(wi.getWorkflow()
+                            .getId());
+                    // TODO: hack for now, fix this, we shouldn't have to cast
+                    // here, bad
+                    // design
+                    if(wDesc == null){
+                        //Possible dynamic workflow for instance
+                        //reconsitute it from cache
+                        wDesc = wi.getWorkflow();
+                        repo.addWorkflow(wDesc);
+                    }
+                    wi.setWorkflow(wDesc);
+                    
avroWorkflowInstances.add(AvroTypeFactory.getAvroWorkflowInstance(wi));
+
+                }
+                return avroWorkflowInstances;
+            } catch (Exception e) {
+                //e.printStackTrace();
+                throw new AvroRemoteException(
+                        "Exception getting workflow instances from workflow 
engine: Message: "
+                                + e.getMessage());
+            }
+        } else
+            return null;
+
+    }
+
+    @Override
+    public List<AvroWorkflow> getWorkflows() throws AvroRemoteException {
+        List workflowList = null;
+        try {
+            workflowList = repo.getWorkflows();
+        } catch (RepositoryException e) {
+            throw new AvroRemoteException(e);
+        }
+
+        if (workflowList != null) {
+            LOG.log(Level.INFO, "Getting workflows: retrieved: "
+                    + workflowList.size() + " workflows");
+
+            try {
+                return AvroTypeFactory.getAvroWorkflows(workflowList);
+            } catch (Exception e) {
+                e.printStackTrace();
+                throw new AvroRemoteException(
+                        "Exception getting workflows from repository: Message: 
"
+                                + e.getMessage());
+            }
+
+        } else
+            return null;
+
+    }
+
+    @Override
+    public AvroWorkflowTask getTaskById(String taskId) throws 
AvroRemoteException {
+        try {
+            WorkflowTask t = repo.getWorkflowTaskById(taskId);
+            return AvroTypeFactory.getAvroWorkflowTask(t);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new AvroRemoteException(
+                    "Exception getting task by id: Message: " + 
e.getMessage());
+        }
+    }
+
+    @Override
+    public AvroWorkflowCondition getConditionById(String conditionId) throws 
AvroRemoteException {
+        try {
+            WorkflowCondition c = repo.getWorkflowConditionById(conditionId);
+            return AvroTypeFactory.getAvroWorkflowCondition(c);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new AvroRemoteException(
+                    "Exception getting condition by id: Message: "
+                            + e.getMessage());
+        }
+
+    }
+
+    @Override
+    public AvroWorkflow getWorkflowById(String workflowId) throws 
AvroRemoteException {
+        try {
+            Workflow workflow = repo.getWorkflowById(workflowId);
+            return AvroTypeFactory.getAvroWorkflow(workflow);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new AvroRemoteException(
+                    "Exception getting workflow by id from the repository: 
Message: "
+                            + e.getMessage());
+        }
+
+    }
+
+    @Override
+    public synchronized boolean updateMetadataForWorkflow(String 
workflowInstId, Map<String, String> metadata) throws AvroRemoteException {
+        Metadata met = new Metadata();
+        met.addMetadata(AvroTypeFactory.getMetadata(metadata));
+        return this.engine.updateMetadata(workflowInstId, met);
+    }
+
+    @Override
+    public synchronized boolean updateWorkflowInstance(AvroWorkflowInstance 
instance) throws AvroRemoteException {
+        WorkflowInstance wInst = AvroTypeFactory.getWorkflowInstance(instance);
+        return doUpdateWorkflowInstance(wInst);
+    }
+
+    @Override
+    public boolean setWorkflowInstanceCurrentTaskStartDateTime(String wInstId, 
String startDateTimeIsoStr) throws AvroRemoteException {
+        WorkflowInstance wInst = null;
+        try {
+            wInst = this.engine.getInstanceRepository()
+                    .getWorkflowInstanceById(wInstId);
+        } catch (InstanceRepositoryException e) {
+            e.printStackTrace();
+            return false;
+        }
+        wInst.setCurrentTaskStartDateTimeIsoStr(startDateTimeIsoStr);
+        return doUpdateWorkflowInstance(wInst);
+
+    }
+
+    @Override
+    public synchronized boolean 
setWorkflowInstanceCurrentTaskEndDateTime(String wInstId, String 
endDateTimeIsoStr) throws AvroRemoteException {
+        WorkflowInstance wInst = null;
+        try {
+            wInst = this.engine.getInstanceRepository()
+                    .getWorkflowInstanceById(wInstId);
+        } catch (InstanceRepositoryException e) {
+            e.printStackTrace();
+            return false;
+        }
+        wInst.setCurrentTaskEndDateTimeIsoStr(endDateTimeIsoStr);
+        return doUpdateWorkflowInstance(wInst);
+
+    }
+
+    public static void loadProperties() throws FileNotFoundException, 
IOException {
+        String configFile = System.getProperty(PROPERTIES_FILE_PROPERTY);
+        if (configFile != null) {
+            LOG.log(Level.INFO,
+                    "Loading Workflow Manager Configuration Properties from: ["
+                            + configFile + "]");
+            System.getProperties().load(new FileInputStream(new File(
+                    configFile)));
+        }
+    }
+
+
+
+    @Override
+    public synchronized boolean updateWorkflowInstanceStatus(String 
workflowInstId, String status) throws AvroRemoteException {
+        WorkflowInstance wInst = null;
+        try {
+            wInst = engine.getInstanceRepository().getWorkflowInstanceById(
+                    workflowInstId);
+        } catch (Exception e) {
+            throw new AvroRemoteException(e);
+        }
+
+        wInst.setStatus(status);
+        return doUpdateWorkflowInstance(wInst);
+
+    }
+
+
+    private static WorkflowEngine getWorkflowEngineFromProperty() {
+        return getWorkflowEngineFromClassName(System.getProperty(
+                WORKFLOW_ENGINE_FACTORY_PROPERTY,
+                ThreadPoolWorkflowEngineFactory.class.getCanonicalName()));
+    }
+
+    private static WorkflowRepository getWorkflowRepositoryFromProperty() {
+        return getWorkflowRepositoryFromClassName(System.getProperty(
+                WORKFLOW_REPOSITORY_FACTORY_PROPERTY,
+                DataSourceWorkflowRepositoryFactory.class.getCanonicalName()));
+    }
+
+    private String getHostname() {
+        try {
+            // Get hostname by textual representation of IP address
+            InetAddress addr = InetAddress.getLocalHost();
+            // Get the host name
+            String hostname = addr.getHostName();
+            return hostname;
+        } catch (UnknownHostException e) {
+        }
+        return null;
+    }
+
+    private URL safeGetUrlFromString(String urlStr) {
+        try {
+            return new URL(urlStr);
+        } catch (MalformedURLException e) {
+            return null;
+        }
+    }
+
+    private boolean doUpdateWorkflowInstance(WorkflowInstance wInst) {
+        try {
+            engine.getInstanceRepository().updateWorkflowInstance(wInst);
+            return true;
+        } catch (InstanceRepositoryException e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    private void populateWorkflows(List wInsts) {
+        if (wInsts != null && wInsts.size() > 0) {
+            for (Iterator i = wInsts.iterator(); i.hasNext();) {
+                WorkflowInstance wInst = (WorkflowInstance) i.next();
+                if(wInst.getWorkflow() == null ||
+                        (wInst.getWorkflow() != null &&
+                                (wInst.getWorkflow().getName() == null ||
+                                        wInst.getWorkflow().getId() == null))){
+                    wInst.setWorkflow(safeGetWorkflowById(wInst.getWorkflow()
+                            .getId()));
+                }
+                else{
+                    // check to see if the workflow exists in the
+                    // repo
+                    try {
+                        if(repo.getWorkflowById(wInst.getWorkflow().getId()) 
== null){
+                            repo.addWorkflow(wInst.getWorkflow());
+                        }
+                    } catch (RepositoryException e) {
+                        LOG.log(Level.WARNING, "Attempting to look up 
workflow: ["+wInst.getWorkflow()
+                                .getId()+"] in populate workflows. Message: 
"+e.getMessage());
+                        e.printStackTrace();
+                    }
+
+                }
+            }
+        }
+    }
+
+    private Workflow safeGetWorkflowById(String workflowId) {
+        try {
+            return repo.getWorkflowById(workflowId);
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOG.log(Level.WARNING, "Error getting workflow by its id: ["
+                    + workflowId + "]: Message: " + e.getMessage());
+            return new Workflow();
+        }
+    }
+
+}


Reply via email to