airavata-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dimuthu...@apache.org
Subject [airavata] branch develop updated: Workaround for workflow data model issue resulting the broken python client
Date Wed, 29 Aug 2018 05:28:31 GMT
This is an automated email from the ASF dual-hosted git repository.

dimuthuupe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/airavata.git


The following commit(s) were added to refs/heads/develop by this push:
     new b377c7d  Workaround for workflow data model issue resulting the broken python client
b377c7d is described below

commit b377c7dff620d1286f976ccf3f15ea203dd07702
Author: dimuthu <dimuthu.upeksha2@gmail.com>
AuthorDate: Wed Aug 29 01:28:04 2018 -0400

    Workaround for workflow data model issue resulting the broken python client
---
 .../resources/lib/airavata/api/Airavata-remote     |   16 +-
 .../main/resources/lib/airavata/api/Airavata.py    |  160 +--
 .../resources/lib/airavata/model/sharing/ttypes.py |   24 +-
 .../lib/airavata/model/workflow/ttypes.py          | 1378 ++++++++++++++++----
 .../airavata/model/workflow/AiravataWorkflow.java  |  282 ++--
 .../model/workflow/WorkflowConnection.java         |   56 +-
 .../airavata/model/workflow/WorkflowHandler.java   |  483 +++----
 .../workflowcatalog/WorkflowRepositoryTest.java    |    1 -
 .../airavata_workflow_model.thrift                 |  113 +-
 .../core-models/component_type.thrift              |   29 -
 .../core-models/data_block_model.thrift            |   34 -
 .../workflow_application_model.thrift              |   61 -
 .../workflow_connection_model.thrift               |   41 -
 .../workflow_handler_model.thrift                  |   70 -
 14 files changed, 1631 insertions(+), 1117 deletions(-)

diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata-remote b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata-remote
index d0013e0..f556c03 100755
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata-remote
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata-remote
@@ -181,11 +181,11 @@ if len(sys.argv) <= 1 or sys.argv[1] == '--help':
     print('  bool deleteUserStoragePreference(AuthzToken authzToken, string userId, string gatewayID, string userStorageId)')
     print('   getAllWorkflows(AuthzToken authzToken, string gatewayId)')
     print('   getLatestQueueStatuses(AuthzToken authzToken)')
-    print('  WorkflowModel getWorkflow(AuthzToken authzToken, string workflowTemplateId)')
-    print('  void deleteWorkflow(AuthzToken authzToken, string workflowTemplateId)')
-    print('  string registerWorkflow(AuthzToken authzToken, string gatewayId, WorkflowModel workflow)')
-    print('  void updateWorkflow(AuthzToken authzToken, string workflowTemplateId, WorkflowModel workflow)')
-    print('  string getWorkflowTemplateId(AuthzToken authzToken, string workflowName)')
+    print('  AiravataWorkflow getWorkflow(AuthzToken authzToken, string workflowId)')
+    print('  void deleteWorkflow(AuthzToken authzToken, string workflowId)')
+    print('  string registerWorkflow(AuthzToken authzToken, string gatewayId, AiravataWorkflow workflow)')
+    print('  void updateWorkflow(AuthzToken authzToken, string workflowId, AiravataWorkflow workflow)')
+    print('  string getWorkflowId(AuthzToken authzToken, string workflowName)')
     print('  bool isWorkflowExistWithName(AuthzToken authzToken, string workflowName)')
     print('  string registerDataProduct(AuthzToken authzToken, DataProductModel dataProductModel)')
     print('  DataProductModel getDataProduct(AuthzToken authzToken, string dataProductUri)')
@@ -1259,11 +1259,11 @@ elif cmd == 'updateWorkflow':
         sys.exit(1)
     pp.pprint(client.updateWorkflow(eval(args[0]), args[1], eval(args[2]),))
 
-elif cmd == 'getWorkflowTemplateId':
+elif cmd == 'getWorkflowId':
     if len(args) != 2:
-        print('getWorkflowTemplateId requires 2 args')
+        print('getWorkflowId requires 2 args')
         sys.exit(1)
-    pp.pprint(client.getWorkflowTemplateId(eval(args[0]), args[1],))
+    pp.pprint(client.getWorkflowId(eval(args[0]), args[1],))
 
 elif cmd == 'isWorkflowExistWithName':
     if len(args) != 2:
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata.py
index 28c624a..9a2ee64 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/api/Airavata.py
@@ -3394,7 +3394,7 @@ class Iface(object):
         """
         pass
 
-    def getWorkflow(self, authzToken, workflowTemplateId):
+    def getWorkflow(self, authzToken, workflowId):
         """
 
         API Methods Related for Work-Flow Submission Features.
@@ -3402,15 +3402,15 @@ class Iface(object):
 
         Parameters:
          - authzToken
-         - workflowTemplateId
+         - workflowId
         """
         pass
 
-    def deleteWorkflow(self, authzToken, workflowTemplateId):
+    def deleteWorkflow(self, authzToken, workflowId):
         """
         Parameters:
          - authzToken
-         - workflowTemplateId
+         - workflowId
         """
         pass
 
@@ -3423,16 +3423,16 @@ class Iface(object):
         """
         pass
 
-    def updateWorkflow(self, authzToken, workflowTemplateId, workflow):
+    def updateWorkflow(self, authzToken, workflowId, workflow):
         """
         Parameters:
          - authzToken
-         - workflowTemplateId
+         - workflowId
          - workflow
         """
         pass
 
-    def getWorkflowTemplateId(self, authzToken, workflowName):
+    def getWorkflowId(self, authzToken, workflowName):
         """
         Parameters:
          - authzToken
@@ -12379,7 +12379,7 @@ class Client(Iface):
             raise result.ae
         raise TApplicationException(TApplicationException.MISSING_RESULT, "getLatestQueueStatuses failed: unknown result")
 
-    def getWorkflow(self, authzToken, workflowTemplateId):
+    def getWorkflow(self, authzToken, workflowId):
         """
 
         API Methods Related for Work-Flow Submission Features.
@@ -12387,16 +12387,16 @@ class Client(Iface):
 
         Parameters:
          - authzToken
-         - workflowTemplateId
+         - workflowId
         """
-        self.send_getWorkflow(authzToken, workflowTemplateId)
+        self.send_getWorkflow(authzToken, workflowId)
         return self.recv_getWorkflow()
 
-    def send_getWorkflow(self, authzToken, workflowTemplateId):
+    def send_getWorkflow(self, authzToken, workflowId):
         self._oprot.writeMessageBegin('getWorkflow', TMessageType.CALL, self._seqid)
         args = getWorkflow_args()
         args.authzToken = authzToken
-        args.workflowTemplateId = workflowTemplateId
+        args.workflowId = workflowId
         args.write(self._oprot)
         self._oprot.writeMessageEnd()
         self._oprot.trans.flush()
@@ -12424,20 +12424,20 @@ class Client(Iface):
             raise result.ae
         raise TApplicationException(TApplicationException.MISSING_RESULT, "getWorkflow failed: unknown result")
 
-    def deleteWorkflow(self, authzToken, workflowTemplateId):
+    def deleteWorkflow(self, authzToken, workflowId):
         """
         Parameters:
          - authzToken
-         - workflowTemplateId
+         - workflowId
         """
-        self.send_deleteWorkflow(authzToken, workflowTemplateId)
+        self.send_deleteWorkflow(authzToken, workflowId)
         self.recv_deleteWorkflow()
 
-    def send_deleteWorkflow(self, authzToken, workflowTemplateId):
+    def send_deleteWorkflow(self, authzToken, workflowId):
         self._oprot.writeMessageBegin('deleteWorkflow', TMessageType.CALL, self._seqid)
         args = deleteWorkflow_args()
         args.authzToken = authzToken
-        args.workflowTemplateId = workflowTemplateId
+        args.workflowId = workflowId
         args.write(self._oprot)
         self._oprot.writeMessageEnd()
         self._oprot.trans.flush()
@@ -12506,21 +12506,21 @@ class Client(Iface):
             raise result.ae
         raise TApplicationException(TApplicationException.MISSING_RESULT, "registerWorkflow failed: unknown result")
 
-    def updateWorkflow(self, authzToken, workflowTemplateId, workflow):
+    def updateWorkflow(self, authzToken, workflowId, workflow):
         """
         Parameters:
          - authzToken
-         - workflowTemplateId
+         - workflowId
          - workflow
         """
-        self.send_updateWorkflow(authzToken, workflowTemplateId, workflow)
+        self.send_updateWorkflow(authzToken, workflowId, workflow)
         self.recv_updateWorkflow()
 
-    def send_updateWorkflow(self, authzToken, workflowTemplateId, workflow):
+    def send_updateWorkflow(self, authzToken, workflowId, workflow):
         self._oprot.writeMessageBegin('updateWorkflow', TMessageType.CALL, self._seqid)
         args = updateWorkflow_args()
         args.authzToken = authzToken
-        args.workflowTemplateId = workflowTemplateId
+        args.workflowId = workflowId
         args.workflow = workflow
         args.write(self._oprot)
         self._oprot.writeMessageEnd()
@@ -12547,25 +12547,25 @@ class Client(Iface):
             raise result.ae
         return
 
-    def getWorkflowTemplateId(self, authzToken, workflowName):
+    def getWorkflowId(self, authzToken, workflowName):
         """
         Parameters:
          - authzToken
          - workflowName
         """
-        self.send_getWorkflowTemplateId(authzToken, workflowName)
-        return self.recv_getWorkflowTemplateId()
+        self.send_getWorkflowId(authzToken, workflowName)
+        return self.recv_getWorkflowId()
 
-    def send_getWorkflowTemplateId(self, authzToken, workflowName):
-        self._oprot.writeMessageBegin('getWorkflowTemplateId', TMessageType.CALL, self._seqid)
-        args = getWorkflowTemplateId_args()
+    def send_getWorkflowId(self, authzToken, workflowName):
+        self._oprot.writeMessageBegin('getWorkflowId', TMessageType.CALL, self._seqid)
+        args = getWorkflowId_args()
         args.authzToken = authzToken
         args.workflowName = workflowName
         args.write(self._oprot)
         self._oprot.writeMessageEnd()
         self._oprot.trans.flush()
 
-    def recv_getWorkflowTemplateId(self):
+    def recv_getWorkflowId(self):
         iprot = self._iprot
         (fname, mtype, rseqid) = iprot.readMessageBegin()
         if mtype == TMessageType.EXCEPTION:
@@ -12573,7 +12573,7 @@ class Client(Iface):
             x.read(iprot)
             iprot.readMessageEnd()
             raise x
-        result = getWorkflowTemplateId_result()
+        result = getWorkflowId_result()
         result.read(iprot)
         iprot.readMessageEnd()
         if result.success is not None:
@@ -12586,7 +12586,7 @@ class Client(Iface):
             raise result.ase
         if result.ae is not None:
             raise result.ae
-        raise TApplicationException(TApplicationException.MISSING_RESULT, "getWorkflowTemplateId failed: unknown result")
+        raise TApplicationException(TApplicationException.MISSING_RESULT, "getWorkflowId failed: unknown result")
 
     def isWorkflowExistWithName(self, authzToken, workflowName):
         """
@@ -13924,7 +13924,7 @@ class Processor(Iface, TProcessor):
         self._processMap["deleteWorkflow"] = Processor.process_deleteWorkflow
         self._processMap["registerWorkflow"] = Processor.process_registerWorkflow
         self._processMap["updateWorkflow"] = Processor.process_updateWorkflow
-        self._processMap["getWorkflowTemplateId"] = Processor.process_getWorkflowTemplateId
+        self._processMap["getWorkflowId"] = Processor.process_getWorkflowId
         self._processMap["isWorkflowExistWithName"] = Processor.process_isWorkflowExistWithName
         self._processMap["registerDataProduct"] = Processor.process_registerDataProduct
         self._processMap["getDataProduct"] = Processor.process_getDataProduct
@@ -18857,7 +18857,7 @@ class Processor(Iface, TProcessor):
         iprot.readMessageEnd()
         result = getWorkflow_result()
         try:
-            result.success = self._handler.getWorkflow(args.authzToken, args.workflowTemplateId)
+            result.success = self._handler.getWorkflow(args.authzToken, args.workflowId)
             msg_type = TMessageType.REPLY
         except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
             raise
@@ -18888,7 +18888,7 @@ class Processor(Iface, TProcessor):
         iprot.readMessageEnd()
         result = deleteWorkflow_result()
         try:
-            self._handler.deleteWorkflow(args.authzToken, args.workflowTemplateId)
+            self._handler.deleteWorkflow(args.authzToken, args.workflowId)
             msg_type = TMessageType.REPLY
         except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
             raise
@@ -18950,7 +18950,7 @@ class Processor(Iface, TProcessor):
         iprot.readMessageEnd()
         result = updateWorkflow_result()
         try:
-            self._handler.updateWorkflow(args.authzToken, args.workflowTemplateId, args.workflow)
+            self._handler.updateWorkflow(args.authzToken, args.workflowId, args.workflow)
             msg_type = TMessageType.REPLY
         except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
             raise
@@ -18975,13 +18975,13 @@ class Processor(Iface, TProcessor):
         oprot.writeMessageEnd()
         oprot.trans.flush()
 
-    def process_getWorkflowTemplateId(self, seqid, iprot, oprot):
-        args = getWorkflowTemplateId_args()
+    def process_getWorkflowId(self, seqid, iprot, oprot):
+        args = getWorkflowId_args()
         args.read(iprot)
         iprot.readMessageEnd()
-        result = getWorkflowTemplateId_result()
+        result = getWorkflowId_result()
         try:
-            result.success = self._handler.getWorkflowTemplateId(args.authzToken, args.workflowName)
+            result.success = self._handler.getWorkflowId(args.authzToken, args.workflowName)
             msg_type = TMessageType.REPLY
         except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
             raise
@@ -19001,7 +19001,7 @@ class Processor(Iface, TProcessor):
             msg_type = TMessageType.EXCEPTION
             logging.exception(ex)
             result = TApplicationException(TApplicationException.INTERNAL_ERROR, 'Internal error')
-        oprot.writeMessageBegin("getWorkflowTemplateId", msg_type, seqid)
+        oprot.writeMessageBegin("getWorkflowId", msg_type, seqid)
         result.write(oprot)
         oprot.writeMessageEnd()
         oprot.trans.flush()
@@ -51703,18 +51703,18 @@ class getWorkflow_args(object):
     """
     Attributes:
      - authzToken
-     - workflowTemplateId
+     - workflowId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'workflowTemplateId', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'workflowId', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, workflowTemplateId=None,):
+    def __init__(self, authzToken=None, workflowId=None,):
         self.authzToken = authzToken
-        self.workflowTemplateId = workflowTemplateId
+        self.workflowId = workflowId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -51733,7 +51733,7 @@ class getWorkflow_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.workflowTemplateId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.workflowId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -51750,9 +51750,9 @@ class getWorkflow_args(object):
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.workflowTemplateId is not None:
-            oprot.writeFieldBegin('workflowTemplateId', TType.STRING, 2)
-            oprot.writeString(self.workflowTemplateId.encode('utf-8') if sys.version_info[0] == 2 else self.workflowTemplateId)
+        if self.workflowId is not None:
+            oprot.writeFieldBegin('workflowId', TType.STRING, 2)
+            oprot.writeString(self.workflowId.encode('utf-8') if sys.version_info[0] == 2 else self.workflowId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -51760,8 +51760,8 @@ class getWorkflow_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.workflowTemplateId is None:
-            raise TProtocolException(message='Required field workflowTemplateId is unset!')
+        if self.workflowId is None:
+            raise TProtocolException(message='Required field workflowId is unset!')
         return
 
     def __repr__(self):
@@ -51787,7 +51787,7 @@ class getWorkflow_result(object):
     """
 
     thrift_spec = (
-        (0, TType.STRUCT, 'success', (airavata.model.workflow.ttypes.WorkflowModel, airavata.model.workflow.ttypes.WorkflowModel.thrift_spec), None, ),  # 0
+        (0, TType.STRUCT, 'success', (airavata.model.workflow.ttypes.AiravataWorkflow, airavata.model.workflow.ttypes.AiravataWorkflow.thrift_spec), None, ),  # 0
         (1, TType.STRUCT, 'ire', (airavata.api.error.ttypes.InvalidRequestException, airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ),  # 1
         (2, TType.STRUCT, 'ace', (airavata.api.error.ttypes.AiravataClientException, airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ),  # 2
         (3, TType.STRUCT, 'ase', (airavata.api.error.ttypes.AiravataSystemException, airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ),  # 3
@@ -51812,7 +51812,7 @@ class getWorkflow_result(object):
                 break
             if fid == 0:
                 if ftype == TType.STRUCT:
-                    self.success = airavata.model.workflow.ttypes.WorkflowModel()
+                    self.success = airavata.model.workflow.ttypes.AiravataWorkflow()
                     self.success.read(iprot)
                 else:
                     iprot.skip(ftype)
@@ -51892,18 +51892,18 @@ class deleteWorkflow_args(object):
     """
     Attributes:
      - authzToken
-     - workflowTemplateId
+     - workflowId
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'workflowTemplateId', 'UTF8', None, ),  # 2
+        (2, TType.STRING, 'workflowId', 'UTF8', None, ),  # 2
     )
 
-    def __init__(self, authzToken=None, workflowTemplateId=None,):
+    def __init__(self, authzToken=None, workflowId=None,):
         self.authzToken = authzToken
-        self.workflowTemplateId = workflowTemplateId
+        self.workflowId = workflowId
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -51922,7 +51922,7 @@ class deleteWorkflow_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.workflowTemplateId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.workflowId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             else:
@@ -51939,9 +51939,9 @@ class deleteWorkflow_args(object):
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.workflowTemplateId is not None:
-            oprot.writeFieldBegin('workflowTemplateId', TType.STRING, 2)
-            oprot.writeString(self.workflowTemplateId.encode('utf-8') if sys.version_info[0] == 2 else self.workflowTemplateId)
+        if self.workflowId is not None:
+            oprot.writeFieldBegin('workflowId', TType.STRING, 2)
+            oprot.writeString(self.workflowId.encode('utf-8') if sys.version_info[0] == 2 else self.workflowId)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -51949,8 +51949,8 @@ class deleteWorkflow_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.workflowTemplateId is None:
-            raise TProtocolException(message='Required field workflowTemplateId is unset!')
+        if self.workflowId is None:
+            raise TProtocolException(message='Required field workflowId is unset!')
         return
 
     def __repr__(self):
@@ -52077,7 +52077,7 @@ class registerWorkflow_args(object):
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
         (2, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 2
-        (3, TType.STRUCT, 'workflow', (airavata.model.workflow.ttypes.WorkflowModel, airavata.model.workflow.ttypes.WorkflowModel.thrift_spec), None, ),  # 3
+        (3, TType.STRUCT, 'workflow', (airavata.model.workflow.ttypes.AiravataWorkflow, airavata.model.workflow.ttypes.AiravataWorkflow.thrift_spec), None, ),  # 3
     )
 
     def __init__(self, authzToken=None, gatewayId=None, workflow=None,):
@@ -52107,7 +52107,7 @@ class registerWorkflow_args(object):
                     iprot.skip(ftype)
             elif fid == 3:
                 if ftype == TType.STRUCT:
-                    self.workflow = airavata.model.workflow.ttypes.WorkflowModel()
+                    self.workflow = airavata.model.workflow.ttypes.AiravataWorkflow()
                     self.workflow.read(iprot)
                 else:
                     iprot.skip(ftype)
@@ -52272,20 +52272,20 @@ class updateWorkflow_args(object):
     """
     Attributes:
      - authzToken
-     - workflowTemplateId
+     - workflowId
      - workflow
     """
 
     thrift_spec = (
         None,  # 0
         (1, TType.STRUCT, 'authzToken', (airavata.model.security.ttypes.AuthzToken, airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ),  # 1
-        (2, TType.STRING, 'workflowTemplateId', 'UTF8', None, ),  # 2
-        (3, TType.STRUCT, 'workflow', (airavata.model.workflow.ttypes.WorkflowModel, airavata.model.workflow.ttypes.WorkflowModel.thrift_spec), None, ),  # 3
+        (2, TType.STRING, 'workflowId', 'UTF8', None, ),  # 2
+        (3, TType.STRUCT, 'workflow', (airavata.model.workflow.ttypes.AiravataWorkflow, airavata.model.workflow.ttypes.AiravataWorkflow.thrift_spec), None, ),  # 3
     )
 
-    def __init__(self, authzToken=None, workflowTemplateId=None, workflow=None,):
+    def __init__(self, authzToken=None, workflowId=None, workflow=None,):
         self.authzToken = authzToken
-        self.workflowTemplateId = workflowTemplateId
+        self.workflowId = workflowId
         self.workflow = workflow
 
     def read(self, iprot):
@@ -52305,12 +52305,12 @@ class updateWorkflow_args(object):
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.workflowTemplateId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.workflowId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
                 if ftype == TType.STRUCT:
-                    self.workflow = airavata.model.workflow.ttypes.WorkflowModel()
+                    self.workflow = airavata.model.workflow.ttypes.AiravataWorkflow()
                     self.workflow.read(iprot)
                 else:
                     iprot.skip(ftype)
@@ -52328,9 +52328,9 @@ class updateWorkflow_args(object):
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
             oprot.writeFieldEnd()
-        if self.workflowTemplateId is not None:
-            oprot.writeFieldBegin('workflowTemplateId', TType.STRING, 2)
-            oprot.writeString(self.workflowTemplateId.encode('utf-8') if sys.version_info[0] == 2 else self.workflowTemplateId)
+        if self.workflowId is not None:
+            oprot.writeFieldBegin('workflowId', TType.STRING, 2)
+            oprot.writeString(self.workflowId.encode('utf-8') if sys.version_info[0] == 2 else self.workflowId)
             oprot.writeFieldEnd()
         if self.workflow is not None:
             oprot.writeFieldBegin('workflow', TType.STRUCT, 3)
@@ -52342,8 +52342,8 @@ class updateWorkflow_args(object):
     def validate(self):
         if self.authzToken is None:
             raise TProtocolException(message='Required field authzToken is unset!')
-        if self.workflowTemplateId is None:
-            raise TProtocolException(message='Required field workflowTemplateId is unset!')
+        if self.workflowId is None:
+            raise TProtocolException(message='Required field workflowId is unset!')
         if self.workflow is None:
             raise TProtocolException(message='Required field workflow is unset!')
         return
@@ -52460,7 +52460,7 @@ class updateWorkflow_result(object):
         return not (self == other)
 
 
-class getWorkflowTemplateId_args(object):
+class getWorkflowId_args(object):
     """
     Attributes:
      - authzToken
@@ -52506,7 +52506,7 @@ class getWorkflowTemplateId_args(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getWorkflowTemplateId_args')
+        oprot.writeStructBegin('getWorkflowId_args')
         if self.authzToken is not None:
             oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
             self.authzToken.write(oprot)
@@ -52537,7 +52537,7 @@ class getWorkflowTemplateId_args(object):
         return not (self == other)
 
 
-class getWorkflowTemplateId_result(object):
+class getWorkflowId_result(object):
     """
     Attributes:
      - success
@@ -52609,7 +52609,7 @@ class getWorkflowTemplateId_result(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('getWorkflowTemplateId_result')
+        oprot.writeStructBegin('getWorkflowId_result')
         if self.success is not None:
             oprot.writeFieldBegin('success', TType.STRING, 0)
             oprot.writeString(self.success.encode('utf-8') if sys.version_info[0] == 2 else self.success)
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/sharing/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/sharing/ttypes.py
index 4d84e51..1f2f0e9 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/sharing/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/sharing/ttypes.py
@@ -563,6 +563,7 @@ class UserGroup(object):
      <li><b>groupCardinality</b> : Group cardinality (SINGLE_USER, MULTI_USER)</li>
      <li>createdTime : Will be set by the system</li>
      <li>updatedTime : Will be set by the system</li>
+     <li>groupAdmins : Admins for the group</li>
      
 
     Attributes:
@@ -575,6 +576,7 @@ class UserGroup(object):
      - groupCardinality
      - createdTime
      - updatedTime
+     - groupAdmins
     """
 
     thrift_spec = (
@@ -588,9 +590,10 @@ class UserGroup(object):
         (7, TType.I32, 'groupCardinality', None, None, ),  # 7
         (8, TType.I64, 'createdTime', None, None, ),  # 8
         (9, TType.I64, 'updatedTime', None, None, ),  # 9
+        (10, TType.LIST, 'groupAdmins', (TType.STRUCT, (GroupAdmin, GroupAdmin.thrift_spec), False), None, ),  # 10
     )
 
-    def __init__(self, groupId=None, domainId=None, name=None, description=None, ownerId=None, groupType=None, groupCardinality=None, createdTime=None, updatedTime=None,):
+    def __init__(self, groupId=None, domainId=None, name=None, description=None, ownerId=None, groupType=None, groupCardinality=None, createdTime=None, updatedTime=None, groupAdmins=None,):
         self.groupId = groupId
         self.domainId = domainId
         self.name = name
@@ -600,6 +603,7 @@ class UserGroup(object):
         self.groupCardinality = groupCardinality
         self.createdTime = createdTime
         self.updatedTime = updatedTime
+        self.groupAdmins = groupAdmins
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -655,6 +659,17 @@ class UserGroup(object):
                     self.updatedTime = iprot.readI64()
                 else:
                     iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.LIST:
+                    self.groupAdmins = []
+                    (_etype3, _size0) = iprot.readListBegin()
+                    for _i4 in range(_size0):
+                        _elem5 = GroupAdmin()
+                        _elem5.read(iprot)
+                        self.groupAdmins.append(_elem5)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
             else:
                 iprot.skip(ftype)
             iprot.readFieldEnd()
@@ -701,6 +716,13 @@ class UserGroup(object):
             oprot.writeFieldBegin('updatedTime', TType.I64, 9)
             oprot.writeI64(self.updatedTime)
             oprot.writeFieldEnd()
+        if self.groupAdmins is not None:
+            oprot.writeFieldBegin('groupAdmins', TType.LIST, 10)
+            oprot.writeListBegin(TType.STRUCT, len(self.groupAdmins))
+            for iter6 in self.groupAdmins:
+                iter6.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
diff --git a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/workflow/ttypes.py b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/workflow/ttypes.py
index 76d2765..7fe9357 100644
--- a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/workflow/ttypes.py
+++ b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/airavata/model/workflow/ttypes.py
@@ -9,109 +9,187 @@
 from thrift.Thrift import TType, TMessageType, TFrozenDict, TException, TApplicationException
 from thrift.protocol.TProtocol import TProtocolException
 import sys
-import airavata.model.application.io.ttypes
 import airavata.model.commons.ttypes
+import airavata.model.application.io.ttypes
 
 from thrift.transport import TTransport
 
 
 class WorkflowState(object):
     CREATED = 0
-    STARTED = 1
-    EXECUTING = 2
-    COMPLETED = 3
-    FAILED = 4
-    CANCELLING = 5
+    VALIDATED = 1
+    SCHEDULED = 2
+    LAUNCHED = 3
+    EXECUTING = 4
+    PAUSING = 5
+    PAUSED = 6
+    RESTARTING = 7
+    CANCELING = 8
+    CANCELED = 9
+    COMPLETED = 10
+    FAILED = 11
+
+    _VALUES_TO_NAMES = {
+        0: "CREATED",
+        1: "VALIDATED",
+        2: "SCHEDULED",
+        3: "LAUNCHED",
+        4: "EXECUTING",
+        5: "PAUSING",
+        6: "PAUSED",
+        7: "RESTARTING",
+        8: "CANCELING",
+        9: "CANCELED",
+        10: "COMPLETED",
+        11: "FAILED",
+    }
+
+    _NAMES_TO_VALUES = {
+        "CREATED": 0,
+        "VALIDATED": 1,
+        "SCHEDULED": 2,
+        "LAUNCHED": 3,
+        "EXECUTING": 4,
+        "PAUSING": 5,
+        "PAUSED": 6,
+        "RESTARTING": 7,
+        "CANCELING": 8,
+        "CANCELED": 9,
+        "COMPLETED": 10,
+        "FAILED": 11,
+    }
+
+
+class ApplicationState(object):
+    CREATED = 0
+    VALIDATED = 1
+    SCHEDULED = 2
+    LAUNCHED = 3
+    EXECUTING = 4
+    CANCELING = 5
     CANCELED = 6
+    COMPLETED = 7
+    FAILED = 8
 
     _VALUES_TO_NAMES = {
         0: "CREATED",
-        1: "STARTED",
-        2: "EXECUTING",
-        3: "COMPLETED",
-        4: "FAILED",
-        5: "CANCELLING",
+        1: "VALIDATED",
+        2: "SCHEDULED",
+        3: "LAUNCHED",
+        4: "EXECUTING",
+        5: "CANCELING",
         6: "CANCELED",
+        7: "COMPLETED",
+        8: "FAILED",
     }
 
     _NAMES_TO_VALUES = {
         "CREATED": 0,
-        "STARTED": 1,
-        "EXECUTING": 2,
-        "COMPLETED": 3,
-        "FAILED": 4,
-        "CANCELLING": 5,
+        "VALIDATED": 1,
+        "SCHEDULED": 2,
+        "LAUNCHED": 3,
+        "EXECUTING": 4,
+        "CANCELING": 5,
         "CANCELED": 6,
+        "COMPLETED": 7,
+        "FAILED": 8,
     }
 
 
-class ComponentState(object):
+class HandlerType(object):
+    FLOW_STARTER = 0
+    FLOW_TERMINATOR = 1
+    DOWHILE_LOOP = 2
+    FOREACH_LOOP = 3
+
+    _VALUES_TO_NAMES = {
+        0: "FLOW_STARTER",
+        1: "FLOW_TERMINATOR",
+        2: "DOWHILE_LOOP",
+        3: "FOREACH_LOOP",
+    }
+
+    _NAMES_TO_VALUES = {
+        "FLOW_STARTER": 0,
+        "FLOW_TERMINATOR": 1,
+        "DOWHILE_LOOP": 2,
+        "FOREACH_LOOP": 3,
+    }
+
+
+class HandlerState(object):
     CREATED = 0
-    WAITING = 1
-    READY = 2
-    RUNNING = 3
-    COMPLETED = 4
-    FAILED = 5
+    VALIDATED = 1
+    SCHEDULED = 2
+    LAUNCHED = 3
+    EXECUTING = 4
+    CANCELING = 5
     CANCELED = 6
+    COMPLETED = 7
+    FAILED = 8
 
     _VALUES_TO_NAMES = {
         0: "CREATED",
-        1: "WAITING",
-        2: "READY",
-        3: "RUNNING",
-        4: "COMPLETED",
-        5: "FAILED",
+        1: "VALIDATED",
+        2: "SCHEDULED",
+        3: "LAUNCHED",
+        4: "EXECUTING",
+        5: "CANCELING",
         6: "CANCELED",
+        7: "COMPLETED",
+        8: "FAILED",
     }
 
     _NAMES_TO_VALUES = {
         "CREATED": 0,
-        "WAITING": 1,
-        "READY": 2,
-        "RUNNING": 3,
-        "COMPLETED": 4,
-        "FAILED": 5,
+        "VALIDATED": 1,
+        "SCHEDULED": 2,
+        "LAUNCHED": 3,
+        "EXECUTING": 4,
+        "CANCELING": 5,
         "CANCELED": 6,
+        "COMPLETED": 7,
+        "FAILED": 8,
     }
 
 
-class WorkflowModel(object):
+class ComponentType(object):
+    APPLICATION = 0
+    HANDLER = 1
+
+    _VALUES_TO_NAMES = {
+        0: "APPLICATION",
+        1: "HANDLER",
+    }
+
+    _NAMES_TO_VALUES = {
+        "APPLICATION": 0,
+        "HANDLER": 1,
+    }
+
+
+class WorkflowStatus(object):
     """
     Attributes:
-     - templateId
-     - name
-     - graph
-     - gatewayId
-     - createdUser
-     - image
-     - workflowInputs
-     - workflowOutputs
-     - creationTime
+     - id
+     - state
+     - description
+     - updatedAt
     """
 
     thrift_spec = (
         None,  # 0
-        (1, TType.STRING, 'templateId', 'UTF8', "DO_NOT_SET_AT_CLIENTS", ),  # 1
-        (2, TType.STRING, 'name', 'UTF8', None, ),  # 2
-        (3, TType.STRING, 'graph', 'UTF8', None, ),  # 3
-        (4, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 4
-        (5, TType.STRING, 'createdUser', 'UTF8', None, ),  # 5
-        (6, TType.STRING, 'image', 'BINARY', None, ),  # 6
-        (7, TType.LIST, 'workflowInputs', (TType.STRUCT, (airavata.model.application.io.ttypes.InputDataObjectType, airavata.model.application.io.ttypes.InputDataObjectType.thrift_spec), False), None, ),  # 7
-        (8, TType.LIST, 'workflowOutputs', (TType.STRUCT, (airavata.model.application.io.ttypes.OutputDataObjectType, airavata.model.application.io.ttypes.OutputDataObjectType.thrift_spec), False), None, ),  # 8
-        (9, TType.I64, 'creationTime', None, None, ),  # 9
+        (1, TType.STRING, 'id', 'UTF8', None, ),  # 1
+        (2, TType.I32, 'state', None, None, ),  # 2
+        (3, TType.STRING, 'description', 'UTF8', None, ),  # 3
+        (4, TType.I64, 'updatedAt', None, None, ),  # 4
     )
 
-    def __init__(self, templateId=thrift_spec[1][4], name=None, graph=None, gatewayId=None, createdUser=None, image=None, workflowInputs=None, workflowOutputs=None, creationTime=None,):
-        self.templateId = templateId
-        self.name = name
-        self.graph = graph
-        self.gatewayId = gatewayId
-        self.createdUser = createdUser
-        self.image = image
-        self.workflowInputs = workflowInputs
-        self.workflowOutputs = workflowOutputs
-        self.creationTime = creationTime
+    def __init__(self, id=None, state=None, description=None, updatedAt=None,):
+        self.id = id
+        self.state = state
+        self.description = description
+        self.updatedAt = updatedAt
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -124,59 +202,364 @@ class WorkflowModel(object):
                 break
             if fid == 1:
                 if ftype == TType.STRING:
-                    self.templateId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
+                if ftype == TType.I32:
+                    self.state = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
                 if ftype == TType.STRING:
-                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('WorkflowStatus')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
+            oprot.writeFieldEnd()
+        if self.state is not None:
+            oprot.writeFieldBegin('state', TType.I32, 2)
+            oprot.writeI32(self.state)
+            oprot.writeFieldEnd()
+        if self.description is not None:
+            oprot.writeFieldBegin('description', TType.STRING, 3)
+            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
+            oprot.writeFieldEnd()
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 4)
+            oprot.writeI64(self.updatedAt)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.state is None:
+            raise TProtocolException(message='Required field state is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class NotificationEmail(object):
+    """
+    Attributes:
+     - email
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'email', 'UTF8', None, ),  # 1
+    )
+
+    def __init__(self, email=None,):
+        self.email = email
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.email = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('NotificationEmail')
+        if self.email is not None:
+            oprot.writeFieldBegin('email', TType.STRING, 1)
+            oprot.writeString(self.email.encode('utf-8') if sys.version_info[0] == 2 else self.email)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.email is None:
+            raise TProtocolException(message='Required field email is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class ApplicationStatus(object):
+    """
+    Attributes:
+     - id
+     - state
+     - description
+     - updatedAt
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'id', 'UTF8', None, ),  # 1
+        (2, TType.I32, 'state', None, None, ),  # 2
+        (3, TType.STRING, 'description', 'UTF8', None, ),  # 3
+        (4, TType.I64, 'updatedAt', None, None, ),  # 4
+    )
+
+    def __init__(self, id=None, state=None, description=None, updatedAt=None,):
+        self.id = id
+        self.state = state
+        self.description = description
+        self.updatedAt = updatedAt
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.I32:
+                    self.state = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 3:
+                if ftype == TType.STRING:
+                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            else:
+                iprot.skip(ftype)
+            iprot.readFieldEnd()
+        iprot.readStructEnd()
+
+    def write(self, oprot):
+        if oprot._fast_encode is not None and self.thrift_spec is not None:
+            oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
+            return
+        oprot.writeStructBegin('ApplicationStatus')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
+            oprot.writeFieldEnd()
+        if self.state is not None:
+            oprot.writeFieldBegin('state', TType.I32, 2)
+            oprot.writeI32(self.state)
+            oprot.writeFieldEnd()
+        if self.description is not None:
+            oprot.writeFieldBegin('description', TType.STRING, 3)
+            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
+            oprot.writeFieldEnd()
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 4)
+            oprot.writeI64(self.updatedAt)
+            oprot.writeFieldEnd()
+        oprot.writeFieldStop()
+        oprot.writeStructEnd()
+
+    def validate(self):
+        if self.state is None:
+            raise TProtocolException(message='Required field state is unset!')
+        return
+
+    def __repr__(self):
+        L = ['%s=%r' % (key, value)
+             for key, value in self.__dict__.items()]
+        return '%s(%s)' % (self.__class__.__name__, ', '.join(L))
+
+    def __eq__(self, other):
+        return isinstance(other, self.__class__) and self.__dict__ == other.__dict__
+
+    def __ne__(self, other):
+        return not (self == other)
+
+
+class WorkflowApplication(object):
+    """
+    Attributes:
+     - id
+     - belongsToMainWorkflow
+     - applicationInterfaceId
+     - computeResourceId
+     - queueName
+     - nodeCount
+     - coreCount
+     - wallTimeLimit
+     - physicalMemory
+     - statuses
+     - errors
+     - createdAt
+     - updatedAt
+    """
+
+    thrift_spec = (
+        None,  # 0
+        (1, TType.STRING, 'id', 'UTF8', None, ),  # 1
+        (2, TType.BOOL, 'belongsToMainWorkflow', None, None, ),  # 2
+        (3, TType.STRING, 'applicationInterfaceId', 'UTF8', None, ),  # 3
+        (4, TType.STRING, 'computeResourceId', 'UTF8', None, ),  # 4
+        (5, TType.STRING, 'queueName', 'UTF8', None, ),  # 5
+        (6, TType.I32, 'nodeCount', None, None, ),  # 6
+        (7, TType.I32, 'coreCount', None, None, ),  # 7
+        (8, TType.I32, 'wallTimeLimit', None, None, ),  # 8
+        (9, TType.I32, 'physicalMemory', None, None, ),  # 9
+        (10, TType.LIST, 'statuses', (TType.STRUCT, (ApplicationStatus, ApplicationStatus.thrift_spec), False), None, ),  # 10
+        (11, TType.LIST, 'errors', (TType.STRUCT, (airavata.model.commons.ttypes.ErrorModel, airavata.model.commons.ttypes.ErrorModel.thrift_spec), False), None, ),  # 11
+        (12, TType.I64, 'createdAt', None, None, ),  # 12
+        (13, TType.I64, 'updatedAt', None, None, ),  # 13
+    )
+
+    def __init__(self, id=None, belongsToMainWorkflow=None, applicationInterfaceId=None, computeResourceId=None, queueName=None, nodeCount=None, coreCount=None, wallTimeLimit=None, physicalMemory=None, statuses=None, errors=None, createdAt=None, updatedAt=None,):
+        self.id = id
+        self.belongsToMainWorkflow = belongsToMainWorkflow
+        self.applicationInterfaceId = applicationInterfaceId
+        self.computeResourceId = computeResourceId
+        self.queueName = queueName
+        self.nodeCount = nodeCount
+        self.coreCount = coreCount
+        self.wallTimeLimit = wallTimeLimit
+        self.physicalMemory = physicalMemory
+        self.statuses = statuses
+        self.errors = errors
+        self.createdAt = createdAt
+        self.updatedAt = updatedAt
+
+    def read(self, iprot):
+        if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
+            iprot._fast_decode(self, iprot, (self.__class__, self.thrift_spec))
+            return
+        iprot.readStructBegin()
+        while True:
+            (fname, ftype, fid) = iprot.readFieldBegin()
+            if ftype == TType.STOP:
+                break
+            if fid == 1:
+                if ftype == TType.STRING:
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 2:
+                if ftype == TType.BOOL:
+                    self.belongsToMainWorkflow = iprot.readBool()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
                 if ftype == TType.STRING:
-                    self.graph = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.applicationInterfaceId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 4:
                 if ftype == TType.STRING:
-                    self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.computeResourceId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 5:
                 if ftype == TType.STRING:
-                    self.createdUser = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.queueName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 6:
-                if ftype == TType.STRING:
-                    self.image = iprot.readBinary()
+                if ftype == TType.I32:
+                    self.nodeCount = iprot.readI32()
                 else:
                     iprot.skip(ftype)
             elif fid == 7:
+                if ftype == TType.I32:
+                    self.coreCount = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.I32:
+                    self.wallTimeLimit = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.I32:
+                    self.physicalMemory = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
                 if ftype == TType.LIST:
-                    self.workflowInputs = []
+                    self.statuses = []
                     (_etype3, _size0) = iprot.readListBegin()
                     for _i4 in range(_size0):
-                        _elem5 = airavata.model.application.io.ttypes.InputDataObjectType()
+                        _elem5 = ApplicationStatus()
                         _elem5.read(iprot)
-                        self.workflowInputs.append(_elem5)
+                        self.statuses.append(_elem5)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
-            elif fid == 8:
+            elif fid == 11:
                 if ftype == TType.LIST:
-                    self.workflowOutputs = []
+                    self.errors = []
                     (_etype9, _size6) = iprot.readListBegin()
                     for _i10 in range(_size6):
-                        _elem11 = airavata.model.application.io.ttypes.OutputDataObjectType()
+                        _elem11 = airavata.model.commons.ttypes.ErrorModel()
                         _elem11.read(iprot)
-                        self.workflowOutputs.append(_elem11)
+                        self.errors.append(_elem11)
                     iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
-            elif fid == 9:
+            elif fid == 12:
                 if ftype == TType.I64:
-                    self.creationTime = iprot.readI64()
+                    self.createdAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 13:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
                 else:
                     iprot.skip(ftype)
             else:
@@ -188,63 +571,73 @@ class WorkflowModel(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('WorkflowModel')
-        if self.templateId is not None:
-            oprot.writeFieldBegin('templateId', TType.STRING, 1)
-            oprot.writeString(self.templateId.encode('utf-8') if sys.version_info[0] == 2 else self.templateId)
+        oprot.writeStructBegin('WorkflowApplication')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
             oprot.writeFieldEnd()
-        if self.name is not None:
-            oprot.writeFieldBegin('name', TType.STRING, 2)
-            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
+        if self.belongsToMainWorkflow is not None:
+            oprot.writeFieldBegin('belongsToMainWorkflow', TType.BOOL, 2)
+            oprot.writeBool(self.belongsToMainWorkflow)
             oprot.writeFieldEnd()
-        if self.graph is not None:
-            oprot.writeFieldBegin('graph', TType.STRING, 3)
-            oprot.writeString(self.graph.encode('utf-8') if sys.version_info[0] == 2 else self.graph)
+        if self.applicationInterfaceId is not None:
+            oprot.writeFieldBegin('applicationInterfaceId', TType.STRING, 3)
+            oprot.writeString(self.applicationInterfaceId.encode('utf-8') if sys.version_info[0] == 2 else self.applicationInterfaceId)
             oprot.writeFieldEnd()
-        if self.gatewayId is not None:
-            oprot.writeFieldBegin('gatewayId', TType.STRING, 4)
-            oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
+        if self.computeResourceId is not None:
+            oprot.writeFieldBegin('computeResourceId', TType.STRING, 4)
+            oprot.writeString(self.computeResourceId.encode('utf-8') if sys.version_info[0] == 2 else self.computeResourceId)
+            oprot.writeFieldEnd()
+        if self.queueName is not None:
+            oprot.writeFieldBegin('queueName', TType.STRING, 5)
+            oprot.writeString(self.queueName.encode('utf-8') if sys.version_info[0] == 2 else self.queueName)
             oprot.writeFieldEnd()
-        if self.createdUser is not None:
-            oprot.writeFieldBegin('createdUser', TType.STRING, 5)
-            oprot.writeString(self.createdUser.encode('utf-8') if sys.version_info[0] == 2 else self.createdUser)
+        if self.nodeCount is not None:
+            oprot.writeFieldBegin('nodeCount', TType.I32, 6)
+            oprot.writeI32(self.nodeCount)
             oprot.writeFieldEnd()
-        if self.image is not None:
-            oprot.writeFieldBegin('image', TType.STRING, 6)
-            oprot.writeBinary(self.image)
+        if self.coreCount is not None:
+            oprot.writeFieldBegin('coreCount', TType.I32, 7)
+            oprot.writeI32(self.coreCount)
             oprot.writeFieldEnd()
-        if self.workflowInputs is not None:
-            oprot.writeFieldBegin('workflowInputs', TType.LIST, 7)
-            oprot.writeListBegin(TType.STRUCT, len(self.workflowInputs))
-            for iter12 in self.workflowInputs:
+        if self.wallTimeLimit is not None:
+            oprot.writeFieldBegin('wallTimeLimit', TType.I32, 8)
+            oprot.writeI32(self.wallTimeLimit)
+            oprot.writeFieldEnd()
+        if self.physicalMemory is not None:
+            oprot.writeFieldBegin('physicalMemory', TType.I32, 9)
+            oprot.writeI32(self.physicalMemory)
+            oprot.writeFieldEnd()
+        if self.statuses is not None:
+            oprot.writeFieldBegin('statuses', TType.LIST, 10)
+            oprot.writeListBegin(TType.STRUCT, len(self.statuses))
+            for iter12 in self.statuses:
                 iter12.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
-        if self.workflowOutputs is not None:
-            oprot.writeFieldBegin('workflowOutputs', TType.LIST, 8)
-            oprot.writeListBegin(TType.STRUCT, len(self.workflowOutputs))
-            for iter13 in self.workflowOutputs:
+        if self.errors is not None:
+            oprot.writeFieldBegin('errors', TType.LIST, 11)
+            oprot.writeListBegin(TType.STRUCT, len(self.errors))
+            for iter13 in self.errors:
                 iter13.write(oprot)
             oprot.writeListEnd()
             oprot.writeFieldEnd()
-        if self.creationTime is not None:
-            oprot.writeFieldBegin('creationTime', TType.I64, 9)
-            oprot.writeI64(self.creationTime)
+        if self.createdAt is not None:
+            oprot.writeFieldBegin('createdAt', TType.I64, 12)
+            oprot.writeI64(self.createdAt)
+            oprot.writeFieldEnd()
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 13)
+            oprot.writeI64(self.updatedAt)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
-        if self.templateId is None:
-            raise TProtocolException(message='Required field templateId is unset!')
-        if self.name is None:
-            raise TProtocolException(message='Required field name is unset!')
-        if self.graph is None:
-            raise TProtocolException(message='Required field graph is unset!')
-        if self.gatewayId is None:
-            raise TProtocolException(message='Required field gatewayId is unset!')
-        if self.createdUser is None:
-            raise TProtocolException(message='Required field createdUser is unset!')
+        if self.id is None:
+            raise TProtocolException(message='Required field id is unset!')
+        if self.belongsToMainWorkflow is None:
+            raise TProtocolException(message='Required field belongsToMainWorkflow is unset!')
         return
 
     def __repr__(self):
@@ -259,25 +652,46 @@ class WorkflowModel(object):
         return not (self == other)
 
 
-class ComponentStatus(object):
+class WorkflowConnection(object):
     """
     Attributes:
-     - state
-     - reason
-     - timeofStateChange
+     - id
+     - belongsToMainWorkflow
+     - fromType
+     - fromId
+     - fromOutputName
+     - toType
+     - toId
+     - toInputName
+     - createdAt
+     - updatedAt
     """
 
     thrift_spec = (
         None,  # 0
-        (1, TType.I32, 'state', None, 0, ),  # 1
-        (2, TType.STRING, 'reason', 'UTF8', None, ),  # 2
-        (3, TType.I64, 'timeofStateChange', None, None, ),  # 3
+        (1, TType.STRING, 'id', 'UTF8', "DO_NOT_SET_AT_CLIENTS", ),  # 1
+        (2, TType.BOOL, 'belongsToMainWorkflow', None, None, ),  # 2
+        (3, TType.I32, 'fromType', None, None, ),  # 3
+        (4, TType.STRING, 'fromId', 'UTF8', None, ),  # 4
+        (5, TType.STRING, 'fromOutputName', 'UTF8', None, ),  # 5
+        (6, TType.I32, 'toType', None, None, ),  # 6
+        (7, TType.STRING, 'toId', 'UTF8', None, ),  # 7
+        (8, TType.STRING, 'toInputName', 'UTF8', None, ),  # 8
+        (9, TType.I64, 'createdAt', None, None, ),  # 9
+        (10, TType.I64, 'updatedAt', None, None, ),  # 10
     )
 
-    def __init__(self, state=thrift_spec[1][4], reason=None, timeofStateChange=None,):
-        self.state = state
-        self.reason = reason
-        self.timeofStateChange = timeofStateChange
+    def __init__(self, id=thrift_spec[1][4], belongsToMainWorkflow=None, fromType=None, fromId=None, fromOutputName=None, toType=None, toId=None, toInputName=None, createdAt=None, updatedAt=None,):
+        self.id = id
+        self.belongsToMainWorkflow = belongsToMainWorkflow
+        self.fromType = fromType
+        self.fromId = fromId
+        self.fromOutputName = fromOutputName
+        self.toType = toType
+        self.toId = toId
+        self.toInputName = toInputName
+        self.createdAt = createdAt
+        self.updatedAt = updatedAt
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -289,18 +703,53 @@ class ComponentStatus(object):
             if ftype == TType.STOP:
                 break
             if fid == 1:
-                if ftype == TType.I32:
-                    self.state = iprot.readI32()
+                if ftype == TType.STRING:
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
-                if ftype == TType.STRING:
-                    self.reason = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                if ftype == TType.BOOL:
+                    self.belongsToMainWorkflow = iprot.readBool()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
+                if ftype == TType.I32:
+                    self.fromType = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.STRING:
+                    self.fromId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.STRING:
+                    self.fromOutputName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.I32:
+                    self.toType = iprot.readI32()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.STRING:
+                    self.toId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.STRING:
+                    self.toInputName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
                 if ftype == TType.I64:
-                    self.timeofStateChange = iprot.readI64()
+                    self.createdAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
                 else:
                     iprot.skip(ftype)
             else:
@@ -312,25 +761,67 @@ class ComponentStatus(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('ComponentStatus')
-        if self.state is not None:
-            oprot.writeFieldBegin('state', TType.I32, 1)
-            oprot.writeI32(self.state)
+        oprot.writeStructBegin('WorkflowConnection')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
+            oprot.writeFieldEnd()
+        if self.belongsToMainWorkflow is not None:
+            oprot.writeFieldBegin('belongsToMainWorkflow', TType.BOOL, 2)
+            oprot.writeBool(self.belongsToMainWorkflow)
+            oprot.writeFieldEnd()
+        if self.fromType is not None:
+            oprot.writeFieldBegin('fromType', TType.I32, 3)
+            oprot.writeI32(self.fromType)
+            oprot.writeFieldEnd()
+        if self.fromId is not None:
+            oprot.writeFieldBegin('fromId', TType.STRING, 4)
+            oprot.writeString(self.fromId.encode('utf-8') if sys.version_info[0] == 2 else self.fromId)
             oprot.writeFieldEnd()
-        if self.reason is not None:
-            oprot.writeFieldBegin('reason', TType.STRING, 2)
-            oprot.writeString(self.reason.encode('utf-8') if sys.version_info[0] == 2 else self.reason)
+        if self.fromOutputName is not None:
+            oprot.writeFieldBegin('fromOutputName', TType.STRING, 5)
+            oprot.writeString(self.fromOutputName.encode('utf-8') if sys.version_info[0] == 2 else self.fromOutputName)
             oprot.writeFieldEnd()
-        if self.timeofStateChange is not None:
-            oprot.writeFieldBegin('timeofStateChange', TType.I64, 3)
-            oprot.writeI64(self.timeofStateChange)
+        if self.toType is not None:
+            oprot.writeFieldBegin('toType', TType.I32, 6)
+            oprot.writeI32(self.toType)
+            oprot.writeFieldEnd()
+        if self.toId is not None:
+            oprot.writeFieldBegin('toId', TType.STRING, 7)
+            oprot.writeString(self.toId.encode('utf-8') if sys.version_info[0] == 2 else self.toId)
+            oprot.writeFieldEnd()
+        if self.toInputName is not None:
+            oprot.writeFieldBegin('toInputName', TType.STRING, 8)
+            oprot.writeString(self.toInputName.encode('utf-8') if sys.version_info[0] == 2 else self.toInputName)
+            oprot.writeFieldEnd()
+        if self.createdAt is not None:
+            oprot.writeFieldBegin('createdAt', TType.I64, 9)
+            oprot.writeI64(self.createdAt)
+            oprot.writeFieldEnd()
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 10)
+            oprot.writeI64(self.updatedAt)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
-        if self.state is None:
-            raise TProtocolException(message='Required field state is unset!')
+        if self.id is None:
+            raise TProtocolException(message='Required field id is unset!')
+        if self.belongsToMainWorkflow is None:
+            raise TProtocolException(message='Required field belongsToMainWorkflow is unset!')
+        if self.fromType is None:
+            raise TProtocolException(message='Required field fromType is unset!')
+        if self.fromId is None:
+            raise TProtocolException(message='Required field fromId is unset!')
+        if self.fromOutputName is None:
+            raise TProtocolException(message='Required field fromOutputName is unset!')
+        if self.toType is None:
+            raise TProtocolException(message='Required field toType is unset!')
+        if self.toId is None:
+            raise TProtocolException(message='Required field toId is unset!')
+        if self.toInputName is None:
+            raise TProtocolException(message='Required field toInputName is unset!')
         return
 
     def __repr__(self):
@@ -345,25 +836,28 @@ class ComponentStatus(object):
         return not (self == other)
 
 
-class WorkflowStatus(object):
+class HandlerStatus(object):
     """
     Attributes:
+     - id
      - state
-     - timeOfStateChange
-     - reason
+     - description
+     - updatedAt
     """
 
     thrift_spec = (
         None,  # 0
-        (1, TType.I32, 'state', None, None, ),  # 1
-        (2, TType.I64, 'timeOfStateChange', None, None, ),  # 2
-        (3, TType.STRING, 'reason', 'UTF8', None, ),  # 3
+        (1, TType.STRING, 'id', 'UTF8', None, ),  # 1
+        (2, TType.I32, 'state', None, None, ),  # 2
+        (3, TType.STRING, 'description', 'UTF8', None, ),  # 3
+        (4, TType.I64, 'updatedAt', None, None, ),  # 4
     )
 
-    def __init__(self, state=None, timeOfStateChange=None, reason=None,):
+    def __init__(self, id=None, state=None, description=None, updatedAt=None,):
+        self.id = id
         self.state = state
-        self.timeOfStateChange = timeOfStateChange
-        self.reason = reason
+        self.description = description
+        self.updatedAt = updatedAt
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -375,18 +869,23 @@ class WorkflowStatus(object):
             if ftype == TType.STOP:
                 break
             if fid == 1:
-                if ftype == TType.I32:
-                    self.state = iprot.readI32()
+                if ftype == TType.STRING:
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
-                if ftype == TType.I64:
-                    self.timeOfStateChange = iprot.readI64()
+                if ftype == TType.I32:
+                    self.state = iprot.readI32()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
                 if ftype == TType.STRING:
-                    self.reason = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 4:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
                 else:
                     iprot.skip(ftype)
             else:
@@ -398,18 +897,22 @@ class WorkflowStatus(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('WorkflowStatus')
+        oprot.writeStructBegin('HandlerStatus')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
+            oprot.writeFieldEnd()
         if self.state is not None:
-            oprot.writeFieldBegin('state', TType.I32, 1)
+            oprot.writeFieldBegin('state', TType.I32, 2)
             oprot.writeI32(self.state)
             oprot.writeFieldEnd()
-        if self.timeOfStateChange is not None:
-            oprot.writeFieldBegin('timeOfStateChange', TType.I64, 2)
-            oprot.writeI64(self.timeOfStateChange)
+        if self.description is not None:
+            oprot.writeFieldBegin('description', TType.STRING, 3)
+            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
             oprot.writeFieldEnd()
-        if self.reason is not None:
-            oprot.writeFieldBegin('reason', TType.STRING, 3)
-            oprot.writeString(self.reason.encode('utf-8') if sys.version_info[0] == 2 else self.reason)
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 4)
+            oprot.writeI64(self.updatedAt)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
@@ -431,28 +934,31 @@ class WorkflowStatus(object):
         return not (self == other)
 
 
-class EdgeModel(object):
+class DataBlock(object):
     """
     Attributes:
-     - edgeId
-     - name
-     - status
-     - description
+     - id
+     - value
+     - type
+     - createdAt
+     - updatedAt
     """
 
     thrift_spec = (
         None,  # 0
-        (1, TType.STRING, 'edgeId', 'UTF8', "DO_NOT_SET_AT_CLIENTS", ),  # 1
-        (2, TType.STRING, 'name', 'UTF8', None, ),  # 2
-        (3, TType.STRUCT, 'status', (ComponentStatus, ComponentStatus.thrift_spec), None, ),  # 3
-        (4, TType.STRING, 'description', 'UTF8', None, ),  # 4
+        (1, TType.STRING, 'id', 'UTF8', None, ),  # 1
+        (2, TType.STRING, 'value', 'UTF8', None, ),  # 2
+        (3, TType.I32, 'type', None, None, ),  # 3
+        (4, TType.I64, 'createdAt', None, None, ),  # 4
+        (5, TType.I64, 'updatedAt', None, None, ),  # 5
     )
 
-    def __init__(self, edgeId=thrift_spec[1][4], name=None, status=None, description=None,):
-        self.edgeId = edgeId
-        self.name = name
-        self.status = status
-        self.description = description
+    def __init__(self, id=None, value=None, type=None, createdAt=None, updatedAt=None,):
+        self.id = id
+        self.value = value
+        self.type = type
+        self.createdAt = createdAt
+        self.updatedAt = updatedAt
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -465,23 +971,27 @@ class EdgeModel(object):
                 break
             if fid == 1:
                 if ftype == TType.STRING:
-                    self.edgeId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
                 if ftype == TType.STRING:
-                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.value = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
-                if ftype == TType.STRUCT:
-                    self.status = ComponentStatus()
-                    self.status.read(iprot)
+                if ftype == TType.I32:
+                    self.type = iprot.readI32()
                 else:
                     iprot.skip(ftype)
             elif fid == 4:
-                if ftype == TType.STRING:
-                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                if ftype == TType.I64:
+                    self.createdAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 5:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
                 else:
                     iprot.skip(ftype)
             else:
@@ -493,29 +1003,33 @@ class EdgeModel(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('EdgeModel')
-        if self.edgeId is not None:
-            oprot.writeFieldBegin('edgeId', TType.STRING, 1)
-            oprot.writeString(self.edgeId.encode('utf-8') if sys.version_info[0] == 2 else self.edgeId)
+        oprot.writeStructBegin('DataBlock')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
             oprot.writeFieldEnd()
-        if self.name is not None:
-            oprot.writeFieldBegin('name', TType.STRING, 2)
-            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
+        if self.value is not None:
+            oprot.writeFieldBegin('value', TType.STRING, 2)
+            oprot.writeString(self.value.encode('utf-8') if sys.version_info[0] == 2 else self.value)
             oprot.writeFieldEnd()
-        if self.status is not None:
-            oprot.writeFieldBegin('status', TType.STRUCT, 3)
-            self.status.write(oprot)
+        if self.type is not None:
+            oprot.writeFieldBegin('type', TType.I32, 3)
+            oprot.writeI32(self.type)
             oprot.writeFieldEnd()
-        if self.description is not None:
-            oprot.writeFieldBegin('description', TType.STRING, 4)
-            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
+        if self.createdAt is not None:
+            oprot.writeFieldBegin('createdAt', TType.I64, 4)
+            oprot.writeI64(self.createdAt)
+            oprot.writeFieldEnd()
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 5)
+            oprot.writeI64(self.updatedAt)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
-        if self.edgeId is None:
-            raise TProtocolException(message='Required field edgeId is unset!')
+        if self.id is None:
+            raise TProtocolException(message='Required field id is unset!')
         return
 
     def __repr__(self):
@@ -530,31 +1044,49 @@ class EdgeModel(object):
         return not (self == other)
 
 
-class PortModel(object):
+class WorkflowHandler(object):
     """
     Attributes:
-     - portId
-     - name
-     - status
-     - value
-     - description
+     - id
+     - belongsToMainWorkflow
+     - type
+     - inputs
+     - outputs
+     - applications
+     - connections
+     - statuses
+     - errors
+     - createdAt
+     - updatedAt
     """
 
     thrift_spec = (
         None,  # 0
-        (1, TType.STRING, 'portId', 'UTF8', "DO_NOT_SET_AT_CLIENTS", ),  # 1
-        (2, TType.STRING, 'name', 'UTF8', None, ),  # 2
-        (3, TType.STRUCT, 'status', (ComponentStatus, ComponentStatus.thrift_spec), None, ),  # 3
-        (4, TType.STRING, 'value', 'UTF8', None, ),  # 4
-        (5, TType.STRING, 'description', 'UTF8', None, ),  # 5
+        (1, TType.STRING, 'id', 'UTF8', None, ),  # 1
+        (2, TType.BOOL, 'belongsToMainWorkflow', None, None, ),  # 2
+        (3, TType.I32, 'type', None, None, ),  # 3
+        (4, TType.LIST, 'inputs', (TType.STRUCT, (airavata.model.application.io.ttypes.InputDataObjectType, airavata.model.application.io.ttypes.InputDataObjectType.thrift_spec), False), None, ),  # 4
+        (5, TType.LIST, 'outputs', (TType.STRUCT, (airavata.model.application.io.ttypes.OutputDataObjectType, airavata.model.application.io.ttypes.OutputDataObjectType.thrift_spec), False), None, ),  # 5
+        (6, TType.LIST, 'applications', (TType.STRUCT, (WorkflowApplication, WorkflowApplication.thrift_spec), False), None, ),  # 6
+        (7, TType.LIST, 'connections', (TType.STRUCT, (WorkflowConnection, WorkflowConnection.thrift_spec), False), None, ),  # 7
+        (8, TType.LIST, 'statuses', (TType.STRUCT, (HandlerStatus, HandlerStatus.thrift_spec), False), None, ),  # 8
+        (9, TType.LIST, 'errors', (TType.STRUCT, (airavata.model.commons.ttypes.ErrorModel, airavata.model.commons.ttypes.ErrorModel.thrift_spec), False), None, ),  # 9
+        (10, TType.I64, 'createdAt', None, None, ),  # 10
+        (11, TType.I64, 'updatedAt', None, None, ),  # 11
     )
 
-    def __init__(self, portId=thrift_spec[1][4], name=None, status=None, value=None, description=None,):
-        self.portId = portId
-        self.name = name
-        self.status = status
-        self.value = value
-        self.description = description
+    def __init__(self, id=None, belongsToMainWorkflow=None, type=None, inputs=None, outputs=None, applications=None, connections=None, statuses=None, errors=None, createdAt=None, updatedAt=None,):
+        self.id = id
+        self.belongsToMainWorkflow = belongsToMainWorkflow
+        self.type = type
+        self.inputs = inputs
+        self.outputs = outputs
+        self.applications = applications
+        self.connections = connections
+        self.statuses = statuses
+        self.errors = errors
+        self.createdAt = createdAt
+        self.updatedAt = updatedAt
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -567,28 +1099,93 @@ class PortModel(object):
                 break
             if fid == 1:
                 if ftype == TType.STRING:
-                    self.portId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
-                if ftype == TType.STRING:
-                    self.name = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                if ftype == TType.BOOL:
+                    self.belongsToMainWorkflow = iprot.readBool()
                 else:
                     iprot.skip(ftype)
             elif fid == 3:
-                if ftype == TType.STRUCT:
-                    self.status = ComponentStatus()
-                    self.status.read(iprot)
+                if ftype == TType.I32:
+                    self.type = iprot.readI32()
                 else:
                     iprot.skip(ftype)
             elif fid == 4:
-                if ftype == TType.STRING:
-                    self.value = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                if ftype == TType.LIST:
+                    self.inputs = []
+                    (_etype17, _size14) = iprot.readListBegin()
+                    for _i18 in range(_size14):
+                        _elem19 = airavata.model.application.io.ttypes.InputDataObjectType()
+                        _elem19.read(iprot)
+                        self.inputs.append(_elem19)
+                    iprot.readListEnd()
                 else:
                     iprot.skip(ftype)
             elif fid == 5:
-                if ftype == TType.STRING:
-                    self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                if ftype == TType.LIST:
+                    self.outputs = []
+                    (_etype23, _size20) = iprot.readListBegin()
+                    for _i24 in range(_size20):
+                        _elem25 = airavata.model.application.io.ttypes.OutputDataObjectType()
+                        _elem25.read(iprot)
+                        self.outputs.append(_elem25)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 6:
+                if ftype == TType.LIST:
+                    self.applications = []
+                    (_etype29, _size26) = iprot.readListBegin()
+                    for _i30 in range(_size26):
+                        _elem31 = WorkflowApplication()
+                        _elem31.read(iprot)
+                        self.applications.append(_elem31)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.LIST:
+                    self.connections = []
+                    (_etype35, _size32) = iprot.readListBegin()
+                    for _i36 in range(_size32):
+                        _elem37 = WorkflowConnection()
+                        _elem37.read(iprot)
+                        self.connections.append(_elem37)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.LIST:
+                    self.statuses = []
+                    (_etype41, _size38) = iprot.readListBegin()
+                    for _i42 in range(_size38):
+                        _elem43 = HandlerStatus()
+                        _elem43.read(iprot)
+                        self.statuses.append(_elem43)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.LIST:
+                    self.errors = []
+                    (_etype47, _size44) = iprot.readListBegin()
+                    for _i48 in range(_size44):
+                        _elem49 = airavata.model.commons.ttypes.ErrorModel()
+                        _elem49.read(iprot)
+                        self.errors.append(_elem49)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.I64:
+                    self.createdAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 11:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
                 else:
                     iprot.skip(ftype)
             else:
@@ -600,33 +1197,79 @@ class PortModel(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('PortModel')
-        if self.portId is not None:
-            oprot.writeFieldBegin('portId', TType.STRING, 1)
-            oprot.writeString(self.portId.encode('utf-8') if sys.version_info[0] == 2 else self.portId)
+        oprot.writeStructBegin('WorkflowHandler')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
             oprot.writeFieldEnd()
-        if self.name is not None:
-            oprot.writeFieldBegin('name', TType.STRING, 2)
-            oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
+        if self.belongsToMainWorkflow is not None:
+            oprot.writeFieldBegin('belongsToMainWorkflow', TType.BOOL, 2)
+            oprot.writeBool(self.belongsToMainWorkflow)
             oprot.writeFieldEnd()
-        if self.status is not None:
-            oprot.writeFieldBegin('status', TType.STRUCT, 3)
-            self.status.write(oprot)
+        if self.type is not None:
+            oprot.writeFieldBegin('type', TType.I32, 3)
+            oprot.writeI32(self.type)
             oprot.writeFieldEnd()
-        if self.value is not None:
-            oprot.writeFieldBegin('value', TType.STRING, 4)
-            oprot.writeString(self.value.encode('utf-8') if sys.version_info[0] == 2 else self.value)
+        if self.inputs is not None:
+            oprot.writeFieldBegin('inputs', TType.LIST, 4)
+            oprot.writeListBegin(TType.STRUCT, len(self.inputs))
+            for iter50 in self.inputs:
+                iter50.write(oprot)
+            oprot.writeListEnd()
             oprot.writeFieldEnd()
-        if self.description is not None:
-            oprot.writeFieldBegin('description', TType.STRING, 5)
-            oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
+        if self.outputs is not None:
+            oprot.writeFieldBegin('outputs', TType.LIST, 5)
+            oprot.writeListBegin(TType.STRUCT, len(self.outputs))
+            for iter51 in self.outputs:
+                iter51.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.applications is not None:
+            oprot.writeFieldBegin('applications', TType.LIST, 6)
+            oprot.writeListBegin(TType.STRUCT, len(self.applications))
+            for iter52 in self.applications:
+                iter52.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.connections is not None:
+            oprot.writeFieldBegin('connections', TType.LIST, 7)
+            oprot.writeListBegin(TType.STRUCT, len(self.connections))
+            for iter53 in self.connections:
+                iter53.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.statuses is not None:
+            oprot.writeFieldBegin('statuses', TType.LIST, 8)
+            oprot.writeListBegin(TType.STRUCT, len(self.statuses))
+            for iter54 in self.statuses:
+                iter54.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.errors is not None:
+            oprot.writeFieldBegin('errors', TType.LIST, 9)
+            oprot.writeListBegin(TType.STRUCT, len(self.errors))
+            for iter55 in self.errors:
+                iter55.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.createdAt is not None:
+            oprot.writeFieldBegin('createdAt', TType.I64, 10)
+            oprot.writeI64(self.createdAt)
+            oprot.writeFieldEnd()
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 11)
+            oprot.writeI64(self.updatedAt)
             oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
-        if self.portId is None:
-            raise TProtocolException(message='Required field portId is unset!')
+        if self.id is None:
+            raise TProtocolException(message='Required field id is unset!')
+        if self.belongsToMainWorkflow is None:
+            raise TProtocolException(message='Required field belongsToMainWorkflow is unset!')
+        if self.type is None:
+            raise TProtocolException(message='Required field type is unset!')
         return
 
     def __repr__(self):
@@ -641,34 +1284,61 @@ class PortModel(object):
         return not (self == other)
 
 
-class NodeModel(object):
+class AiravataWorkflow(object):
     """
     Attributes:
-     - nodeId
+     - id
      - name
-     - applicationId
-     - applicationName
-     - status
+     - gatewayId
+     - userName
+     - storageResourceId
      - description
+     - enableEmailNotification
+     - notificationEmails
+     - applications
+     - handlers
+     - connections
+     - statuses
+     - errors
+     - createdAt
+     - updatedAt
     """
 
     thrift_spec = (
         None,  # 0
-        (1, TType.STRING, 'nodeId', 'UTF8', "DO_NOT_SET_AT_CLIENTS", ),  # 1
+        (1, TType.STRING, 'id', 'UTF8', "DO_NOT_SET_AT_CLIENTS", ),  # 1
         (2, TType.STRING, 'name', 'UTF8', None, ),  # 2
-        (3, TType.STRING, 'applicationId', 'UTF8', None, ),  # 3
-        (4, TType.STRING, 'applicationName', 'UTF8', None, ),  # 4
-        (5, TType.STRUCT, 'status', (ComponentStatus, ComponentStatus.thrift_spec), None, ),  # 5
+        (3, TType.STRING, 'gatewayId', 'UTF8', None, ),  # 3
+        (4, TType.STRING, 'userName', 'UTF8', None, ),  # 4
+        (5, TType.STRING, 'storageResourceId', 'UTF8', None, ),  # 5
         (6, TType.STRING, 'description', 'UTF8', None, ),  # 6
+        (7, TType.BOOL, 'enableEmailNotification', None, None, ),  # 7
+        (8, TType.LIST, 'notificationEmails', (TType.STRUCT, (NotificationEmail, NotificationEmail.thrift_spec), False), None, ),  # 8
+        (9, TType.LIST, 'applications', (TType.STRUCT, (WorkflowApplication, WorkflowApplication.thrift_spec), False), None, ),  # 9
+        (10, TType.LIST, 'handlers', (TType.STRUCT, (WorkflowHandler, WorkflowHandler.thrift_spec), False), None, ),  # 10
+        (11, TType.LIST, 'connections', (TType.STRUCT, (WorkflowConnection, WorkflowConnection.thrift_spec), False), None, ),  # 11
+        (12, TType.LIST, 'statuses', (TType.STRUCT, (WorkflowStatus, WorkflowStatus.thrift_spec), False), None, ),  # 12
+        (13, TType.LIST, 'errors', (TType.STRUCT, (airavata.model.commons.ttypes.ErrorModel, airavata.model.commons.ttypes.ErrorModel.thrift_spec), False), None, ),  # 13
+        (14, TType.I64, 'createdAt', None, None, ),  # 14
+        (15, TType.I64, 'updatedAt', None, None, ),  # 15
     )
 
-    def __init__(self, nodeId=thrift_spec[1][4], name=None, applicationId=None, applicationName=None, status=None, description=None,):
-        self.nodeId = nodeId
+    def __init__(self, id=thrift_spec[1][4], name=None, gatewayId=None, userName=None, storageResourceId=None, description=None, enableEmailNotification=None, notificationEmails=None, applications=None, handlers=None, connections=None, statuses=None, errors=None, createdAt=None, updatedAt=None,):
+        self.id = id
         self.name = name
-        self.applicationId = applicationId
-        self.applicationName = applicationName
-        self.status = status
+        self.gatewayId = gatewayId
+        self.userName = userName
+        self.storageResourceId = storageResourceId
         self.description = description
+        self.enableEmailNotification = enableEmailNotification
+        self.notificationEmails = notificationEmails
+        self.applications = applications
+        self.handlers = handlers
+        self.connections = connections
+        self.statuses = statuses
+        self.errors = errors
+        self.createdAt = createdAt
+        self.updatedAt = updatedAt
 
     def read(self, iprot):
         if iprot._fast_decode is not None and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None:
@@ -681,7 +1351,7 @@ class NodeModel(object):
                 break
             if fid == 1:
                 if ftype == TType.STRING:
-                    self.nodeId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.id = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 2:
@@ -691,18 +1361,17 @@ class NodeModel(object):
                     iprot.skip(ftype)
             elif fid == 3:
                 if ftype == TType.STRING:
-                    self.applicationId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.gatewayId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 4:
                 if ftype == TType.STRING:
-                    self.applicationName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
+                    self.userName = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 5:
-                if ftype == TType.STRUCT:
-                    self.status = ComponentStatus()
-                    self.status.read(iprot)
+                if ftype == TType.STRING:
+                    self.storageResourceId = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
             elif fid == 6:
@@ -710,6 +1379,87 @@ class NodeModel(object):
                     self.description = iprot.readString().decode('utf-8') if sys.version_info[0] == 2 else iprot.readString()
                 else:
                     iprot.skip(ftype)
+            elif fid == 7:
+                if ftype == TType.BOOL:
+                    self.enableEmailNotification = iprot.readBool()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 8:
+                if ftype == TType.LIST:
+                    self.notificationEmails = []
+                    (_etype59, _size56) = iprot.readListBegin()
+                    for _i60 in range(_size56):
+                        _elem61 = NotificationEmail()
+                        _elem61.read(iprot)
+                        self.notificationEmails.append(_elem61)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 9:
+                if ftype == TType.LIST:
+                    self.applications = []
+                    (_etype65, _size62) = iprot.readListBegin()
+                    for _i66 in range(_size62):
+                        _elem67 = WorkflowApplication()
+                        _elem67.read(iprot)
+                        self.applications.append(_elem67)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 10:
+                if ftype == TType.LIST:
+                    self.handlers = []
+                    (_etype71, _size68) = iprot.readListBegin()
+                    for _i72 in range(_size68):
+                        _elem73 = WorkflowHandler()
+                        _elem73.read(iprot)
+                        self.handlers.append(_elem73)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 11:
+                if ftype == TType.LIST:
+                    self.connections = []
+                    (_etype77, _size74) = iprot.readListBegin()
+                    for _i78 in range(_size74):
+                        _elem79 = WorkflowConnection()
+                        _elem79.read(iprot)
+                        self.connections.append(_elem79)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 12:
+                if ftype == TType.LIST:
+                    self.statuses = []
+                    (_etype83, _size80) = iprot.readListBegin()
+                    for _i84 in range(_size80):
+                        _elem85 = WorkflowStatus()
+                        _elem85.read(iprot)
+                        self.statuses.append(_elem85)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 13:
+                if ftype == TType.LIST:
+                    self.errors = []
+                    (_etype89, _size86) = iprot.readListBegin()
+                    for _i90 in range(_size86):
+                        _elem91 = airavata.model.commons.ttypes.ErrorModel()
+                        _elem91.read(iprot)
+                        self.errors.append(_elem91)
+                    iprot.readListEnd()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 14:
+                if ftype == TType.I64:
+                    self.createdAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
+            elif fid == 15:
+                if ftype == TType.I64:
+                    self.updatedAt = iprot.readI64()
+                else:
+                    iprot.skip(ftype)
             else:
                 iprot.skip(ftype)
             iprot.readFieldEnd()
@@ -719,37 +1469,99 @@ class NodeModel(object):
         if oprot._fast_encode is not None and self.thrift_spec is not None:
             oprot.trans.write(oprot._fast_encode(self, (self.__class__, self.thrift_spec)))
             return
-        oprot.writeStructBegin('NodeModel')
-        if self.nodeId is not None:
-            oprot.writeFieldBegin('nodeId', TType.STRING, 1)
-            oprot.writeString(self.nodeId.encode('utf-8') if sys.version_info[0] == 2 else self.nodeId)
+        oprot.writeStructBegin('AiravataWorkflow')
+        if self.id is not None:
+            oprot.writeFieldBegin('id', TType.STRING, 1)
+            oprot.writeString(self.id.encode('utf-8') if sys.version_info[0] == 2 else self.id)
             oprot.writeFieldEnd()
         if self.name is not None:
             oprot.writeFieldBegin('name', TType.STRING, 2)
             oprot.writeString(self.name.encode('utf-8') if sys.version_info[0] == 2 else self.name)
             oprot.writeFieldEnd()
-        if self.applicationId is not None:
-            oprot.writeFieldBegin('applicationId', TType.STRING, 3)
-            oprot.writeString(self.applicationId.encode('utf-8') if sys.version_info[0] == 2 else self.applicationId)
+        if self.gatewayId is not None:
+            oprot.writeFieldBegin('gatewayId', TType.STRING, 3)
+            oprot.writeString(self.gatewayId.encode('utf-8') if sys.version_info[0] == 2 else self.gatewayId)
             oprot.writeFieldEnd()
-        if self.applicationName is not None:
-            oprot.writeFieldBegin('applicationName', TType.STRING, 4)
-            oprot.writeString(self.applicationName.encode('utf-8') if sys.version_info[0] == 2 else self.applicationName)
+        if self.userName is not None:
+            oprot.writeFieldBegin('userName', TType.STRING, 4)
+            oprot.writeString(self.userName.encode('utf-8') if sys.version_info[0] == 2 else self.userName)
             oprot.writeFieldEnd()
-        if self.status is not None:
-            oprot.writeFieldBegin('status', TType.STRUCT, 5)
-            self.status.write(oprot)
+        if self.storageResourceId is not None:
+            oprot.writeFieldBegin('storageResourceId', TType.STRING, 5)
+            oprot.writeString(self.storageResourceId.encode('utf-8') if sys.version_info[0] == 2 else self.storageResourceId)
             oprot.writeFieldEnd()
         if self.description is not None:
             oprot.writeFieldBegin('description', TType.STRING, 6)
             oprot.writeString(self.description.encode('utf-8') if sys.version_info[0] == 2 else self.description)
             oprot.writeFieldEnd()
+        if self.enableEmailNotification is not None:
+            oprot.writeFieldBegin('enableEmailNotification', TType.BOOL, 7)
+            oprot.writeBool(self.enableEmailNotification)
+            oprot.writeFieldEnd()
+        if self.notificationEmails is not None:
+            oprot.writeFieldBegin('notificationEmails', TType.LIST, 8)
+            oprot.writeListBegin(TType.STRUCT, len(self.notificationEmails))
+            for iter92 in self.notificationEmails:
+                iter92.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.applications is not None:
+            oprot.writeFieldBegin('applications', TType.LIST, 9)
+            oprot.writeListBegin(TType.STRUCT, len(self.applications))
+            for iter93 in self.applications:
+                iter93.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.handlers is not None:
+            oprot.writeFieldBegin('handlers', TType.LIST, 10)
+            oprot.writeListBegin(TType.STRUCT, len(self.handlers))
+            for iter94 in self.handlers:
+                iter94.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.connections is not None:
+            oprot.writeFieldBegin('connections', TType.LIST, 11)
+            oprot.writeListBegin(TType.STRUCT, len(self.connections))
+            for iter95 in self.connections:
+                iter95.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.statuses is not None:
+            oprot.writeFieldBegin('statuses', TType.LIST, 12)
+            oprot.writeListBegin(TType.STRUCT, len(self.statuses))
+            for iter96 in self.statuses:
+                iter96.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.errors is not None:
+            oprot.writeFieldBegin('errors', TType.LIST, 13)
+            oprot.writeListBegin(TType.STRUCT, len(self.errors))
+            for iter97 in self.errors:
+                iter97.write(oprot)
+            oprot.writeListEnd()
+            oprot.writeFieldEnd()
+        if self.createdAt is not None:
+            oprot.writeFieldBegin('createdAt', TType.I64, 14)
+            oprot.writeI64(self.createdAt)
+            oprot.writeFieldEnd()
+        if self.updatedAt is not None:
+            oprot.writeFieldBegin('updatedAt', TType.I64, 15)
+            oprot.writeI64(self.updatedAt)
+            oprot.writeFieldEnd()
         oprot.writeFieldStop()
         oprot.writeStructEnd()
 
     def validate(self):
-        if self.nodeId is None:
-            raise TProtocolException(message='Required field nodeId is unset!')
+        if self.id is None:
+            raise TProtocolException(message='Required field id is unset!')
+        if self.name is None:
+            raise TProtocolException(message='Required field name is unset!')
+        if self.gatewayId is None:
+            raise TProtocolException(message='Required field gatewayId is unset!')
+        if self.userName is None:
+            raise TProtocolException(message='Required field userName is unset!')
+        if self.storageResourceId is None:
+            raise TProtocolException(message='Required field storageResourceId is unset!')
         return
 
     def __repr__(self):
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/AiravataWorkflow.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/AiravataWorkflow.java
index cea433a..c15e1b7 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/AiravataWorkflow.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/AiravataWorkflow.java
@@ -55,9 +55,9 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
   private java.lang.String description; // optional
   private boolean enableEmailNotification; // optional
   private java.util.List<NotificationEmail> notificationEmails; // optional
-  private java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> applications; // optional
-  private java.util.List<org.apache.airavata.model.workflow.WorkflowHandler> handlers; // optional
-  private java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> connections; // optional
+  private java.util.List<WorkflowApplication> applications; // optional
+  private java.util.List<WorkflowHandler> handlers; // optional
+  private java.util.List<WorkflowConnection> connections; // optional
   private java.util.List<WorkflowStatus> statuses; // optional
   private java.util.List<org.apache.airavata.model.commons.ErrorModel> errors; // optional
   private long createdAt; // optional
@@ -191,13 +191,13 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
             new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, NotificationEmail.class))));
     tmpMap.put(_Fields.APPLICATIONS, new org.apache.thrift.meta_data.FieldMetaData("applications", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workflow.WorkflowApplication.class))));
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowApplication.class))));
     tmpMap.put(_Fields.HANDLERS, new org.apache.thrift.meta_data.FieldMetaData("handlers", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workflow.WorkflowHandler.class))));
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowHandler.class))));
     tmpMap.put(_Fields.CONNECTIONS, new org.apache.thrift.meta_data.FieldMetaData("connections", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workflow.WorkflowConnection.class))));
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowConnection.class))));
     tmpMap.put(_Fields.STATUSES, new org.apache.thrift.meta_data.FieldMetaData("statuses", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
             new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowStatus.class))));
@@ -264,23 +264,23 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
       this.notificationEmails = __this__notificationEmails;
     }
     if (other.isSetApplications()) {
-      java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> __this__applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>(other.applications.size());
-      for (org.apache.airavata.model.workflow.WorkflowApplication other_element : other.applications) {
-        __this__applications.add(new org.apache.airavata.model.workflow.WorkflowApplication(other_element));
+      java.util.List<WorkflowApplication> __this__applications = new java.util.ArrayList<WorkflowApplication>(other.applications.size());
+      for (WorkflowApplication other_element : other.applications) {
+        __this__applications.add(new WorkflowApplication(other_element));
       }
       this.applications = __this__applications;
     }
     if (other.isSetHandlers()) {
-      java.util.List<org.apache.airavata.model.workflow.WorkflowHandler> __this__handlers = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowHandler>(other.handlers.size());
-      for (org.apache.airavata.model.workflow.WorkflowHandler other_element : other.handlers) {
-        __this__handlers.add(new org.apache.airavata.model.workflow.WorkflowHandler(other_element));
+      java.util.List<WorkflowHandler> __this__handlers = new java.util.ArrayList<WorkflowHandler>(other.handlers.size());
+      for (WorkflowHandler other_element : other.handlers) {
+        __this__handlers.add(new WorkflowHandler(other_element));
       }
       this.handlers = __this__handlers;
     }
     if (other.isSetConnections()) {
-      java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> __this__connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>(other.connections.size());
-      for (org.apache.airavata.model.workflow.WorkflowConnection other_element : other.connections) {
-        __this__connections.add(new org.apache.airavata.model.workflow.WorkflowConnection(other_element));
+      java.util.List<WorkflowConnection> __this__connections = new java.util.ArrayList<WorkflowConnection>(other.connections.size());
+      for (WorkflowConnection other_element : other.connections) {
+        __this__connections.add(new WorkflowConnection(other_element));
       }
       this.connections = __this__connections;
     }
@@ -531,22 +531,22 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
     return (this.applications == null) ? 0 : this.applications.size();
   }
 
-  public java.util.Iterator<org.apache.airavata.model.workflow.WorkflowApplication> getApplicationsIterator() {
+  public java.util.Iterator<WorkflowApplication> getApplicationsIterator() {
     return (this.applications == null) ? null : this.applications.iterator();
   }
 
-  public void addToApplications(org.apache.airavata.model.workflow.WorkflowApplication elem) {
+  public void addToApplications(WorkflowApplication elem) {
     if (this.applications == null) {
-      this.applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>();
+      this.applications = new java.util.ArrayList<WorkflowApplication>();
     }
     this.applications.add(elem);
   }
 
-  public java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> getApplications() {
+  public java.util.List<WorkflowApplication> getApplications() {
     return this.applications;
   }
 
-  public void setApplications(java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> applications) {
+  public void setApplications(java.util.List<WorkflowApplication> applications) {
     this.applications = applications;
   }
 
@@ -569,22 +569,22 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
     return (this.handlers == null) ? 0 : this.handlers.size();
   }
 
-  public java.util.Iterator<org.apache.airavata.model.workflow.WorkflowHandler> getHandlersIterator() {
+  public java.util.Iterator<WorkflowHandler> getHandlersIterator() {
     return (this.handlers == null) ? null : this.handlers.iterator();
   }
 
-  public void addToHandlers(org.apache.airavata.model.workflow.WorkflowHandler elem) {
+  public void addToHandlers(WorkflowHandler elem) {
     if (this.handlers == null) {
-      this.handlers = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowHandler>();
+      this.handlers = new java.util.ArrayList<WorkflowHandler>();
     }
     this.handlers.add(elem);
   }
 
-  public java.util.List<org.apache.airavata.model.workflow.WorkflowHandler> getHandlers() {
+  public java.util.List<WorkflowHandler> getHandlers() {
     return this.handlers;
   }
 
-  public void setHandlers(java.util.List<org.apache.airavata.model.workflow.WorkflowHandler> handlers) {
+  public void setHandlers(java.util.List<WorkflowHandler> handlers) {
     this.handlers = handlers;
   }
 
@@ -607,22 +607,22 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
     return (this.connections == null) ? 0 : this.connections.size();
   }
 
-  public java.util.Iterator<org.apache.airavata.model.workflow.WorkflowConnection> getConnectionsIterator() {
+  public java.util.Iterator<WorkflowConnection> getConnectionsIterator() {
     return (this.connections == null) ? null : this.connections.iterator();
   }
 
-  public void addToConnections(org.apache.airavata.model.workflow.WorkflowConnection elem) {
+  public void addToConnections(WorkflowConnection elem) {
     if (this.connections == null) {
-      this.connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>();
+      this.connections = new java.util.ArrayList<WorkflowConnection>();
     }
     this.connections.add(elem);
   }
 
-  public java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> getConnections() {
+  public java.util.List<WorkflowConnection> getConnections() {
     return this.connections;
   }
 
-  public void setConnections(java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> connections) {
+  public void setConnections(java.util.List<WorkflowConnection> connections) {
     this.connections = connections;
   }
 
@@ -831,7 +831,7 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
       if (value == null) {
         unsetApplications();
       } else {
-        setApplications((java.util.List<org.apache.airavata.model.workflow.WorkflowApplication>)value);
+        setApplications((java.util.List<WorkflowApplication>)value);
       }
       break;
 
@@ -839,7 +839,7 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
       if (value == null) {
         unsetHandlers();
       } else {
-        setHandlers((java.util.List<org.apache.airavata.model.workflow.WorkflowHandler>)value);
+        setHandlers((java.util.List<WorkflowHandler>)value);
       }
       break;
 
@@ -847,7 +847,7 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
       if (value == null) {
         unsetConnections();
       } else {
-        setConnections((java.util.List<org.apache.airavata.model.workflow.WorkflowConnection>)value);
+        setConnections((java.util.List<WorkflowConnection>)value);
       }
       break;
 
@@ -1627,14 +1627,14 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           case 8: // NOTIFICATION_EMAILS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list0 = iprot.readListBegin();
-                struct.notificationEmails = new java.util.ArrayList<NotificationEmail>(_list0.size);
-                NotificationEmail _elem1;
-                for (int _i2 = 0; _i2 < _list0.size; ++_i2)
+                org.apache.thrift.protocol.TList _list64 = iprot.readListBegin();
+                struct.notificationEmails = new java.util.ArrayList<NotificationEmail>(_list64.size);
+                NotificationEmail _elem65;
+                for (int _i66 = 0; _i66 < _list64.size; ++_i66)
                 {
-                  _elem1 = new NotificationEmail();
-                  _elem1.read(iprot);
-                  struct.notificationEmails.add(_elem1);
+                  _elem65 = new NotificationEmail();
+                  _elem65.read(iprot);
+                  struct.notificationEmails.add(_elem65);
                 }
                 iprot.readListEnd();
               }
@@ -1646,14 +1646,14 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           case 9: // APPLICATIONS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list3 = iprot.readListBegin();
-                struct.applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>(_list3.size);
-                org.apache.airavata.model.workflow.WorkflowApplication _elem4;
-                for (int _i5 = 0; _i5 < _list3.size; ++_i5)
+                org.apache.thrift.protocol.TList _list67 = iprot.readListBegin();
+                struct.applications = new java.util.ArrayList<WorkflowApplication>(_list67.size);
+                WorkflowApplication _elem68;
+                for (int _i69 = 0; _i69 < _list67.size; ++_i69)
                 {
-                  _elem4 = new org.apache.airavata.model.workflow.WorkflowApplication();
-                  _elem4.read(iprot);
-                  struct.applications.add(_elem4);
+                  _elem68 = new WorkflowApplication();
+                  _elem68.read(iprot);
+                  struct.applications.add(_elem68);
                 }
                 iprot.readListEnd();
               }
@@ -1665,14 +1665,14 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           case 10: // HANDLERS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list6 = iprot.readListBegin();
-                struct.handlers = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowHandler>(_list6.size);
-                org.apache.airavata.model.workflow.WorkflowHandler _elem7;
-                for (int _i8 = 0; _i8 < _list6.size; ++_i8)
+                org.apache.thrift.protocol.TList _list70 = iprot.readListBegin();
+                struct.handlers = new java.util.ArrayList<WorkflowHandler>(_list70.size);
+                WorkflowHandler _elem71;
+                for (int _i72 = 0; _i72 < _list70.size; ++_i72)
                 {
-                  _elem7 = new org.apache.airavata.model.workflow.WorkflowHandler();
-                  _elem7.read(iprot);
-                  struct.handlers.add(_elem7);
+                  _elem71 = new WorkflowHandler();
+                  _elem71.read(iprot);
+                  struct.handlers.add(_elem71);
                 }
                 iprot.readListEnd();
               }
@@ -1684,14 +1684,14 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           case 11: // CONNECTIONS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list9 = iprot.readListBegin();
-                struct.connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>(_list9.size);
-                org.apache.airavata.model.workflow.WorkflowConnection _elem10;
-                for (int _i11 = 0; _i11 < _list9.size; ++_i11)
+                org.apache.thrift.protocol.TList _list73 = iprot.readListBegin();
+                struct.connections = new java.util.ArrayList<WorkflowConnection>(_list73.size);
+                WorkflowConnection _elem74;
+                for (int _i75 = 0; _i75 < _list73.size; ++_i75)
                 {
-                  _elem10 = new org.apache.airavata.model.workflow.WorkflowConnection();
-                  _elem10.read(iprot);
-                  struct.connections.add(_elem10);
+                  _elem74 = new WorkflowConnection();
+                  _elem74.read(iprot);
+                  struct.connections.add(_elem74);
                 }
                 iprot.readListEnd();
               }
@@ -1703,14 +1703,14 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           case 12: // STATUSES
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list12 = iprot.readListBegin();
-                struct.statuses = new java.util.ArrayList<WorkflowStatus>(_list12.size);
-                WorkflowStatus _elem13;
-                for (int _i14 = 0; _i14 < _list12.size; ++_i14)
+                org.apache.thrift.protocol.TList _list76 = iprot.readListBegin();
+                struct.statuses = new java.util.ArrayList<WorkflowStatus>(_list76.size);
+                WorkflowStatus _elem77;
+                for (int _i78 = 0; _i78 < _list76.size; ++_i78)
                 {
-                  _elem13 = new WorkflowStatus();
-                  _elem13.read(iprot);
-                  struct.statuses.add(_elem13);
+                  _elem77 = new WorkflowStatus();
+                  _elem77.read(iprot);
+                  struct.statuses.add(_elem77);
                 }
                 iprot.readListEnd();
               }
@@ -1722,14 +1722,14 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           case 13: // ERRORS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list15 = iprot.readListBegin();
-                struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list15.size);
-                org.apache.airavata.model.commons.ErrorModel _elem16;
-                for (int _i17 = 0; _i17 < _list15.size; ++_i17)
+                org.apache.thrift.protocol.TList _list79 = iprot.readListBegin();
+                struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list79.size);
+                org.apache.airavata.model.commons.ErrorModel _elem80;
+                for (int _i81 = 0; _i81 < _list79.size; ++_i81)
                 {
-                  _elem16 = new org.apache.airavata.model.commons.ErrorModel();
-                  _elem16.read(iprot);
-                  struct.errors.add(_elem16);
+                  _elem80 = new org.apache.airavata.model.commons.ErrorModel();
+                  _elem80.read(iprot);
+                  struct.errors.add(_elem80);
                 }
                 iprot.readListEnd();
               }
@@ -1809,9 +1809,9 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           oprot.writeFieldBegin(NOTIFICATION_EMAILS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.notificationEmails.size()));
-            for (NotificationEmail _iter18 : struct.notificationEmails)
+            for (NotificationEmail _iter82 : struct.notificationEmails)
             {
-              _iter18.write(oprot);
+              _iter82.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1823,9 +1823,9 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           oprot.writeFieldBegin(APPLICATIONS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.applications.size()));
-            for (org.apache.airavata.model.workflow.WorkflowApplication _iter19 : struct.applications)
+            for (WorkflowApplication _iter83 : struct.applications)
             {
-              _iter19.write(oprot);
+              _iter83.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1837,9 +1837,9 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           oprot.writeFieldBegin(HANDLERS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.handlers.size()));
-            for (org.apache.airavata.model.workflow.WorkflowHandler _iter20 : struct.handlers)
+            for (WorkflowHandler _iter84 : struct.handlers)
             {
-              _iter20.write(oprot);
+              _iter84.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1851,9 +1851,9 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           oprot.writeFieldBegin(CONNECTIONS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.connections.size()));
-            for (org.apache.airavata.model.workflow.WorkflowConnection _iter21 : struct.connections)
+            for (WorkflowConnection _iter85 : struct.connections)
             {
-              _iter21.write(oprot);
+              _iter85.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1865,9 +1865,9 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           oprot.writeFieldBegin(STATUSES_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.statuses.size()));
-            for (WorkflowStatus _iter22 : struct.statuses)
+            for (WorkflowStatus _iter86 : struct.statuses)
             {
-              _iter22.write(oprot);
+              _iter86.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1879,9 +1879,9 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
           oprot.writeFieldBegin(ERRORS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.errors.size()));
-            for (org.apache.airavata.model.commons.ErrorModel _iter23 : struct.errors)
+            for (org.apache.airavata.model.commons.ErrorModel _iter87 : struct.errors)
             {
-              _iter23.write(oprot);
+              _iter87.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1961,54 +1961,54 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
       if (struct.isSetNotificationEmails()) {
         {
           oprot.writeI32(struct.notificationEmails.size());
-          for (NotificationEmail _iter24 : struct.notificationEmails)
+          for (NotificationEmail _iter88 : struct.notificationEmails)
           {
-            _iter24.write(oprot);
+            _iter88.write(oprot);
           }
         }
       }
       if (struct.isSetApplications()) {
         {
           oprot.writeI32(struct.applications.size());
-          for (org.apache.airavata.model.workflow.WorkflowApplication _iter25 : struct.applications)
+          for (WorkflowApplication _iter89 : struct.applications)
           {
-            _iter25.write(oprot);
+            _iter89.write(oprot);
           }
         }
       }
       if (struct.isSetHandlers()) {
         {
           oprot.writeI32(struct.handlers.size());
-          for (org.apache.airavata.model.workflow.WorkflowHandler _iter26 : struct.handlers)
+          for (WorkflowHandler _iter90 : struct.handlers)
           {
-            _iter26.write(oprot);
+            _iter90.write(oprot);
           }
         }
       }
       if (struct.isSetConnections()) {
         {
           oprot.writeI32(struct.connections.size());
-          for (org.apache.airavata.model.workflow.WorkflowConnection _iter27 : struct.connections)
+          for (WorkflowConnection _iter91 : struct.connections)
           {
-            _iter27.write(oprot);
+            _iter91.write(oprot);
           }
         }
       }
       if (struct.isSetStatuses()) {
         {
           oprot.writeI32(struct.statuses.size());
-          for (WorkflowStatus _iter28 : struct.statuses)
+          for (WorkflowStatus _iter92 : struct.statuses)
           {
-            _iter28.write(oprot);
+            _iter92.write(oprot);
           }
         }
       }
       if (struct.isSetErrors()) {
         {
           oprot.writeI32(struct.errors.size());
-          for (org.apache.airavata.model.commons.ErrorModel _iter29 : struct.errors)
+          for (org.apache.airavata.model.commons.ErrorModel _iter93 : struct.errors)
           {
-            _iter29.write(oprot);
+            _iter93.write(oprot);
           }
         }
       }
@@ -2044,84 +2044,84 @@ public class AiravataWorkflow implements org.apache.thrift.TBase<AiravataWorkflo
       }
       if (incoming.get(2)) {
         {
-          org.apache.thrift.protocol.TList _list30 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.notificationEmails = new java.util.ArrayList<NotificationEmail>(_list30.size);
-          NotificationEmail _elem31;
-          for (int _i32 = 0; _i32 < _list30.size; ++_i32)
+          org.apache.thrift.protocol.TList _list94 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.notificationEmails = new java.util.ArrayList<NotificationEmail>(_list94.size);
+          NotificationEmail _elem95;
+          for (int _i96 = 0; _i96 < _list94.size; ++_i96)
           {
-            _elem31 = new NotificationEmail();
-            _elem31.read(iprot);
-            struct.notificationEmails.add(_elem31);
+            _elem95 = new NotificationEmail();
+            _elem95.read(iprot);
+            struct.notificationEmails.add(_elem95);
           }
         }
         struct.setNotificationEmailsIsSet(true);
       }
       if (incoming.get(3)) {
         {
-          org.apache.thrift.protocol.TList _list33 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>(_list33.size);
-          org.apache.airavata.model.workflow.WorkflowApplication _elem34;
-          for (int _i35 = 0; _i35 < _list33.size; ++_i35)
+          org.apache.thrift.protocol.TList _list97 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.applications = new java.util.ArrayList<WorkflowApplication>(_list97.size);
+          WorkflowApplication _elem98;
+          for (int _i99 = 0; _i99 < _list97.size; ++_i99)
           {
-            _elem34 = new org.apache.airavata.model.workflow.WorkflowApplication();
-            _elem34.read(iprot);
-            struct.applications.add(_elem34);
+            _elem98 = new WorkflowApplication();
+            _elem98.read(iprot);
+            struct.applications.add(_elem98);
           }
         }
         struct.setApplicationsIsSet(true);
       }
       if (incoming.get(4)) {
         {
-          org.apache.thrift.protocol.TList _list36 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.handlers = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowHandler>(_list36.size);
-          org.apache.airavata.model.workflow.WorkflowHandler _elem37;
-          for (int _i38 = 0; _i38 < _list36.size; ++_i38)
+          org.apache.thrift.protocol.TList _list100 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.handlers = new java.util.ArrayList<WorkflowHandler>(_list100.size);
+          WorkflowHandler _elem101;
+          for (int _i102 = 0; _i102 < _list100.size; ++_i102)
           {
-            _elem37 = new org.apache.airavata.model.workflow.WorkflowHandler();
-            _elem37.read(iprot);
-            struct.handlers.add(_elem37);
+            _elem101 = new WorkflowHandler();
+            _elem101.read(iprot);
+            struct.handlers.add(_elem101);
           }
         }
         struct.setHandlersIsSet(true);
       }
       if (incoming.get(5)) {
         {
-          org.apache.thrift.protocol.TList _list39 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>(_list39.size);
-          org.apache.airavata.model.workflow.WorkflowConnection _elem40;
-          for (int _i41 = 0; _i41 < _list39.size; ++_i41)
+          org.apache.thrift.protocol.TList _list103 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.connections = new java.util.ArrayList<WorkflowConnection>(_list103.size);
+          WorkflowConnection _elem104;
+          for (int _i105 = 0; _i105 < _list103.size; ++_i105)
           {
-            _elem40 = new org.apache.airavata.model.workflow.WorkflowConnection();
-            _elem40.read(iprot);
-            struct.connections.add(_elem40);
+            _elem104 = new WorkflowConnection();
+            _elem104.read(iprot);
+            struct.connections.add(_elem104);
           }
         }
         struct.setConnectionsIsSet(true);
       }
       if (incoming.get(6)) {
         {
-          org.apache.thrift.protocol.TList _list42 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.statuses = new java.util.ArrayList<WorkflowStatus>(_list42.size);
-          WorkflowStatus _elem43;
-          for (int _i44 = 0; _i44 < _list42.size; ++_i44)
+          org.apache.thrift.protocol.TList _list106 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.statuses = new java.util.ArrayList<WorkflowStatus>(_list106.size);
+          WorkflowStatus _elem107;
+          for (int _i108 = 0; _i108 < _list106.size; ++_i108)
           {
-            _elem43 = new WorkflowStatus();
-            _elem43.read(iprot);
-            struct.statuses.add(_elem43);
+            _elem107 = new WorkflowStatus();
+            _elem107.read(iprot);
+            struct.statuses.add(_elem107);
           }
         }
         struct.setStatusesIsSet(true);
       }
       if (incoming.get(7)) {
         {
-          org.apache.thrift.protocol.TList _list45 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list45.size);
-          org.apache.airavata.model.commons.ErrorModel _elem46;
-          for (int _i47 = 0; _i47 < _list45.size; ++_i47)
+          org.apache.thrift.protocol.TList _list109 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list109.size);
+          org.apache.airavata.model.commons.ErrorModel _elem110;
+          for (int _i111 = 0; _i111 < _list109.size; ++_i111)
           {
-            _elem46 = new org.apache.airavata.model.commons.ErrorModel();
-            _elem46.read(iprot);
-            struct.errors.add(_elem46);
+            _elem110 = new org.apache.airavata.model.commons.ErrorModel();
+            _elem110.read(iprot);
+            struct.errors.add(_elem110);
           }
         }
         struct.setErrorsIsSet(true);
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowConnection.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowConnection.java
index 82d9404..f94e216 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowConnection.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowConnection.java
@@ -44,10 +44,10 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
 
   private java.lang.String id; // required
   private boolean belongsToMainWorkflow; // required
-  private org.apache.airavata.model.workflow.core.ComponentType fromType; // required
+  private ComponentType fromType; // required
   private java.lang.String fromId; // required
   private java.lang.String fromOutputName; // required
-  private org.apache.airavata.model.workflow.core.ComponentType toType; // required
+  private ComponentType toType; // required
   private java.lang.String toId; // required
   private java.lang.String toInputName; // required
   private long createdAt; // optional
@@ -57,17 +57,9 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
   public enum _Fields implements org.apache.thrift.TFieldIdEnum {
     ID((short)1, "id"),
     BELONGS_TO_MAIN_WORKFLOW((short)2, "belongsToMainWorkflow"),
-    /**
-     * 
-     * @see org.apache.airavata.model.workflow.core.ComponentType
-     */
     FROM_TYPE((short)3, "fromType"),
     FROM_ID((short)4, "fromId"),
     FROM_OUTPUT_NAME((short)5, "fromOutputName"),
-    /**
-     * 
-     * @see org.apache.airavata.model.workflow.core.ComponentType
-     */
     TO_TYPE((short)6, "toType"),
     TO_ID((short)7, "toId"),
     TO_INPUT_NAME((short)8, "toInputName"),
@@ -160,13 +152,13 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
     tmpMap.put(_Fields.BELONGS_TO_MAIN_WORKFLOW, new org.apache.thrift.meta_data.FieldMetaData("belongsToMainWorkflow", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.BOOL)));
     tmpMap.put(_Fields.FROM_TYPE, new org.apache.thrift.meta_data.FieldMetaData("fromType", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.airavata.model.workflow.core.ComponentType.class)));
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.ENUM        , "ComponentType")));
     tmpMap.put(_Fields.FROM_ID, new org.apache.thrift.meta_data.FieldMetaData("fromId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.FROM_OUTPUT_NAME, new org.apache.thrift.meta_data.FieldMetaData("fromOutputName", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.TO_TYPE, new org.apache.thrift.meta_data.FieldMetaData("toType", org.apache.thrift.TFieldRequirementType.REQUIRED, 
-        new org.apache.thrift.meta_data.EnumMetaData(org.apache.thrift.protocol.TType.ENUM, org.apache.airavata.model.workflow.core.ComponentType.class)));
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.ENUM        , "ComponentType")));
     tmpMap.put(_Fields.TO_ID, new org.apache.thrift.meta_data.FieldMetaData("toId", org.apache.thrift.TFieldRequirementType.REQUIRED, 
         new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
     tmpMap.put(_Fields.TO_INPUT_NAME, new org.apache.thrift.meta_data.FieldMetaData("toInputName", org.apache.thrift.TFieldRequirementType.REQUIRED, 
@@ -187,10 +179,10 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
   public WorkflowConnection(
     java.lang.String id,
     boolean belongsToMainWorkflow,
-    org.apache.airavata.model.workflow.core.ComponentType fromType,
+    ComponentType fromType,
     java.lang.String fromId,
     java.lang.String fromOutputName,
-    org.apache.airavata.model.workflow.core.ComponentType toType,
+    ComponentType toType,
     java.lang.String toId,
     java.lang.String toInputName)
   {
@@ -304,19 +296,11 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
     __isset_bitfield = org.apache.thrift.EncodingUtils.setBit(__isset_bitfield, __BELONGSTOMAINWORKFLOW_ISSET_ID, value);
   }
 
-  /**
-   * 
-   * @see org.apache.airavata.model.workflow.core.ComponentType
-   */
-  public org.apache.airavata.model.workflow.core.ComponentType getFromType() {
+  public ComponentType getFromType() {
     return this.fromType;
   }
 
-  /**
-   * 
-   * @see org.apache.airavata.model.workflow.core.ComponentType
-   */
-  public void setFromType(org.apache.airavata.model.workflow.core.ComponentType fromType) {
+  public void setFromType(ComponentType fromType) {
     this.fromType = fromType;
   }
 
@@ -381,19 +365,11 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
     }
   }
 
-  /**
-   * 
-   * @see org.apache.airavata.model.workflow.core.ComponentType
-   */
-  public org.apache.airavata.model.workflow.core.ComponentType getToType() {
+  public ComponentType getToType() {
     return this.toType;
   }
 
-  /**
-   * 
-   * @see org.apache.airavata.model.workflow.core.ComponentType
-   */
-  public void setToType(org.apache.airavata.model.workflow.core.ComponentType toType) {
+  public void setToType(ComponentType toType) {
     this.toType = toType;
   }
 
@@ -524,7 +500,7 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
       if (value == null) {
         unsetFromType();
       } else {
-        setFromType((org.apache.airavata.model.workflow.core.ComponentType)value);
+        setFromType((ComponentType)value);
       }
       break;
 
@@ -548,7 +524,7 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
       if (value == null) {
         unsetToType();
       } else {
-        setToType((org.apache.airavata.model.workflow.core.ComponentType)value);
+        setToType((ComponentType)value);
       }
       break;
 
@@ -1101,7 +1077,7 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
             break;
           case 3: // FROM_TYPE
             if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
-              struct.fromType = org.apache.airavata.model.workflow.core.ComponentType.findByValue(iprot.readI32());
+              struct.fromType = org.apache.airavata.model.workflow.ComponentType.findByValue(iprot.readI32());
               struct.setFromTypeIsSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
@@ -1125,7 +1101,7 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
             break;
           case 6: // TO_TYPE
             if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
-              struct.toType = org.apache.airavata.model.workflow.core.ComponentType.findByValue(iprot.readI32());
+              struct.toType = org.apache.airavata.model.workflow.ComponentType.findByValue(iprot.readI32());
               struct.setToTypeIsSet(true);
             } else { 
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
@@ -1272,13 +1248,13 @@ public class WorkflowConnection implements org.apache.thrift.TBase<WorkflowConne
       struct.setIdIsSet(true);
       struct.belongsToMainWorkflow = iprot.readBool();
       struct.setBelongsToMainWorkflowIsSet(true);
-      struct.fromType = org.apache.airavata.model.workflow.core.ComponentType.findByValue(iprot.readI32());
+      struct.fromType = org.apache.airavata.model.workflow.ComponentType.findByValue(iprot.readI32());
       struct.setFromTypeIsSet(true);
       struct.fromId = iprot.readString();
       struct.setFromIdIsSet(true);
       struct.fromOutputName = iprot.readString();
       struct.setFromOutputNameIsSet(true);
-      struct.toType = org.apache.airavata.model.workflow.core.ComponentType.findByValue(iprot.readI32());
+      struct.toType = org.apache.airavata.model.workflow.ComponentType.findByValue(iprot.readI32());
       struct.setToTypeIsSet(true);
       struct.toId = iprot.readString();
       struct.setToIdIsSet(true);
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowHandler.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowHandler.java
index e20cd56..bd5aa35 100644
--- a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowHandler.java
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workflow/WorkflowHandler.java
@@ -34,12 +34,11 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
   private static final org.apache.thrift.protocol.TField INPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("inputs", org.apache.thrift.protocol.TType.LIST, (short)4);
   private static final org.apache.thrift.protocol.TField OUTPUTS_FIELD_DESC = new org.apache.thrift.protocol.TField("outputs", org.apache.thrift.protocol.TType.LIST, (short)5);
   private static final org.apache.thrift.protocol.TField APPLICATIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("applications", org.apache.thrift.protocol.TType.LIST, (short)6);
-  private static final org.apache.thrift.protocol.TField HANDLERS_FIELD_DESC = new org.apache.thrift.protocol.TField("handlers", org.apache.thrift.protocol.TType.LIST, (short)7);
-  private static final org.apache.thrift.protocol.TField CONNECTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("connections", org.apache.thrift.protocol.TType.LIST, (short)8);
-  private static final org.apache.thrift.protocol.TField STATUSES_FIELD_DESC = new org.apache.thrift.protocol.TField("statuses", org.apache.thrift.protocol.TType.LIST, (short)9);
-  private static final org.apache.thrift.protocol.TField ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("errors", org.apache.thrift.protocol.TType.LIST, (short)10);
-  private static final org.apache.thrift.protocol.TField CREATED_AT_FIELD_DESC = new org.apache.thrift.protocol.TField("createdAt", org.apache.thrift.protocol.TType.I64, (short)11);
-  private static final org.apache.thrift.protocol.TField UPDATED_AT_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedAt", org.apache.thrift.protocol.TType.I64, (short)12);
+  private static final org.apache.thrift.protocol.TField CONNECTIONS_FIELD_DESC = new org.apache.thrift.protocol.TField("connections", org.apache.thrift.protocol.TType.LIST, (short)7);
+  private static final org.apache.thrift.protocol.TField STATUSES_FIELD_DESC = new org.apache.thrift.protocol.TField("statuses", org.apache.thrift.protocol.TType.LIST, (short)8);
+  private static final org.apache.thrift.protocol.TField ERRORS_FIELD_DESC = new org.apache.thrift.protocol.TField("errors", org.apache.thrift.protocol.TType.LIST, (short)9);
+  private static final org.apache.thrift.protocol.TField CREATED_AT_FIELD_DESC = new org.apache.thrift.protocol.TField("createdAt", org.apache.thrift.protocol.TType.I64, (short)10);
+  private static final org.apache.thrift.protocol.TField UPDATED_AT_FIELD_DESC = new org.apache.thrift.protocol.TField("updatedAt", org.apache.thrift.protocol.TType.I64, (short)11);
 
   private static final org.apache.thrift.scheme.SchemeFactory STANDARD_SCHEME_FACTORY = new WorkflowHandlerStandardSchemeFactory();
   private static final org.apache.thrift.scheme.SchemeFactory TUPLE_SCHEME_FACTORY = new WorkflowHandlerTupleSchemeFactory();
@@ -49,9 +48,8 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
   private HandlerType type; // required
   private java.util.List<org.apache.airavata.model.application.io.InputDataObjectType> inputs; // optional
   private java.util.List<org.apache.airavata.model.application.io.OutputDataObjectType> outputs; // optional
-  private java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> applications; // optional
-  private java.util.List<WorkflowHandler> handlers; // optional
-  private java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> connections; // optional
+  private java.util.List<WorkflowApplication> applications; // optional
+  private java.util.List<WorkflowConnection> connections; // optional
   private java.util.List<HandlerStatus> statuses; // optional
   private java.util.List<org.apache.airavata.model.commons.ErrorModel> errors; // optional
   private long createdAt; // optional
@@ -69,12 +67,11 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
     INPUTS((short)4, "inputs"),
     OUTPUTS((short)5, "outputs"),
     APPLICATIONS((short)6, "applications"),
-    HANDLERS((short)7, "handlers"),
-    CONNECTIONS((short)8, "connections"),
-    STATUSES((short)9, "statuses"),
-    ERRORS((short)10, "errors"),
-    CREATED_AT((short)11, "createdAt"),
-    UPDATED_AT((short)12, "updatedAt");
+    CONNECTIONS((short)7, "connections"),
+    STATUSES((short)8, "statuses"),
+    ERRORS((short)9, "errors"),
+    CREATED_AT((short)10, "createdAt"),
+    UPDATED_AT((short)11, "updatedAt");
 
     private static final java.util.Map<java.lang.String, _Fields> byName = new java.util.HashMap<java.lang.String, _Fields>();
 
@@ -101,17 +98,15 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           return OUTPUTS;
         case 6: // APPLICATIONS
           return APPLICATIONS;
-        case 7: // HANDLERS
-          return HANDLERS;
-        case 8: // CONNECTIONS
+        case 7: // CONNECTIONS
           return CONNECTIONS;
-        case 9: // STATUSES
+        case 8: // STATUSES
           return STATUSES;
-        case 10: // ERRORS
+        case 9: // ERRORS
           return ERRORS;
-        case 11: // CREATED_AT
+        case 10: // CREATED_AT
           return CREATED_AT;
-        case 12: // UPDATED_AT
+        case 11: // UPDATED_AT
           return UPDATED_AT;
         default:
           return null;
@@ -157,7 +152,7 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
   private static final int __CREATEDAT_ISSET_ID = 1;
   private static final int __UPDATEDAT_ISSET_ID = 2;
   private byte __isset_bitfield = 0;
-  private static final _Fields optionals[] = {_Fields.INPUTS,_Fields.OUTPUTS,_Fields.APPLICATIONS,_Fields.HANDLERS,_Fields.CONNECTIONS,_Fields.STATUSES,_Fields.ERRORS,_Fields.CREATED_AT,_Fields.UPDATED_AT};
+  private static final _Fields optionals[] = {_Fields.INPUTS,_Fields.OUTPUTS,_Fields.APPLICATIONS,_Fields.CONNECTIONS,_Fields.STATUSES,_Fields.ERRORS,_Fields.CREATED_AT,_Fields.UPDATED_AT};
   public static final java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
   static {
     java.util.Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new java.util.EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
@@ -175,13 +170,10 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
             new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.application.io.OutputDataObjectType.class))));
     tmpMap.put(_Fields.APPLICATIONS, new org.apache.thrift.meta_data.FieldMetaData("applications", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workflow.WorkflowApplication.class))));
-    tmpMap.put(_Fields.HANDLERS, new org.apache.thrift.meta_data.FieldMetaData("handlers", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
-        new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-            new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRUCT            , "WorkflowHandler"))));
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowApplication.class))));
     tmpMap.put(_Fields.CONNECTIONS, new org.apache.thrift.meta_data.FieldMetaData("connections", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
-            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, org.apache.airavata.model.workflow.WorkflowConnection.class))));
+            new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, WorkflowConnection.class))));
     tmpMap.put(_Fields.STATUSES, new org.apache.thrift.meta_data.FieldMetaData("statuses", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
         new org.apache.thrift.meta_data.ListMetaData(org.apache.thrift.protocol.TType.LIST, 
             new org.apache.thrift.meta_data.StructMetaData(org.apache.thrift.protocol.TType.STRUCT, HandlerStatus.class))));
@@ -238,23 +230,16 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
       this.outputs = __this__outputs;
     }
     if (other.isSetApplications()) {
-      java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> __this__applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>(other.applications.size());
-      for (org.apache.airavata.model.workflow.WorkflowApplication other_element : other.applications) {
-        __this__applications.add(new org.apache.airavata.model.workflow.WorkflowApplication(other_element));
+      java.util.List<WorkflowApplication> __this__applications = new java.util.ArrayList<WorkflowApplication>(other.applications.size());
+      for (WorkflowApplication other_element : other.applications) {
+        __this__applications.add(new WorkflowApplication(other_element));
       }
       this.applications = __this__applications;
     }
-    if (other.isSetHandlers()) {
-      java.util.List<WorkflowHandler> __this__handlers = new java.util.ArrayList<WorkflowHandler>(other.handlers.size());
-      for (WorkflowHandler other_element : other.handlers) {
-        __this__handlers.add(other_element);
-      }
-      this.handlers = __this__handlers;
-    }
     if (other.isSetConnections()) {
-      java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> __this__connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>(other.connections.size());
-      for (org.apache.airavata.model.workflow.WorkflowConnection other_element : other.connections) {
-        __this__connections.add(new org.apache.airavata.model.workflow.WorkflowConnection(other_element));
+      java.util.List<WorkflowConnection> __this__connections = new java.util.ArrayList<WorkflowConnection>(other.connections.size());
+      for (WorkflowConnection other_element : other.connections) {
+        __this__connections.add(new WorkflowConnection(other_element));
       }
       this.connections = __this__connections;
     }
@@ -289,7 +274,6 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
     this.inputs = null;
     this.outputs = null;
     this.applications = null;
-    this.handlers = null;
     this.connections = null;
     this.statuses = null;
     this.errors = null;
@@ -455,22 +439,22 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
     return (this.applications == null) ? 0 : this.applications.size();
   }
 
-  public java.util.Iterator<org.apache.airavata.model.workflow.WorkflowApplication> getApplicationsIterator() {
+  public java.util.Iterator<WorkflowApplication> getApplicationsIterator() {
     return (this.applications == null) ? null : this.applications.iterator();
   }
 
-  public void addToApplications(org.apache.airavata.model.workflow.WorkflowApplication elem) {
+  public void addToApplications(WorkflowApplication elem) {
     if (this.applications == null) {
-      this.applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>();
+      this.applications = new java.util.ArrayList<WorkflowApplication>();
     }
     this.applications.add(elem);
   }
 
-  public java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> getApplications() {
+  public java.util.List<WorkflowApplication> getApplications() {
     return this.applications;
   }
 
-  public void setApplications(java.util.List<org.apache.airavata.model.workflow.WorkflowApplication> applications) {
+  public void setApplications(java.util.List<WorkflowApplication> applications) {
     this.applications = applications;
   }
 
@@ -489,64 +473,26 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
     }
   }
 
-  public int getHandlersSize() {
-    return (this.handlers == null) ? 0 : this.handlers.size();
-  }
-
-  public java.util.Iterator<WorkflowHandler> getHandlersIterator() {
-    return (this.handlers == null) ? null : this.handlers.iterator();
-  }
-
-  public void addToHandlers(WorkflowHandler elem) {
-    if (this.handlers == null) {
-      this.handlers = new java.util.ArrayList<WorkflowHandler>();
-    }
-    this.handlers.add(elem);
-  }
-
-  public java.util.List<WorkflowHandler> getHandlers() {
-    return this.handlers;
-  }
-
-  public void setHandlers(java.util.List<WorkflowHandler> handlers) {
-    this.handlers = handlers;
-  }
-
-  public void unsetHandlers() {
-    this.handlers = null;
-  }
-
-  /** Returns true if field handlers is set (has been assigned a value) and false otherwise */
-  public boolean isSetHandlers() {
-    return this.handlers != null;
-  }
-
-  public void setHandlersIsSet(boolean value) {
-    if (!value) {
-      this.handlers = null;
-    }
-  }
-
   public int getConnectionsSize() {
     return (this.connections == null) ? 0 : this.connections.size();
   }
 
-  public java.util.Iterator<org.apache.airavata.model.workflow.WorkflowConnection> getConnectionsIterator() {
+  public java.util.Iterator<WorkflowConnection> getConnectionsIterator() {
     return (this.connections == null) ? null : this.connections.iterator();
   }
 
-  public void addToConnections(org.apache.airavata.model.workflow.WorkflowConnection elem) {
+  public void addToConnections(WorkflowConnection elem) {
     if (this.connections == null) {
-      this.connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>();
+      this.connections = new java.util.ArrayList<WorkflowConnection>();
     }
     this.connections.add(elem);
   }
 
-  public java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> getConnections() {
+  public java.util.List<WorkflowConnection> getConnections() {
     return this.connections;
   }
 
-  public void setConnections(java.util.List<org.apache.airavata.model.workflow.WorkflowConnection> connections) {
+  public void setConnections(java.util.List<WorkflowConnection> connections) {
     this.connections = connections;
   }
 
@@ -731,15 +677,7 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
       if (value == null) {
         unsetApplications();
       } else {
-        setApplications((java.util.List<org.apache.airavata.model.workflow.WorkflowApplication>)value);
-      }
-      break;
-
-    case HANDLERS:
-      if (value == null) {
-        unsetHandlers();
-      } else {
-        setHandlers((java.util.List<WorkflowHandler>)value);
+        setApplications((java.util.List<WorkflowApplication>)value);
       }
       break;
 
@@ -747,7 +685,7 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
       if (value == null) {
         unsetConnections();
       } else {
-        setConnections((java.util.List<org.apache.airavata.model.workflow.WorkflowConnection>)value);
+        setConnections((java.util.List<WorkflowConnection>)value);
       }
       break;
 
@@ -806,9 +744,6 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
     case APPLICATIONS:
       return getApplications();
 
-    case HANDLERS:
-      return getHandlers();
-
     case CONNECTIONS:
       return getConnections();
 
@@ -847,8 +782,6 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
       return isSetOutputs();
     case APPLICATIONS:
       return isSetApplications();
-    case HANDLERS:
-      return isSetHandlers();
     case CONNECTIONS:
       return isSetConnections();
     case STATUSES:
@@ -932,15 +865,6 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
         return false;
     }
 
-    boolean this_present_handlers = true && this.isSetHandlers();
-    boolean that_present_handlers = true && that.isSetHandlers();
-    if (this_present_handlers || that_present_handlers) {
-      if (!(this_present_handlers && that_present_handlers))
-        return false;
-      if (!this.handlers.equals(that.handlers))
-        return false;
-    }
-
     boolean this_present_connections = true && this.isSetConnections();
     boolean that_present_connections = true && that.isSetConnections();
     if (this_present_connections || that_present_connections) {
@@ -1015,10 +939,6 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
     if (isSetApplications())
       hashCode = hashCode * 8191 + applications.hashCode();
 
-    hashCode = hashCode * 8191 + ((isSetHandlers()) ? 131071 : 524287);
-    if (isSetHandlers())
-      hashCode = hashCode * 8191 + handlers.hashCode();
-
     hashCode = hashCode * 8191 + ((isSetConnections()) ? 131071 : 524287);
     if (isSetConnections())
       hashCode = hashCode * 8191 + connections.hashCode();
@@ -1110,16 +1030,6 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
         return lastComparison;
       }
     }
-    lastComparison = java.lang.Boolean.valueOf(isSetHandlers()).compareTo(other.isSetHandlers());
-    if (lastComparison != 0) {
-      return lastComparison;
-    }
-    if (isSetHandlers()) {
-      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.handlers, other.handlers);
-      if (lastComparison != 0) {
-        return lastComparison;
-      }
-    }
     lastComparison = java.lang.Boolean.valueOf(isSetConnections()).compareTo(other.isSetConnections());
     if (lastComparison != 0) {
       return lastComparison;
@@ -1239,16 +1149,6 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
       }
       first = false;
     }
-    if (isSetHandlers()) {
-      if (!first) sb.append(", ");
-      sb.append("handlers:");
-      if (this.handlers == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.handlers);
-      }
-      first = false;
-    }
     if (isSetConnections()) {
       if (!first) sb.append(", ");
       sb.append("connections:");
@@ -1375,14 +1275,14 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           case 4: // INPUTS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list0 = iprot.readListBegin();
-                struct.inputs = new java.util.ArrayList<org.apache.airavata.model.application.io.InputDataObjectType>(_list0.size);
-                org.apache.airavata.model.application.io.InputDataObjectType _elem1;
-                for (int _i2 = 0; _i2 < _list0.size; ++_i2)
+                org.apache.thrift.protocol.TList _list16 = iprot.readListBegin();
+                struct.inputs = new java.util.ArrayList<org.apache.airavata.model.application.io.InputDataObjectType>(_list16.size);
+                org.apache.airavata.model.application.io.InputDataObjectType _elem17;
+                for (int _i18 = 0; _i18 < _list16.size; ++_i18)
                 {
-                  _elem1 = new org.apache.airavata.model.application.io.InputDataObjectType();
-                  _elem1.read(iprot);
-                  struct.inputs.add(_elem1);
+                  _elem17 = new org.apache.airavata.model.application.io.InputDataObjectType();
+                  _elem17.read(iprot);
+                  struct.inputs.add(_elem17);
                 }
                 iprot.readListEnd();
               }
@@ -1394,14 +1294,14 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           case 5: // OUTPUTS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list3 = iprot.readListBegin();
-                struct.outputs = new java.util.ArrayList<org.apache.airavata.model.application.io.OutputDataObjectType>(_list3.size);
-                org.apache.airavata.model.application.io.OutputDataObjectType _elem4;
-                for (int _i5 = 0; _i5 < _list3.size; ++_i5)
+                org.apache.thrift.protocol.TList _list19 = iprot.readListBegin();
+                struct.outputs = new java.util.ArrayList<org.apache.airavata.model.application.io.OutputDataObjectType>(_list19.size);
+                org.apache.airavata.model.application.io.OutputDataObjectType _elem20;
+                for (int _i21 = 0; _i21 < _list19.size; ++_i21)
                 {
-                  _elem4 = new org.apache.airavata.model.application.io.OutputDataObjectType();
-                  _elem4.read(iprot);
-                  struct.outputs.add(_elem4);
+                  _elem20 = new org.apache.airavata.model.application.io.OutputDataObjectType();
+                  _elem20.read(iprot);
+                  struct.outputs.add(_elem20);
                 }
                 iprot.readListEnd();
               }
@@ -1413,14 +1313,14 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           case 6: // APPLICATIONS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list6 = iprot.readListBegin();
-                struct.applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>(_list6.size);
-                org.apache.airavata.model.workflow.WorkflowApplication _elem7;
-                for (int _i8 = 0; _i8 < _list6.size; ++_i8)
+                org.apache.thrift.protocol.TList _list22 = iprot.readListBegin();
+                struct.applications = new java.util.ArrayList<WorkflowApplication>(_list22.size);
+                WorkflowApplication _elem23;
+                for (int _i24 = 0; _i24 < _list22.size; ++_i24)
                 {
-                  _elem7 = new org.apache.airavata.model.workflow.WorkflowApplication();
-                  _elem7.read(iprot);
-                  struct.applications.add(_elem7);
+                  _elem23 = new WorkflowApplication();
+                  _elem23.read(iprot);
+                  struct.applications.add(_elem23);
                 }
                 iprot.readListEnd();
               }
@@ -1429,36 +1329,17 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 7: // HANDLERS
+          case 7: // CONNECTIONS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list9 = iprot.readListBegin();
-                struct.handlers = new java.util.ArrayList<WorkflowHandler>(_list9.size);
-                WorkflowHandler _elem10;
-                for (int _i11 = 0; _i11 < _list9.size; ++_i11)
+                org.apache.thrift.protocol.TList _list25 = iprot.readListBegin();
+                struct.connections = new java.util.ArrayList<WorkflowConnection>(_list25.size);
+                WorkflowConnection _elem26;
+                for (int _i27 = 0; _i27 < _list25.size; ++_i27)
                 {
-                  _elem10 = new WorkflowHandler();
-                  _elem10.read(iprot);
-                  struct.handlers.add(_elem10);
-                }
-                iprot.readListEnd();
-              }
-              struct.setHandlersIsSet(true);
-            } else { 
-              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-            }
-            break;
-          case 8: // CONNECTIONS
-            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
-              {
-                org.apache.thrift.protocol.TList _list12 = iprot.readListBegin();
-                struct.connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>(_list12.size);
-                org.apache.airavata.model.workflow.WorkflowConnection _elem13;
-                for (int _i14 = 0; _i14 < _list12.size; ++_i14)
-                {
-                  _elem13 = new org.apache.airavata.model.workflow.WorkflowConnection();
-                  _elem13.read(iprot);
-                  struct.connections.add(_elem13);
+                  _elem26 = new WorkflowConnection();
+                  _elem26.read(iprot);
+                  struct.connections.add(_elem26);
                 }
                 iprot.readListEnd();
               }
@@ -1467,17 +1348,17 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 9: // STATUSES
+          case 8: // STATUSES
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list15 = iprot.readListBegin();
-                struct.statuses = new java.util.ArrayList<HandlerStatus>(_list15.size);
-                HandlerStatus _elem16;
-                for (int _i17 = 0; _i17 < _list15.size; ++_i17)
+                org.apache.thrift.protocol.TList _list28 = iprot.readListBegin();
+                struct.statuses = new java.util.ArrayList<HandlerStatus>(_list28.size);
+                HandlerStatus _elem29;
+                for (int _i30 = 0; _i30 < _list28.size; ++_i30)
                 {
-                  _elem16 = new HandlerStatus();
-                  _elem16.read(iprot);
-                  struct.statuses.add(_elem16);
+                  _elem29 = new HandlerStatus();
+                  _elem29.read(iprot);
+                  struct.statuses.add(_elem29);
                 }
                 iprot.readListEnd();
               }
@@ -1486,17 +1367,17 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 10: // ERRORS
+          case 9: // ERRORS
             if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
               {
-                org.apache.thrift.protocol.TList _list18 = iprot.readListBegin();
-                struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list18.size);
-                org.apache.airavata.model.commons.ErrorModel _elem19;
-                for (int _i20 = 0; _i20 < _list18.size; ++_i20)
+                org.apache.thrift.protocol.TList _list31 = iprot.readListBegin();
+                struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list31.size);
+                org.apache.airavata.model.commons.ErrorModel _elem32;
+                for (int _i33 = 0; _i33 < _list31.size; ++_i33)
                 {
-                  _elem19 = new org.apache.airavata.model.commons.ErrorModel();
-                  _elem19.read(iprot);
-                  struct.errors.add(_elem19);
+                  _elem32 = new org.apache.airavata.model.commons.ErrorModel();
+                  _elem32.read(iprot);
+                  struct.errors.add(_elem32);
                 }
                 iprot.readListEnd();
               }
@@ -1505,7 +1386,7 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 11: // CREATED_AT
+          case 10: // CREATED_AT
             if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
               struct.createdAt = iprot.readI64();
               struct.setCreatedAtIsSet(true);
@@ -1513,7 +1394,7 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
               org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
             }
             break;
-          case 12: // UPDATED_AT
+          case 11: // UPDATED_AT
             if (schemeField.type == org.apache.thrift.protocol.TType.I64) {
               struct.updatedAt = iprot.readI64();
               struct.setUpdatedAtIsSet(true);
@@ -1552,9 +1433,9 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           oprot.writeFieldBegin(INPUTS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.inputs.size()));
-            for (org.apache.airavata.model.application.io.InputDataObjectType _iter21 : struct.inputs)
+            for (org.apache.airavata.model.application.io.InputDataObjectType _iter34 : struct.inputs)
             {
-              _iter21.write(oprot);
+              _iter34.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1566,9 +1447,9 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           oprot.writeFieldBegin(OUTPUTS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.outputs.size()));
-            for (org.apache.airavata.model.application.io.OutputDataObjectType _iter22 : struct.outputs)
+            for (org.apache.airavata.model.application.io.OutputDataObjectType _iter35 : struct.outputs)
             {
-              _iter22.write(oprot);
+              _iter35.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1580,23 +1461,9 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           oprot.writeFieldBegin(APPLICATIONS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.applications.size()));
-            for (org.apache.airavata.model.workflow.WorkflowApplication _iter23 : struct.applications)
+            for (WorkflowApplication _iter36 : struct.applications)
             {
-              _iter23.write(oprot);
-            }
-            oprot.writeListEnd();
-          }
-          oprot.writeFieldEnd();
-        }
-      }
-      if (struct.handlers != null) {
-        if (struct.isSetHandlers()) {
-          oprot.writeFieldBegin(HANDLERS_FIELD_DESC);
-          {
-            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.handlers.size()));
-            for (WorkflowHandler _iter24 : struct.handlers)
-            {
-              _iter24.write(oprot);
+              _iter36.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1608,9 +1475,9 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           oprot.writeFieldBegin(CONNECTIONS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.connections.size()));
-            for (org.apache.airavata.model.workflow.WorkflowConnection _iter25 : struct.connections)
+            for (WorkflowConnection _iter37 : struct.connections)
             {
-              _iter25.write(oprot);
+              _iter37.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1622,9 +1489,9 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           oprot.writeFieldBegin(STATUSES_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.statuses.size()));
-            for (HandlerStatus _iter26 : struct.statuses)
+            for (HandlerStatus _iter38 : struct.statuses)
             {
-              _iter26.write(oprot);
+              _iter38.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1636,9 +1503,9 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
           oprot.writeFieldBegin(ERRORS_FIELD_DESC);
           {
             oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.errors.size()));
-            for (org.apache.airavata.model.commons.ErrorModel _iter27 : struct.errors)
+            for (org.apache.airavata.model.commons.ErrorModel _iter39 : struct.errors)
             {
-              _iter27.write(oprot);
+              _iter39.write(oprot);
             }
             oprot.writeListEnd();
           }
@@ -1685,85 +1552,73 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
       if (struct.isSetApplications()) {
         optionals.set(2);
       }
-      if (struct.isSetHandlers()) {
-        optionals.set(3);
-      }
       if (struct.isSetConnections()) {
-        optionals.set(4);
+        optionals.set(3);
       }
       if (struct.isSetStatuses()) {
-        optionals.set(5);
+        optionals.set(4);
       }
       if (struct.isSetErrors()) {
-        optionals.set(6);
+        optionals.set(5);
       }
       if (struct.isSetCreatedAt()) {
-        optionals.set(7);
+        optionals.set(6);
       }
       if (struct.isSetUpdatedAt()) {
-        optionals.set(8);
+        optionals.set(7);
       }
-      oprot.writeBitSet(optionals, 9);
+      oprot.writeBitSet(optionals, 8);
       if (struct.isSetInputs()) {
         {
           oprot.writeI32(struct.inputs.size());
-          for (org.apache.airavata.model.application.io.InputDataObjectType _iter28 : struct.inputs)
+          for (org.apache.airavata.model.application.io.InputDataObjectType _iter40 : struct.inputs)
           {
-            _iter28.write(oprot);
+            _iter40.write(oprot);
           }
         }
       }
       if (struct.isSetOutputs()) {
         {
           oprot.writeI32(struct.outputs.size());
-          for (org.apache.airavata.model.application.io.OutputDataObjectType _iter29 : struct.outputs)
+          for (org.apache.airavata.model.application.io.OutputDataObjectType _iter41 : struct.outputs)
           {
-            _iter29.write(oprot);
+            _iter41.write(oprot);
           }
         }
       }
       if (struct.isSetApplications()) {
         {
           oprot.writeI32(struct.applications.size());
-          for (org.apache.airavata.model.workflow.WorkflowApplication _iter30 : struct.applications)
-          {
-            _iter30.write(oprot);
-          }
-        }
-      }
-      if (struct.isSetHandlers()) {
-        {
-          oprot.writeI32(struct.handlers.size());
-          for (WorkflowHandler _iter31 : struct.handlers)
+          for (WorkflowApplication _iter42 : struct.applications)
           {
-            _iter31.write(oprot);
+            _iter42.write(oprot);
           }
         }
       }
       if (struct.isSetConnections()) {
         {
           oprot.writeI32(struct.connections.size());
-          for (org.apache.airavata.model.workflow.WorkflowConnection _iter32 : struct.connections)
+          for (WorkflowConnection _iter43 : struct.connections)
           {
-            _iter32.write(oprot);
+            _iter43.write(oprot);
           }
         }
       }
       if (struct.isSetStatuses()) {
         {
           oprot.writeI32(struct.statuses.size());
-          for (HandlerStatus _iter33 : struct.statuses)
+          for (HandlerStatus _iter44 : struct.statuses)
           {
-            _iter33.write(oprot);
+            _iter44.write(oprot);
           }
         }
       }
       if (struct.isSetErrors()) {
         {
           oprot.writeI32(struct.errors.size());
-          for (org.apache.airavata.model.commons.ErrorModel _iter34 : struct.errors)
+          for (org.apache.airavata.model.commons.ErrorModel _iter45 : struct.errors)
           {
-            _iter34.write(oprot);
+            _iter45.write(oprot);
           }
         }
       }
@@ -1784,110 +1639,96 @@ public class WorkflowHandler implements org.apache.thrift.TBase<WorkflowHandler,
       struct.setBelongsToMainWorkflowIsSet(true);
       struct.type = org.apache.airavata.model.workflow.HandlerType.findByValue(iprot.readI32());
       struct.setTypeIsSet(true);
-      java.util.BitSet incoming = iprot.readBitSet(9);
+      java.util.BitSet incoming = iprot.readBitSet(8);
       if (incoming.get(0)) {
         {
-          org.apache.thrift.protocol.TList _list35 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.inputs = new java.util.ArrayList<org.apache.airavata.model.application.io.InputDataObjectType>(_list35.size);
-          org.apache.airavata.model.application.io.InputDataObjectType _elem36;
-          for (int _i37 = 0; _i37 < _list35.size; ++_i37)
+          org.apache.thrift.protocol.TList _list46 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.inputs = new java.util.ArrayList<org.apache.airavata.model.application.io.InputDataObjectType>(_list46.size);
+          org.apache.airavata.model.application.io.InputDataObjectType _elem47;
+          for (int _i48 = 0; _i48 < _list46.size; ++_i48)
           {
-            _elem36 = new org.apache.airavata.model.application.io.InputDataObjectType();
-            _elem36.read(iprot);
-            struct.inputs.add(_elem36);
+            _elem47 = new org.apache.airavata.model.application.io.InputDataObjectType();
+            _elem47.read(iprot);
+            struct.inputs.add(_elem47);
           }
         }
         struct.setInputsIsSet(true);
       }
       if (incoming.get(1)) {
         {
-          org.apache.thrift.protocol.TList _list38 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.outputs = new java.util.ArrayList<org.apache.airavata.model.application.io.OutputDataObjectType>(_list38.size);
-          org.apache.airavata.model.application.io.OutputDataObjectType _elem39;
-          for (int _i40 = 0; _i40 < _list38.size; ++_i40)
+          org.apache.thrift.protocol.TList _list49 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.outputs = new java.util.ArrayList<org.apache.airavata.model.application.io.OutputDataObjectType>(_list49.size);
+          org.apache.airavata.model.application.io.OutputDataObjectType _elem50;
+          for (int _i51 = 0; _i51 < _list49.size; ++_i51)
           {
-            _elem39 = new org.apache.airavata.model.application.io.OutputDataObjectType();
-            _elem39.read(iprot);
-            struct.outputs.add(_elem39);
+            _elem50 = new org.apache.airavata.model.application.io.OutputDataObjectType();
+            _elem50.read(iprot);
+            struct.outputs.add(_elem50);
           }
         }
         struct.setOutputsIsSet(true);
       }
       if (incoming.get(2)) {
         {
-          org.apache.thrift.protocol.TList _list41 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.applications = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowApplication>(_list41.size);
-          org.apache.airavata.model.workflow.WorkflowApplication _elem42;
-          for (int _i43 = 0; _i43 < _list41.size; ++_i43)
+          org.apache.thrift.protocol.TList _list52 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.applications = new java.util.ArrayList<WorkflowApplication>(_list52.size);
+          WorkflowApplication _elem53;
+          for (int _i54 = 0; _i54 < _list52.size; ++_i54)
           {
-            _elem42 = new org.apache.airavata.model.workflow.WorkflowApplication();
-            _elem42.read(iprot);
-            struct.applications.add(_elem42);
+            _elem53 = new WorkflowApplication();
+            _elem53.read(iprot);
+            struct.applications.add(_elem53);
           }
         }
         struct.setApplicationsIsSet(true);
       }
       if (incoming.get(3)) {
         {
-          org.apache.thrift.protocol.TList _list44 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.handlers = new java.util.ArrayList<WorkflowHandler>(_list44.size);
-          WorkflowHandler _elem45;
-          for (int _i46 = 0; _i46 < _list44.size; ++_i46)
+          org.apache.thrift.protocol.TList _list55 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.connections = new java.util.ArrayList<WorkflowConnection>(_list55.size);
+          WorkflowConnection _elem56;
+          for (int _i57 = 0; _i57 < _list55.size; ++_i57)
           {
-            _elem45 = new WorkflowHandler();
-            _elem45.read(iprot);
-            struct.handlers.add(_elem45);
-          }
-        }
-        struct.setHandlersIsSet(true);
-      }
-      if (incoming.get(4)) {
-        {
-          org.apache.thrift.protocol.TList _list47 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.connections = new java.util.ArrayList<org.apache.airavata.model.workflow.WorkflowConnection>(_list47.size);
-          org.apache.airavata.model.workflow.WorkflowConnection _elem48;
-          for (int _i49 = 0; _i49 < _list47.size; ++_i49)
-          {
-            _elem48 = new org.apache.airavata.model.workflow.WorkflowConnection();
-            _elem48.read(iprot);
-            struct.connections.add(_elem48);
+            _elem56 = new WorkflowConnection();
+            _elem56.read(iprot);
+            struct.connections.add(_elem56);
           }
         }
         struct.setConnectionsIsSet(true);
       }
-      if (incoming.get(5)) {
+      if (incoming.get(4)) {
         {
-          org.apache.thrift.protocol.TList _list50 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.statuses = new java.util.ArrayList<HandlerStatus>(_list50.size);
-          HandlerStatus _elem51;
-          for (int _i52 = 0; _i52 < _list50.size; ++_i52)
+          org.apache.thrift.protocol.TList _list58 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.statuses = new java.util.ArrayList<HandlerStatus>(_list58.size);
+          HandlerStatus _elem59;
+          for (int _i60 = 0; _i60 < _list58.size; ++_i60)
           {
-            _elem51 = new HandlerStatus();
-            _elem51.read(iprot);
-            struct.statuses.add(_elem51);
+            _elem59 = new HandlerStatus();
+            _elem59.read(iprot);
+            struct.statuses.add(_elem59);
           }
         }
         struct.setStatusesIsSet(true);
       }
-      if (incoming.get(6)) {
+      if (incoming.get(5)) {
         {
-          org.apache.thrift.protocol.TList _list53 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
-          struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list53.size);
-          org.apache.airavata.model.commons.ErrorModel _elem54;
-          for (int _i55 = 0; _i55 < _list53.size; ++_i55)
+          org.apache.thrift.protocol.TList _list61 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.errors = new java.util.ArrayList<org.apache.airavata.model.commons.ErrorModel>(_list61.size);
+          org.apache.airavata.model.commons.ErrorModel _elem62;
+          for (int _i63 = 0; _i63 < _list61.size; ++_i63)
           {
-            _elem54 = new org.apache.airavata.model.commons.ErrorModel();
-            _elem54.read(iprot);
-            struct.errors.add(_elem54);
+            _elem62 = new org.apache.airavata.model.commons.ErrorModel();
+            _elem62.read(iprot);
+            struct.errors.add(_elem62);
           }
         }
         struct.setErrorsIsSet(true);
       }
-      if (incoming.get(7)) {
+      if (incoming.get(6)) {
         struct.createdAt = iprot.readI64();
         struct.setCreatedAtIsSet(true);
       }
-      if (incoming.get(8)) {
+      if (incoming.get(7)) {
         struct.updatedAt = iprot.readI64();
         struct.setUpdatedAtIsSet(true);
       }
diff --git a/modules/registry-refactoring/src/test/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepositoryTest.java b/modules/registry-refactoring/src/test/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepositoryTest.java
index bf7dcf0..f1891b4 100644
--- a/modules/registry-refactoring/src/test/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepositoryTest.java
+++ b/modules/registry-refactoring/src/test/java/org/apache/airavata/registry/core/repositories/workflowcatalog/WorkflowRepositoryTest.java
@@ -20,7 +20,6 @@
 package org.apache.airavata.registry.core.repositories.workflowcatalog;
 
 import org.apache.airavata.model.workflow.*;
-import org.apache.airavata.model.workflow.core.ComponentType;
 import org.apache.airavata.registry.core.repositories.workflowcatalog.util.Initialize;
 import org.apache.airavata.registry.cpi.WorkflowCatalogException;
 import org.junit.After;
diff --git a/thrift-interface-descriptions/data-models/workflow-catalog-models/airavata_workflow_model.thrift b/thrift-interface-descriptions/data-models/workflow-catalog-models/airavata_workflow_model.thrift
index 8fc22fb..bb445b6 100644
--- a/thrift-interface-descriptions/data-models/workflow-catalog-models/airavata_workflow_model.thrift
+++ b/thrift-interface-descriptions/data-models/workflow-catalog-models/airavata_workflow_model.thrift
@@ -19,9 +19,7 @@
  */
 
 include "../../airavata-apis/airavata_commons.thrift"
-include "workflow_application_model.thrift"
-include "workflow_handler_model.thrift"
-include "workflow_connection_model.thrift"
+include "../app-catalog-models/application_io_models.thrift"
 
 namespace java org.apache.airavata.model.workflow
 namespace php Airavata.Model.Workflow
@@ -54,6 +52,107 @@ struct NotificationEmail {
     1:  required string email,
 }
 
+enum ApplicationState {
+    CREATED,
+    VALIDATED,
+    SCHEDULED,
+    LAUNCHED,
+    EXECUTING,
+    CANCELING,
+    CANCELED,
+    COMPLETED,
+    FAILED
+}
+
+struct ApplicationStatus {
+    1:  optional string id,
+    2:  required ApplicationState state,
+    3:  optional string description,
+    4:  optional i64 updatedAt
+}
+
+struct WorkflowApplication {
+    1:  required string id,
+    2:  required bool belongsToMainWorkflow,
+    3:  optional string applicationInterfaceId,
+    4:  optional string computeResourceId,
+    5:  optional string queueName,
+    6:  optional i32 nodeCount,
+    7:  optional i32 coreCount,
+    8:  optional i32 wallTimeLimit,
+    9:  optional i32 physicalMemory
+    10: optional list<ApplicationStatus> statuses,
+    11: optional list<airavata_commons.ErrorModel> errors
+    12: optional i64 createdAt,
+    13: optional i64 updatedAt
+}
+
+struct WorkflowConnection {
+    1:  required string id = airavata_commons.DEFAULT_ID,
+    2:  required bool belongsToMainWorkflow,
+    3:  required ComponentType fromType
+    4:  required string fromId,
+    5:  required string fromOutputName,
+    6:  required ComponentType toType,
+    7:  required string toId,
+    8:  required string toInputName
+    9:  optional i64 createdAt,
+    10: optional i64 updatedAt
+}
+
+enum HandlerType {
+    FLOW_STARTER,
+    FLOW_TERMINATOR,
+    DOWHILE_LOOP,
+    FOREACH_LOOP
+}
+
+enum HandlerState {
+    CREATED,
+    VALIDATED,
+    SCHEDULED,
+    LAUNCHED,
+    EXECUTING,
+    CANCELING,
+    CANCELED,
+    COMPLETED,
+    FAILED
+}
+
+struct HandlerStatus {
+    1:  optional string id,
+    2:  required HandlerState state,
+    3:  optional string description,
+    4:  optional i64 updatedAt
+}
+
+struct DataBlock{
+    1:  required string id,
+    2:  optional string value,
+    3:  optional application_io_models.DataType type,
+    4:  optional i64 createdAt,
+    5:  optional i64 updatedAt,
+}
+
+enum ComponentType {
+    APPLICATION,
+    HANDLER
+}
+
+struct WorkflowHandler {
+    1:  required string id,
+    2:  required bool belongsToMainWorkflow,
+    3:  required HandlerType type,
+    4:  optional list<application_io_models.InputDataObjectType> inputs,
+    5:  optional list<application_io_models.OutputDataObjectType> outputs,
+    6:  optional list<WorkflowApplication> applications,
+    7:  optional list<WorkflowConnection> connections,
+    8:  optional list<HandlerStatus> statuses,
+    9: optional list<airavata_commons.ErrorModel> errors,
+    10: optional i64 createdAt,
+    11: optional i64 updatedAt
+}
+
 struct AiravataWorkflow {
     1:  required string id = airavata_commons.DEFAULT_ID,
     2:  required string name,
@@ -63,11 +162,11 @@ struct AiravataWorkflow {
     6:  optional string description,
     7:  optional bool enableEmailNotification,
     8:  optional list<NotificationEmail> notificationEmails,
-    9:  optional list<workflow_application_model.WorkflowApplication> applications,
-    10: optional list<workflow_handler_model.WorkflowHandler> handlers,
-    11: optional list<workflow_connection_model.WorkflowConnection> connections,
+    9:  optional list<WorkflowApplication> applications,
+    10: optional list<WorkflowHandler> handlers,
+    11: optional list<WorkflowConnection> connections,
     12: optional list<WorkflowStatus> statuses,
     13: optional list<airavata_commons.ErrorModel> errors,
     14: optional i64 createdAt,
     15: optional i64 updatedAt
-}
+}
\ No newline at end of file
diff --git a/thrift-interface-descriptions/data-models/workflow-catalog-models/core-models/component_type.thrift b/thrift-interface-descriptions/data-models/workflow-catalog-models/core-models/component_type.thrift
deleted file mode 100644
index 92ffb73..0000000
--- a/thrift-interface-descriptions/data-models/workflow-catalog-models/core-models/component_type.thrift
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.
- *
- */
-
-namespace java org.apache.airavata.model.workflow.core
-namespace php Airavata.Model.Workflow.Core
-namespace cpp apache.airavata.model.workflow.core
-namespace py airavata.model.workflow.core
-
-enum ComponentType {
-    APPLICATION,
-    HANDLER
-}
diff --git a/thrift-interface-descriptions/data-models/workflow-catalog-models/core-models/data_block_model.thrift b/thrift-interface-descriptions/data-models/workflow-catalog-models/core-models/data_block_model.thrift
deleted file mode 100644
index 17ebf39..0000000
--- a/thrift-interface-descriptions/data-models/workflow-catalog-models/core-models/data_block_model.thrift
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * 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.
- *
- */
-
-include "../../app-catalog-models/application_io_models.thrift"
-
-namespace java org.apache.airavata.model.workflow.core
-namespace php Airavata.Model.Workflow.Core
-namespace cpp apache.airavata.model.workflow.core
-namespace py airavata.model.workflow.core
-
-struct DataBlock{
-    1:  required string id,
-    2:  optional string value,
-    3:  optional application_io_models.DataType type,
-    4:  optional i64 createdAt,
-    5:  optional i64 updatedAt,
-}
diff --git a/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_application_model.thrift b/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_application_model.thrift
deleted file mode 100644
index 0c73d14..0000000
--- a/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_application_model.thrift
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * 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.
- *
- */
-
-include "../../airavata-apis/airavata_commons.thrift"
-
-namespace java org.apache.airavata.model.workflow
-namespace php Airavata.Model.Workflow
-namespace cpp apache.airavata.model.workflow
-namespace py airavata.model.workflow
-
-enum ApplicationState {
-    CREATED,
-    VALIDATED,
-    SCHEDULED,
-    LAUNCHED,
-    EXECUTING,
-    CANCELING,
-    CANCELED,
-    COMPLETED,
-    FAILED
-}
-
-struct ApplicationStatus {
-    1:  optional string id,
-    2:  required ApplicationState state,
-    3:  optional string description,
-    4:  optional i64 updatedAt
-}
-
-struct WorkflowApplication {
-    1:  required string id,
-    2:  required bool belongsToMainWorkflow,
-    3:  optional string applicationInterfaceId,
-    4:  optional string computeResourceId,
-    5:  optional string queueName,
-    6:  optional i32 nodeCount,
-    7:  optional i32 coreCount,
-    8:  optional i32 wallTimeLimit,
-    9:  optional i32 physicalMemory
-    10: optional list<ApplicationStatus> statuses,
-    11: optional list<airavata_commons.ErrorModel> errors
-    12: optional i64 createdAt,
-    13: optional i64 updatedAt
-}
diff --git a/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_connection_model.thrift b/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_connection_model.thrift
deleted file mode 100644
index d0d7660..0000000
--- a/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_connection_model.thrift
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * 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.
- *
- */
-
-include "../../airavata-apis/airavata_commons.thrift"
-include "core-models/component_type.thrift"
-include "core-models/data_block_model.thrift"
-
-namespace java org.apache.airavata.model.workflow
-namespace php Airavata.Model.Workflow
-namespace cpp apache.airavata.model.workflow
-namespace py airavata.model.workflow
-
-struct WorkflowConnection {
-    1:  required string id = airavata_commons.DEFAULT_ID,
-    2:  required bool belongsToMainWorkflow,
-    3:  required component_type.ComponentType fromType
-    4:  required string fromId,
-    5:  required string fromOutputName,
-    6:  required component_type.ComponentType toType,
-    7:  required string toId,
-    8:  required string toInputName
-    9:  optional i64 createdAt,
-    10: optional i64 updatedAt
-}
diff --git a/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_handler_model.thrift b/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_handler_model.thrift
deleted file mode 100644
index eeb513d..0000000
--- a/thrift-interface-descriptions/data-models/workflow-catalog-models/workflow_handler_model.thrift
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.
- *
- */
-
-include "../../airavata-apis/airavata_commons.thrift"
-include "../app-catalog-models/application_io_models.thrift"
-include "workflow_application_model.thrift"
-include "workflow_connection_model.thrift"
-
-namespace java org.apache.airavata.model.workflow
-namespace php Airavata.Model.Workflow
-namespace cpp apache.airavata.model.workflow
-namespace py airavata.model.workflow
-
-enum HandlerType {
-    FLOW_STARTER,
-    FLOW_TERMINATOR,
-    DOWHILE_LOOP,
-    FOREACH_LOOP
-}
-
-enum HandlerState {
-    CREATED,
-    VALIDATED,
-    SCHEDULED,
-    LAUNCHED,
-    EXECUTING,
-    CANCELING,
-    CANCELED,
-    COMPLETED,
-    FAILED
-}
-
-struct HandlerStatus {
-    1:  optional string id,
-    2:  required HandlerState state,
-    3:  optional string description,
-    4:  optional i64 updatedAt
-}
-
-struct WorkflowHandler {
-    1:  required string id,
-    2:  required bool belongsToMainWorkflow,
-    3:  required HandlerType type,
-    4:  optional list<application_io_models.InputDataObjectType> inputs,
-    5:  optional list<application_io_models.OutputDataObjectType> outputs,
-    6:  optional list<workflow_application_model.WorkflowApplication> applications,
-    7:  optional list<WorkflowHandler> handlers,
-    8:  optional list<workflow_connection_model.WorkflowConnection> connections,
-    9:  optional list<HandlerStatus> statuses,
-    10: optional list<airavata_commons.ErrorModel> errors,
-    11: optional i64 createdAt,
-    12: optional i64 updatedAt
-}


Mime
View raw message