Repository: airavata
Updated Branches:
  refs/heads/develop 400e24d63 -> 177a2484d


http://git-wip-us.apache.org/repos/asf/airavata/blob/177a2484/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
----------------------------------------------------------------------
diff --git 
a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
 
b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
index a0f94d9..bdf30b5 100644
--- 
a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
+++ 
b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/api/Airavata.py
@@ -799,6 +799,50 @@ class Iface:
     """
     pass
 
+  def getExperimentByAdmin(self, authzToken, airavataExperimentId):
+    """
+      *
+      * Get Experiment by an admin user
+      *
+      * Used by an admin user to fetch previously created experiment metadata.
+      *
+      * @param airavataExperimentId
+      *    The unique identifier of the requested experiment. This ID is 
returned during the create experiment step.
+      *
+      * @return ExperimentModel
+      *   This method will return the previously stored experiment metadata.
+      *
+      * @throws org.apache.airavata.model.error.InvalidRequestException
+      *    For any incorrect forming of the request itself.
+      *
+      * @throws org.apache.airavata.model.error.ExperimentNotFoundException
+      *    If the specified experiment is not previously created, then an 
Experiment Not Found Exception is thrown.
+      *
+      * @throws org.apache.airavata.model.error.AiravataClientException
+      *    The following list of exceptions are thrown which Airavata Client 
can take corrective actions to resolve:
+      *
+      *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata 
as a one time administrative
+      *         step, then Airavata Registry will not have a provenance area 
setup. The client has to follow
+      *         gateway registration steps and retry this request.
+      *
+      *      AUTHENTICATION_FAILURE - How Authentication will be implemented 
is yet to be determined.
+      *         For now this is a place holder.
+      *
+      *      INVALID_AUTHORIZATION - This will throw an authorization 
exception. When a more robust security hand-shake
+      *         is implemented, the authorization will be more substantial.
+      *
+      * @throws org.apache.airavata.model.error.AiravataSystemException
+      *    This exception will be thrown for any Airavata Server side issues 
and if the problem cannot be corrected by the client
+      *       rather an Airavata Administrator will be notified to take 
corrective action.
+      *
+    *
+
+    Parameters:
+     - authzToken
+     - airavataExperimentId
+    """
+    pass
+
   def getDetailedExperimentTree(self, authzToken, airavataExperimentId):
     """
 
@@ -1139,6 +1183,59 @@ class Iface:
     """
     pass
 
+  def cloneExperimentByAdmin(self, authzToken, existingExperimentID, 
newExperimentName, newExperimentProjectId):
+    """
+
+    Clone an Existing Experiment by an admin user
+    Existing specified experiment is cloned and a new name is provided. A copy 
of the experiment configuration is made and is persisted with new metadata.
+      The client has to subsequently update this configuration if needed and 
launch the cloned experiment.
+
+    @param newExperimentName
+       experiment name that should be used in the cloned experiment
+
+    @param updatedExperiment
+       Once an experiment is cloned, to disambiguate, the users are suggested 
to provide new metadata. This will again require
+         the basic experiment metadata like the name and description, intended 
user, the gateway identifier and if the experiment
+         should be shared public by default.
+    @param newExperimentProjectId
+       The project in which to create the cloned experiment. This is optional 
and if null the experiment will be created
+         in the same project as the existing experiment.
+
+    @return
+      The server-side generated.airavata.registry.core.experiment.globally 
unique identifier (Experiment ID) for the newly cloned experiment.
+
+    @throws org.apache.airavata.model.error.InvalidRequestException
+       For any incorrect forming of the request itself.
+
+    @throws org.apache.airavata.model.error.ExperimentNotFoundException
+       If the specified experiment is not previously created, then an 
Experiment Not Found Exception is thrown.
+
+    @throws org.apache.airavata.model.error.AiravataClientException
+       The following list of exceptions are thrown which Airavata Client can 
take corrective actions to resolve:
+
+         UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as 
a one time administrative
+            step, then Airavata Registry will not have a provenance area 
setup. The client has to follow
+            gateway registration steps and retry this request.
+
+         AUTHENTICATION_FAILURE - How Authentication will be implemented is 
yet to be determined.
+            For now this is a place holder.
+
+         INVALID_AUTHORIZATION - This will throw an authorization exception. 
When a more robust security hand-shake
+            is implemented, the authorization will be more substantial.
+
+    @throws org.apache.airavata.model.error.AiravataSystemException
+       This exception will be thrown for any Airavata Server side issues and 
if the problem cannot be corrected by the client
+          rather an Airavata Administrator will be notified to take corrective 
action.
+
+
+    Parameters:
+     - authzToken
+     - existingExperimentID
+     - newExperimentName
+     - newExperimentProjectId
+    """
+    pass
+
   def terminateExperiment(self, authzToken, airavataExperimentId, gatewayId):
     """
 
@@ -5390,6 +5487,85 @@ class Client(Iface):
       raise result.ae
     raise TApplicationException(TApplicationException.MISSING_RESULT, 
"getExperiment failed: unknown result")
 
+  def getExperimentByAdmin(self, authzToken, airavataExperimentId):
+    """
+      *
+      * Get Experiment by an admin user
+      *
+      * Used by an admin user to fetch previously created experiment metadata.
+      *
+      * @param airavataExperimentId
+      *    The unique identifier of the requested experiment. This ID is 
returned during the create experiment step.
+      *
+      * @return ExperimentModel
+      *   This method will return the previously stored experiment metadata.
+      *
+      * @throws org.apache.airavata.model.error.InvalidRequestException
+      *    For any incorrect forming of the request itself.
+      *
+      * @throws org.apache.airavata.model.error.ExperimentNotFoundException
+      *    If the specified experiment is not previously created, then an 
Experiment Not Found Exception is thrown.
+      *
+      * @throws org.apache.airavata.model.error.AiravataClientException
+      *    The following list of exceptions are thrown which Airavata Client 
can take corrective actions to resolve:
+      *
+      *      UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata 
as a one time administrative
+      *         step, then Airavata Registry will not have a provenance area 
setup. The client has to follow
+      *         gateway registration steps and retry this request.
+      *
+      *      AUTHENTICATION_FAILURE - How Authentication will be implemented 
is yet to be determined.
+      *         For now this is a place holder.
+      *
+      *      INVALID_AUTHORIZATION - This will throw an authorization 
exception. When a more robust security hand-shake
+      *         is implemented, the authorization will be more substantial.
+      *
+      * @throws org.apache.airavata.model.error.AiravataSystemException
+      *    This exception will be thrown for any Airavata Server side issues 
and if the problem cannot be corrected by the client
+      *       rather an Airavata Administrator will be notified to take 
corrective action.
+      *
+    *
+
+    Parameters:
+     - authzToken
+     - airavataExperimentId
+    """
+    self.send_getExperimentByAdmin(authzToken, airavataExperimentId)
+    return self.recv_getExperimentByAdmin()
+
+  def send_getExperimentByAdmin(self, authzToken, airavataExperimentId):
+    self._oprot.writeMessageBegin('getExperimentByAdmin', TMessageType.CALL, 
self._seqid)
+    args = getExperimentByAdmin_args()
+    args.authzToken = authzToken
+    args.airavataExperimentId = airavataExperimentId
+    args.write(self._oprot)
+    self._oprot.writeMessageEnd()
+    self._oprot.trans.flush()
+
+  def recv_getExperimentByAdmin(self):
+    iprot = self._iprot
+    (fname, mtype, rseqid) = iprot.readMessageBegin()
+    if mtype == TMessageType.EXCEPTION:
+      x = TApplicationException()
+      x.read(iprot)
+      iprot.readMessageEnd()
+      raise x
+    result = getExperimentByAdmin_result()
+    result.read(iprot)
+    iprot.readMessageEnd()
+    if result.success is not None:
+      return result.success
+    if result.ire is not None:
+      raise result.ire
+    if result.enf is not None:
+      raise result.enf
+    if result.ace is not None:
+      raise result.ace
+    if result.ase is not None:
+      raise result.ase
+    if result.ae is not None:
+      raise result.ae
+    raise TApplicationException(TApplicationException.MISSING_RESULT, 
"getExperimentByAdmin failed: unknown result")
+
   def getDetailedExperimentTree(self, authzToken, airavataExperimentId):
     """
 
@@ -6134,6 +6310,98 @@ class Client(Iface):
       raise result.pnfe
     raise TApplicationException(TApplicationException.MISSING_RESULT, 
"cloneExperiment failed: unknown result")
 
+  def cloneExperimentByAdmin(self, authzToken, existingExperimentID, 
newExperimentName, newExperimentProjectId):
+    """
+
+    Clone an Existing Experiment by an admin user
+    Existing specified experiment is cloned and a new name is provided. A copy 
of the experiment configuration is made and is persisted with new metadata.
+      The client has to subsequently update this configuration if needed and 
launch the cloned experiment.
+
+    @param newExperimentName
+       experiment name that should be used in the cloned experiment
+
+    @param updatedExperiment
+       Once an experiment is cloned, to disambiguate, the users are suggested 
to provide new metadata. This will again require
+         the basic experiment metadata like the name and description, intended 
user, the gateway identifier and if the experiment
+         should be shared public by default.
+    @param newExperimentProjectId
+       The project in which to create the cloned experiment. This is optional 
and if null the experiment will be created
+         in the same project as the existing experiment.
+
+    @return
+      The server-side generated.airavata.registry.core.experiment.globally 
unique identifier (Experiment ID) for the newly cloned experiment.
+
+    @throws org.apache.airavata.model.error.InvalidRequestException
+       For any incorrect forming of the request itself.
+
+    @throws org.apache.airavata.model.error.ExperimentNotFoundException
+       If the specified experiment is not previously created, then an 
Experiment Not Found Exception is thrown.
+
+    @throws org.apache.airavata.model.error.AiravataClientException
+       The following list of exceptions are thrown which Airavata Client can 
take corrective actions to resolve:
+
+         UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as 
a one time administrative
+            step, then Airavata Registry will not have a provenance area 
setup. The client has to follow
+            gateway registration steps and retry this request.
+
+         AUTHENTICATION_FAILURE - How Authentication will be implemented is 
yet to be determined.
+            For now this is a place holder.
+
+         INVALID_AUTHORIZATION - This will throw an authorization exception. 
When a more robust security hand-shake
+            is implemented, the authorization will be more substantial.
+
+    @throws org.apache.airavata.model.error.AiravataSystemException
+       This exception will be thrown for any Airavata Server side issues and 
if the problem cannot be corrected by the client
+          rather an Airavata Administrator will be notified to take corrective 
action.
+
+
+    Parameters:
+     - authzToken
+     - existingExperimentID
+     - newExperimentName
+     - newExperimentProjectId
+    """
+    self.send_cloneExperimentByAdmin(authzToken, existingExperimentID, 
newExperimentName, newExperimentProjectId)
+    return self.recv_cloneExperimentByAdmin()
+
+  def send_cloneExperimentByAdmin(self, authzToken, existingExperimentID, 
newExperimentName, newExperimentProjectId):
+    self._oprot.writeMessageBegin('cloneExperimentByAdmin', TMessageType.CALL, 
self._seqid)
+    args = cloneExperimentByAdmin_args()
+    args.authzToken = authzToken
+    args.existingExperimentID = existingExperimentID
+    args.newExperimentName = newExperimentName
+    args.newExperimentProjectId = newExperimentProjectId
+    args.write(self._oprot)
+    self._oprot.writeMessageEnd()
+    self._oprot.trans.flush()
+
+  def recv_cloneExperimentByAdmin(self):
+    iprot = self._iprot
+    (fname, mtype, rseqid) = iprot.readMessageBegin()
+    if mtype == TMessageType.EXCEPTION:
+      x = TApplicationException()
+      x.read(iprot)
+      iprot.readMessageEnd()
+      raise x
+    result = cloneExperimentByAdmin_result()
+    result.read(iprot)
+    iprot.readMessageEnd()
+    if result.success is not None:
+      return result.success
+    if result.ire is not None:
+      raise result.ire
+    if result.enf is not None:
+      raise result.enf
+    if result.ace is not None:
+      raise result.ace
+    if result.ase is not None:
+      raise result.ase
+    if result.ae is not None:
+      raise result.ae
+    if result.pnfe is not None:
+      raise result.pnfe
+    raise TApplicationException(TApplicationException.MISSING_RESULT, 
"cloneExperimentByAdmin failed: unknown result")
+
   def terminateExperiment(self, authzToken, airavataExperimentId, gatewayId):
     """
 
@@ -12412,6 +12680,7 @@ class Processor(Iface, TProcessor):
     self._processMap["createExperiment"] = Processor.process_createExperiment
     self._processMap["deleteExperiment"] = Processor.process_deleteExperiment
     self._processMap["getExperiment"] = Processor.process_getExperiment
+    self._processMap["getExperimentByAdmin"] = 
Processor.process_getExperimentByAdmin
     self._processMap["getDetailedExperimentTree"] = 
Processor.process_getDetailedExperimentTree
     self._processMap["updateExperiment"] = Processor.process_updateExperiment
     self._processMap["updateExperimentConfiguration"] = 
Processor.process_updateExperimentConfiguration
@@ -12424,6 +12693,7 @@ class Processor(Iface, TProcessor):
     self._processMap["getJobStatuses"] = Processor.process_getJobStatuses
     self._processMap["getJobDetails"] = Processor.process_getJobDetails
     self._processMap["cloneExperiment"] = Processor.process_cloneExperiment
+    self._processMap["cloneExperimentByAdmin"] = 
Processor.process_cloneExperimentByAdmin
     self._processMap["terminateExperiment"] = 
Processor.process_terminateExperiment
     self._processMap["registerApplicationModule"] = 
Processor.process_registerApplicationModule
     self._processMap["getApplicationModule"] = 
Processor.process_getApplicationModule
@@ -13691,13 +13961,13 @@ class Processor(Iface, TProcessor):
     oprot.writeMessageEnd()
     oprot.trans.flush()
 
-  def process_getDetailedExperimentTree(self, seqid, iprot, oprot):
-    args = getDetailedExperimentTree_args()
+  def process_getExperimentByAdmin(self, seqid, iprot, oprot):
+    args = getExperimentByAdmin_args()
     args.read(iprot)
     iprot.readMessageEnd()
-    result = getDetailedExperimentTree_result()
+    result = getExperimentByAdmin_result()
     try:
-      result.success = 
self._handler.getDetailedExperimentTree(args.authzToken, 
args.airavataExperimentId)
+      result.success = self._handler.getExperimentByAdmin(args.authzToken, 
args.airavataExperimentId)
       msg_type = TMessageType.REPLY
     except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
       raise
@@ -13720,18 +13990,18 @@ class Processor(Iface, TProcessor):
       msg_type = TMessageType.EXCEPTION
       logging.exception(ex)
       result = TApplicationException(TApplicationException.INTERNAL_ERROR, 
'Internal error')
-    oprot.writeMessageBegin("getDetailedExperimentTree", msg_type, seqid)
+    oprot.writeMessageBegin("getExperimentByAdmin", msg_type, seqid)
     result.write(oprot)
     oprot.writeMessageEnd()
     oprot.trans.flush()
 
-  def process_updateExperiment(self, seqid, iprot, oprot):
-    args = updateExperiment_args()
+  def process_getDetailedExperimentTree(self, seqid, iprot, oprot):
+    args = getDetailedExperimentTree_args()
     args.read(iprot)
     iprot.readMessageEnd()
-    result = updateExperiment_result()
+    result = getDetailedExperimentTree_result()
     try:
-      self._handler.updateExperiment(args.authzToken, 
args.airavataExperimentId, args.experiment)
+      result.success = 
self._handler.getDetailedExperimentTree(args.authzToken, 
args.airavataExperimentId)
       msg_type = TMessageType.REPLY
     except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
       raise
@@ -13754,7 +14024,41 @@ class Processor(Iface, TProcessor):
       msg_type = TMessageType.EXCEPTION
       logging.exception(ex)
       result = TApplicationException(TApplicationException.INTERNAL_ERROR, 
'Internal error')
-    oprot.writeMessageBegin("updateExperiment", msg_type, seqid)
+    oprot.writeMessageBegin("getDetailedExperimentTree", msg_type, seqid)
+    result.write(oprot)
+    oprot.writeMessageEnd()
+    oprot.trans.flush()
+
+  def process_updateExperiment(self, seqid, iprot, oprot):
+    args = updateExperiment_args()
+    args.read(iprot)
+    iprot.readMessageEnd()
+    result = updateExperiment_result()
+    try:
+      self._handler.updateExperiment(args.authzToken, 
args.airavataExperimentId, args.experiment)
+      msg_type = TMessageType.REPLY
+    except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+      raise
+    except apache.airavata.api.error.ttypes.InvalidRequestException as ire:
+      msg_type = TMessageType.REPLY
+      result.ire = ire
+    except apache.airavata.api.error.ttypes.ExperimentNotFoundException as enf:
+      msg_type = TMessageType.REPLY
+      result.enf = enf
+    except apache.airavata.api.error.ttypes.AiravataClientException as ace:
+      msg_type = TMessageType.REPLY
+      result.ace = ace
+    except apache.airavata.api.error.ttypes.AiravataSystemException as ase:
+      msg_type = TMessageType.REPLY
+      result.ase = ase
+    except apache.airavata.api.error.ttypes.AuthorizationException as ae:
+      msg_type = TMessageType.REPLY
+      result.ae = ae
+    except Exception as ex:
+      msg_type = TMessageType.EXCEPTION
+      logging.exception(ex)
+      result = TApplicationException(TApplicationException.INTERNAL_ERROR, 
'Internal error')
+    oprot.writeMessageBegin("updateExperiment", msg_type, seqid)
     result.write(oprot)
     oprot.writeMessageEnd()
     oprot.trans.flush()
@@ -14078,6 +14382,43 @@ class Processor(Iface, TProcessor):
     oprot.writeMessageEnd()
     oprot.trans.flush()
 
+  def process_cloneExperimentByAdmin(self, seqid, iprot, oprot):
+    args = cloneExperimentByAdmin_args()
+    args.read(iprot)
+    iprot.readMessageEnd()
+    result = cloneExperimentByAdmin_result()
+    try:
+      result.success = self._handler.cloneExperimentByAdmin(args.authzToken, 
args.existingExperimentID, args.newExperimentName, args.newExperimentProjectId)
+      msg_type = TMessageType.REPLY
+    except (TTransport.TTransportException, KeyboardInterrupt, SystemExit):
+      raise
+    except apache.airavata.api.error.ttypes.InvalidRequestException as ire:
+      msg_type = TMessageType.REPLY
+      result.ire = ire
+    except apache.airavata.api.error.ttypes.ExperimentNotFoundException as enf:
+      msg_type = TMessageType.REPLY
+      result.enf = enf
+    except apache.airavata.api.error.ttypes.AiravataClientException as ace:
+      msg_type = TMessageType.REPLY
+      result.ace = ace
+    except apache.airavata.api.error.ttypes.AiravataSystemException as ase:
+      msg_type = TMessageType.REPLY
+      result.ase = ase
+    except apache.airavata.api.error.ttypes.AuthorizationException as ae:
+      msg_type = TMessageType.REPLY
+      result.ae = ae
+    except apache.airavata.api.error.ttypes.ProjectNotFoundException as pnfe:
+      msg_type = TMessageType.REPLY
+      result.pnfe = pnfe
+    except Exception as ex:
+      msg_type = TMessageType.EXCEPTION
+      logging.exception(ex)
+      result = TApplicationException(TApplicationException.INTERNAL_ERROR, 
'Internal error')
+    oprot.writeMessageBegin("cloneExperimentByAdmin", msg_type, seqid)
+    result.write(oprot)
+    oprot.writeMessageEnd()
+    oprot.trans.flush()
+
   def process_terminateExperiment(self, seqid, iprot, oprot):
     args = terminateExperiment_args()
     args.read(iprot)
@@ -25849,7 +26190,7 @@ class getExperiment_result:
   def __ne__(self, other):
     return not (self == other)
 
-class getDetailedExperimentTree_args:
+class getExperimentByAdmin_args:
   """
   Attributes:
    - authzToken
@@ -25895,7 +26236,7 @@ class getDetailedExperimentTree_args:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('getDetailedExperimentTree_args')
+    oprot.writeStructBegin('getExperimentByAdmin_args')
     if self.authzToken is not None:
       oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
       self.authzToken.write(oprot)
@@ -25932,7 +26273,7 @@ class getDetailedExperimentTree_args:
   def __ne__(self, other):
     return not (self == other)
 
-class getDetailedExperimentTree_result:
+class getExperimentByAdmin_result:
   """
   Attributes:
    - success
@@ -26014,7 +26355,7 @@ class getDetailedExperimentTree_result:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('getDetailedExperimentTree_result')
+    oprot.writeStructBegin('getExperimentByAdmin_result')
     if self.success is not None:
       oprot.writeFieldBegin('success', TType.STRUCT, 0)
       self.success.write(oprot)
@@ -26067,25 +26408,22 @@ class getDetailedExperimentTree_result:
   def __ne__(self, other):
     return not (self == other)
 
-class updateExperiment_args:
+class getDetailedExperimentTree_args:
   """
   Attributes:
    - authzToken
    - airavataExperimentId
-   - experiment
   """
 
   thrift_spec = (
     None, # 0
     (1, TType.STRUCT, 'authzToken', 
(apache.airavata.model.security.ttypes.AuthzToken, 
apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
     (2, TType.STRING, 'airavataExperimentId', None, None, ), # 2
-    (3, TType.STRUCT, 'experiment', 
(apache.airavata.model.experiment.ttypes.ExperimentModel, 
apache.airavata.model.experiment.ttypes.ExperimentModel.thrift_spec), None, ), 
# 3
   )
 
-  def __init__(self, authzToken=None, airavataExperimentId=None, 
experiment=None,):
+  def __init__(self, authzToken=None, airavataExperimentId=None,):
     self.authzToken = authzToken
     self.airavataExperimentId = airavataExperimentId
-    self.experiment = experiment
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
@@ -26107,12 +26445,6 @@ class updateExperiment_args:
           self.airavataExperimentId = iprot.readString()
         else:
           iprot.skip(ftype)
-      elif fid == 3:
-        if ftype == TType.STRUCT:
-          self.experiment = 
apache.airavata.model.experiment.ttypes.ExperimentModel()
-          self.experiment.read(iprot)
-        else:
-          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -26122,7 +26454,7 @@ class updateExperiment_args:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('updateExperiment_args')
+    oprot.writeStructBegin('getDetailedExperimentTree_args')
     if self.authzToken is not None:
       oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
       self.authzToken.write(oprot)
@@ -26131,10 +26463,6 @@ class updateExperiment_args:
       oprot.writeFieldBegin('airavataExperimentId', TType.STRING, 2)
       oprot.writeString(self.airavataExperimentId)
       oprot.writeFieldEnd()
-    if self.experiment is not None:
-      oprot.writeFieldBegin('experiment', TType.STRUCT, 3)
-      self.experiment.write(oprot)
-      oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
 
@@ -26143,8 +26471,6 @@ class updateExperiment_args:
       raise TProtocol.TProtocolException(message='Required field authzToken is 
unset!')
     if self.airavataExperimentId is None:
       raise TProtocol.TProtocolException(message='Required field 
airavataExperimentId is unset!')
-    if self.experiment is None:
-      raise TProtocol.TProtocolException(message='Required field experiment is 
unset!')
     return
 
 
@@ -26152,7 +26478,6 @@ class updateExperiment_args:
     value = 17
     value = (value * 31) ^ hash(self.authzToken)
     value = (value * 31) ^ hash(self.airavataExperimentId)
-    value = (value * 31) ^ hash(self.experiment)
     return value
 
   def __repr__(self):
@@ -26166,9 +26491,10 @@ class updateExperiment_args:
   def __ne__(self, other):
     return not (self == other)
 
-class updateExperiment_result:
+class getDetailedExperimentTree_result:
   """
   Attributes:
+   - success
    - ire
    - enf
    - ace
@@ -26177,7 +26503,7 @@ class updateExperiment_result:
   """
 
   thrift_spec = (
-    None, # 0
+    (0, TType.STRUCT, 'success', 
(apache.airavata.model.experiment.ttypes.ExperimentModel, 
apache.airavata.model.experiment.ttypes.ExperimentModel.thrift_spec), None, ), 
# 0
     (1, TType.STRUCT, 'ire', 
(apache.airavata.api.error.ttypes.InvalidRequestException, 
apache.airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ), 
# 1
     (2, TType.STRUCT, 'enf', 
(apache.airavata.api.error.ttypes.ExperimentNotFoundException, 
apache.airavata.api.error.ttypes.ExperimentNotFoundException.thrift_spec), 
None, ), # 2
     (3, TType.STRUCT, 'ace', 
(apache.airavata.api.error.ttypes.AiravataClientException, 
apache.airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ), 
# 3
@@ -26185,7 +26511,8 @@ class updateExperiment_result:
     (5, TType.STRUCT, 'ae', 
(apache.airavata.api.error.ttypes.AuthorizationException, 
apache.airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ), 
# 5
   )
 
-  def __init__(self, ire=None, enf=None, ace=None, ase=None, ae=None,):
+  def __init__(self, success=None, ire=None, enf=None, ace=None, ase=None, 
ae=None,):
+    self.success = success
     self.ire = ire
     self.enf = enf
     self.ace = ace
@@ -26201,7 +26528,13 @@ class updateExperiment_result:
       (fname, ftype, fid) = iprot.readFieldBegin()
       if ftype == TType.STOP:
         break
-      if fid == 1:
+      if fid == 0:
+        if ftype == TType.STRUCT:
+          self.success = 
apache.airavata.model.experiment.ttypes.ExperimentModel()
+          self.success.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 1:
         if ftype == TType.STRUCT:
           self.ire = apache.airavata.api.error.ttypes.InvalidRequestException()
           self.ire.read(iprot)
@@ -26240,7 +26573,11 @@ class updateExperiment_result:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('updateExperiment_result')
+    oprot.writeStructBegin('getDetailedExperimentTree_result')
+    if self.success is not None:
+      oprot.writeFieldBegin('success', TType.STRUCT, 0)
+      self.success.write(oprot)
+      oprot.writeFieldEnd()
     if self.ire is not None:
       oprot.writeFieldBegin('ire', TType.STRUCT, 1)
       self.ire.write(oprot)
@@ -26270,6 +26607,7 @@ class updateExperiment_result:
 
   def __hash__(self):
     value = 17
+    value = (value * 31) ^ hash(self.success)
     value = (value * 31) ^ hash(self.ire)
     value = (value * 31) ^ hash(self.enf)
     value = (value * 31) ^ hash(self.ace)
@@ -26288,25 +26626,25 @@ class updateExperiment_result:
   def __ne__(self, other):
     return not (self == other)
 
-class updateExperimentConfiguration_args:
+class updateExperiment_args:
   """
   Attributes:
    - authzToken
    - airavataExperimentId
-   - userConfiguration
+   - experiment
   """
 
   thrift_spec = (
     None, # 0
     (1, TType.STRUCT, 'authzToken', 
(apache.airavata.model.security.ttypes.AuthzToken, 
apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
     (2, TType.STRING, 'airavataExperimentId', None, None, ), # 2
-    (3, TType.STRUCT, 'userConfiguration', 
(apache.airavata.model.experiment.ttypes.UserConfigurationDataModel, 
apache.airavata.model.experiment.ttypes.UserConfigurationDataModel.thrift_spec),
 None, ), # 3
+    (3, TType.STRUCT, 'experiment', 
(apache.airavata.model.experiment.ttypes.ExperimentModel, 
apache.airavata.model.experiment.ttypes.ExperimentModel.thrift_spec), None, ), 
# 3
   )
 
-  def __init__(self, authzToken=None, airavataExperimentId=None, 
userConfiguration=None,):
+  def __init__(self, authzToken=None, airavataExperimentId=None, 
experiment=None,):
     self.authzToken = authzToken
     self.airavataExperimentId = airavataExperimentId
-    self.userConfiguration = userConfiguration
+    self.experiment = experiment
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
@@ -26330,8 +26668,8 @@ class updateExperimentConfiguration_args:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRUCT:
-          self.userConfiguration = 
apache.airavata.model.experiment.ttypes.UserConfigurationDataModel()
-          self.userConfiguration.read(iprot)
+          self.experiment = 
apache.airavata.model.experiment.ttypes.ExperimentModel()
+          self.experiment.read(iprot)
         else:
           iprot.skip(ftype)
       else:
@@ -26343,7 +26681,7 @@ class updateExperimentConfiguration_args:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('updateExperimentConfiguration_args')
+    oprot.writeStructBegin('updateExperiment_args')
     if self.authzToken is not None:
       oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
       self.authzToken.write(oprot)
@@ -26352,9 +26690,9 @@ class updateExperimentConfiguration_args:
       oprot.writeFieldBegin('airavataExperimentId', TType.STRING, 2)
       oprot.writeString(self.airavataExperimentId)
       oprot.writeFieldEnd()
-    if self.userConfiguration is not None:
-      oprot.writeFieldBegin('userConfiguration', TType.STRUCT, 3)
-      self.userConfiguration.write(oprot)
+    if self.experiment is not None:
+      oprot.writeFieldBegin('experiment', TType.STRUCT, 3)
+      self.experiment.write(oprot)
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
@@ -26364,8 +26702,8 @@ class updateExperimentConfiguration_args:
       raise TProtocol.TProtocolException(message='Required field authzToken is 
unset!')
     if self.airavataExperimentId is None:
       raise TProtocol.TProtocolException(message='Required field 
airavataExperimentId is unset!')
-    if self.userConfiguration is None:
-      raise TProtocol.TProtocolException(message='Required field 
userConfiguration is unset!')
+    if self.experiment is None:
+      raise TProtocol.TProtocolException(message='Required field experiment is 
unset!')
     return
 
 
@@ -26373,7 +26711,7 @@ class updateExperimentConfiguration_args:
     value = 17
     value = (value * 31) ^ hash(self.authzToken)
     value = (value * 31) ^ hash(self.airavataExperimentId)
-    value = (value * 31) ^ hash(self.userConfiguration)
+    value = (value * 31) ^ hash(self.experiment)
     return value
 
   def __repr__(self):
@@ -26387,18 +26725,30 @@ class updateExperimentConfiguration_args:
   def __ne__(self, other):
     return not (self == other)
 
-class updateExperimentConfiguration_result:
+class updateExperiment_result:
   """
   Attributes:
+   - ire
+   - enf
+   - ace
+   - ase
    - ae
   """
 
   thrift_spec = (
     None, # 0
-    (1, TType.STRUCT, 'ae', 
(apache.airavata.api.error.ttypes.AuthorizationException, 
apache.airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ), 
# 1
+    (1, TType.STRUCT, 'ire', 
(apache.airavata.api.error.ttypes.InvalidRequestException, 
apache.airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ), 
# 1
+    (2, TType.STRUCT, 'enf', 
(apache.airavata.api.error.ttypes.ExperimentNotFoundException, 
apache.airavata.api.error.ttypes.ExperimentNotFoundException.thrift_spec), 
None, ), # 2
+    (3, TType.STRUCT, 'ace', 
(apache.airavata.api.error.ttypes.AiravataClientException, 
apache.airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ), 
# 3
+    (4, TType.STRUCT, 'ase', 
(apache.airavata.api.error.ttypes.AiravataSystemException, 
apache.airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ), 
# 4
+    (5, TType.STRUCT, 'ae', 
(apache.airavata.api.error.ttypes.AuthorizationException, 
apache.airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ), 
# 5
   )
 
-  def __init__(self, ae=None,):
+  def __init__(self, ire=None, enf=None, ace=None, ase=None, ae=None,):
+    self.ire = ire
+    self.enf = enf
+    self.ace = ace
+    self.ase = ase
     self.ae = ae
 
   def read(self, iprot):
@@ -26412,6 +26762,30 @@ class updateExperimentConfiguration_result:
         break
       if fid == 1:
         if ftype == TType.STRUCT:
+          self.ire = apache.airavata.api.error.ttypes.InvalidRequestException()
+          self.ire.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRUCT:
+          self.enf = 
apache.airavata.api.error.ttypes.ExperimentNotFoundException()
+          self.enf.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.STRUCT:
+          self.ace = apache.airavata.api.error.ttypes.AiravataClientException()
+          self.ace.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.STRUCT:
+          self.ase = apache.airavata.api.error.ttypes.AiravataSystemException()
+          self.ase.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 5:
+        if ftype == TType.STRUCT:
           self.ae = apache.airavata.api.error.ttypes.AuthorizationException()
           self.ae.read(iprot)
         else:
@@ -26425,9 +26799,25 @@ class updateExperimentConfiguration_result:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('updateExperimentConfiguration_result')
+    oprot.writeStructBegin('updateExperiment_result')
+    if self.ire is not None:
+      oprot.writeFieldBegin('ire', TType.STRUCT, 1)
+      self.ire.write(oprot)
+      oprot.writeFieldEnd()
+    if self.enf is not None:
+      oprot.writeFieldBegin('enf', TType.STRUCT, 2)
+      self.enf.write(oprot)
+      oprot.writeFieldEnd()
+    if self.ace is not None:
+      oprot.writeFieldBegin('ace', TType.STRUCT, 3)
+      self.ace.write(oprot)
+      oprot.writeFieldEnd()
+    if self.ase is not None:
+      oprot.writeFieldBegin('ase', TType.STRUCT, 4)
+      self.ase.write(oprot)
+      oprot.writeFieldEnd()
     if self.ae is not None:
-      oprot.writeFieldBegin('ae', TType.STRUCT, 1)
+      oprot.writeFieldBegin('ae', TType.STRUCT, 5)
       self.ae.write(oprot)
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
@@ -26439,6 +26829,10 @@ class updateExperimentConfiguration_result:
 
   def __hash__(self):
     value = 17
+    value = (value * 31) ^ hash(self.ire)
+    value = (value * 31) ^ hash(self.enf)
+    value = (value * 31) ^ hash(self.ace)
+    value = (value * 31) ^ hash(self.ase)
     value = (value * 31) ^ hash(self.ae)
     return value
 
@@ -26453,25 +26847,25 @@ class updateExperimentConfiguration_result:
   def __ne__(self, other):
     return not (self == other)
 
-class updateResourceScheduleing_args:
+class updateExperimentConfiguration_args:
   """
   Attributes:
    - authzToken
    - airavataExperimentId
-   - resourceScheduling
+   - userConfiguration
   """
 
   thrift_spec = (
     None, # 0
     (1, TType.STRUCT, 'authzToken', 
(apache.airavata.model.security.ttypes.AuthzToken, 
apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
     (2, TType.STRING, 'airavataExperimentId', None, None, ), # 2
-    (3, TType.STRUCT, 'resourceScheduling', 
(apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel, 
apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel.thrift_spec),
 None, ), # 3
+    (3, TType.STRUCT, 'userConfiguration', 
(apache.airavata.model.experiment.ttypes.UserConfigurationDataModel, 
apache.airavata.model.experiment.ttypes.UserConfigurationDataModel.thrift_spec),
 None, ), # 3
   )
 
-  def __init__(self, authzToken=None, airavataExperimentId=None, 
resourceScheduling=None,):
+  def __init__(self, authzToken=None, airavataExperimentId=None, 
userConfiguration=None,):
     self.authzToken = authzToken
     self.airavataExperimentId = airavataExperimentId
-    self.resourceScheduling = resourceScheduling
+    self.userConfiguration = userConfiguration
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
@@ -26495,8 +26889,8 @@ class updateResourceScheduleing_args:
           iprot.skip(ftype)
       elif fid == 3:
         if ftype == TType.STRUCT:
-          self.resourceScheduling = 
apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel()
-          self.resourceScheduling.read(iprot)
+          self.userConfiguration = 
apache.airavata.model.experiment.ttypes.UserConfigurationDataModel()
+          self.userConfiguration.read(iprot)
         else:
           iprot.skip(ftype)
       else:
@@ -26508,7 +26902,7 @@ class updateResourceScheduleing_args:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('updateResourceScheduleing_args')
+    oprot.writeStructBegin('updateExperimentConfiguration_args')
     if self.authzToken is not None:
       oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
       self.authzToken.write(oprot)
@@ -26517,9 +26911,9 @@ class updateResourceScheduleing_args:
       oprot.writeFieldBegin('airavataExperimentId', TType.STRING, 2)
       oprot.writeString(self.airavataExperimentId)
       oprot.writeFieldEnd()
-    if self.resourceScheduling is not None:
-      oprot.writeFieldBegin('resourceScheduling', TType.STRUCT, 3)
-      self.resourceScheduling.write(oprot)
+    if self.userConfiguration is not None:
+      oprot.writeFieldBegin('userConfiguration', TType.STRUCT, 3)
+      self.userConfiguration.write(oprot)
       oprot.writeFieldEnd()
     oprot.writeFieldStop()
     oprot.writeStructEnd()
@@ -26529,8 +26923,8 @@ class updateResourceScheduleing_args:
       raise TProtocol.TProtocolException(message='Required field authzToken is 
unset!')
     if self.airavataExperimentId is None:
       raise TProtocol.TProtocolException(message='Required field 
airavataExperimentId is unset!')
-    if self.resourceScheduling is None:
-      raise TProtocol.TProtocolException(message='Required field 
resourceScheduling is unset!')
+    if self.userConfiguration is None:
+      raise TProtocol.TProtocolException(message='Required field 
userConfiguration is unset!')
     return
 
 
@@ -26538,7 +26932,7 @@ class updateResourceScheduleing_args:
     value = 17
     value = (value * 31) ^ hash(self.authzToken)
     value = (value * 31) ^ hash(self.airavataExperimentId)
-    value = (value * 31) ^ hash(self.resourceScheduling)
+    value = (value * 31) ^ hash(self.userConfiguration)
     return value
 
   def __repr__(self):
@@ -26552,7 +26946,7 @@ class updateResourceScheduleing_args:
   def __ne__(self, other):
     return not (self == other)
 
-class updateResourceScheduleing_result:
+class updateExperimentConfiguration_result:
   """
   Attributes:
    - ae
@@ -26590,7 +26984,7 @@ class updateResourceScheduleing_result:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('updateResourceScheduleing_result')
+    oprot.writeStructBegin('updateExperimentConfiguration_result')
     if self.ae is not None:
       oprot.writeFieldBegin('ae', TType.STRUCT, 1)
       self.ae.write(oprot)
@@ -26618,22 +27012,25 @@ class updateResourceScheduleing_result:
   def __ne__(self, other):
     return not (self == other)
 
-class validateExperiment_args:
+class updateResourceScheduleing_args:
   """
   Attributes:
    - authzToken
    - airavataExperimentId
+   - resourceScheduling
   """
 
   thrift_spec = (
     None, # 0
     (1, TType.STRUCT, 'authzToken', 
(apache.airavata.model.security.ttypes.AuthzToken, 
apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
     (2, TType.STRING, 'airavataExperimentId', None, None, ), # 2
+    (3, TType.STRUCT, 'resourceScheduling', 
(apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel, 
apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel.thrift_spec),
 None, ), # 3
   )
 
-  def __init__(self, authzToken=None, airavataExperimentId=None,):
+  def __init__(self, authzToken=None, airavataExperimentId=None, 
resourceScheduling=None,):
     self.authzToken = authzToken
     self.airavataExperimentId = airavataExperimentId
+    self.resourceScheduling = resourceScheduling
 
   def read(self, iprot):
     if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
@@ -26655,6 +27052,12 @@ class validateExperiment_args:
           self.airavataExperimentId = iprot.readString()
         else:
           iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.STRUCT:
+          self.resourceScheduling = 
apache.airavata.model.scheduling.ttypes.ComputationalResourceSchedulingModel()
+          self.resourceScheduling.read(iprot)
+        else:
+          iprot.skip(ftype)
       else:
         iprot.skip(ftype)
       iprot.readFieldEnd()
@@ -26664,7 +27067,163 @@ class validateExperiment_args:
     if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
       oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
       return
-    oprot.writeStructBegin('validateExperiment_args')
+    oprot.writeStructBegin('updateResourceScheduleing_args')
+    if self.authzToken is not None:
+      oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
+      self.authzToken.write(oprot)
+      oprot.writeFieldEnd()
+    if self.airavataExperimentId is not None:
+      oprot.writeFieldBegin('airavataExperimentId', TType.STRING, 2)
+      oprot.writeString(self.airavataExperimentId)
+      oprot.writeFieldEnd()
+    if self.resourceScheduling is not None:
+      oprot.writeFieldBegin('resourceScheduling', TType.STRUCT, 3)
+      self.resourceScheduling.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.authzToken is None:
+      raise TProtocol.TProtocolException(message='Required field authzToken is 
unset!')
+    if self.airavataExperimentId is None:
+      raise TProtocol.TProtocolException(message='Required field 
airavataExperimentId is unset!')
+    if self.resourceScheduling is None:
+      raise TProtocol.TProtocolException(message='Required field 
resourceScheduling is unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.authzToken)
+    value = (value * 31) ^ hash(self.airavataExperimentId)
+    value = (value * 31) ^ hash(self.resourceScheduling)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    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 updateResourceScheduleing_result:
+  """
+  Attributes:
+   - ae
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'ae', 
(apache.airavata.api.error.ttypes.AuthorizationException, 
apache.airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ), 
# 1
+  )
+
+  def __init__(self, ae=None,):
+    self.ae = ae
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (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.STRUCT:
+          self.ae = apache.airavata.api.error.ttypes.AuthorizationException()
+          self.ae.read(iprot)
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
+      return
+    oprot.writeStructBegin('updateResourceScheduleing_result')
+    if self.ae is not None:
+      oprot.writeFieldBegin('ae', TType.STRUCT, 1)
+      self.ae.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.ae)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    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 validateExperiment_args:
+  """
+  Attributes:
+   - authzToken
+   - airavataExperimentId
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'authzToken', 
(apache.airavata.model.security.ttypes.AuthzToken, 
apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
+    (2, TType.STRING, 'airavataExperimentId', None, None, ), # 2
+  )
+
+  def __init__(self, authzToken=None, airavataExperimentId=None,):
+    self.authzToken = authzToken
+    self.airavataExperimentId = airavataExperimentId
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (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.STRUCT:
+          self.authzToken = apache.airavata.model.security.ttypes.AuthzToken()
+          self.authzToken.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRING:
+          self.airavataExperimentId = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
+      return
+    oprot.writeStructBegin('validateExperiment_args')
     if self.authzToken is not None:
       oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
       self.authzToken.write(oprot)
@@ -28434,6 +28993,261 @@ class cloneExperiment_result:
   def __ne__(self, other):
     return not (self == other)
 
+class cloneExperimentByAdmin_args:
+  """
+  Attributes:
+   - authzToken
+   - existingExperimentID
+   - newExperimentName
+   - newExperimentProjectId
+  """
+
+  thrift_spec = (
+    None, # 0
+    (1, TType.STRUCT, 'authzToken', 
(apache.airavata.model.security.ttypes.AuthzToken, 
apache.airavata.model.security.ttypes.AuthzToken.thrift_spec), None, ), # 1
+    (2, TType.STRING, 'existingExperimentID', None, None, ), # 2
+    (3, TType.STRING, 'newExperimentName', None, None, ), # 3
+    (4, TType.STRING, 'newExperimentProjectId', None, None, ), # 4
+  )
+
+  def __init__(self, authzToken=None, existingExperimentID=None, 
newExperimentName=None, newExperimentProjectId=None,):
+    self.authzToken = authzToken
+    self.existingExperimentID = existingExperimentID
+    self.newExperimentName = newExperimentName
+    self.newExperimentProjectId = newExperimentProjectId
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (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.STRUCT:
+          self.authzToken = apache.airavata.model.security.ttypes.AuthzToken()
+          self.authzToken.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRING:
+          self.existingExperimentID = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.STRING:
+          self.newExperimentName = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.STRING:
+          self.newExperimentProjectId = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
+      return
+    oprot.writeStructBegin('cloneExperimentByAdmin_args')
+    if self.authzToken is not None:
+      oprot.writeFieldBegin('authzToken', TType.STRUCT, 1)
+      self.authzToken.write(oprot)
+      oprot.writeFieldEnd()
+    if self.existingExperimentID is not None:
+      oprot.writeFieldBegin('existingExperimentID', TType.STRING, 2)
+      oprot.writeString(self.existingExperimentID)
+      oprot.writeFieldEnd()
+    if self.newExperimentName is not None:
+      oprot.writeFieldBegin('newExperimentName', TType.STRING, 3)
+      oprot.writeString(self.newExperimentName)
+      oprot.writeFieldEnd()
+    if self.newExperimentProjectId is not None:
+      oprot.writeFieldBegin('newExperimentProjectId', TType.STRING, 4)
+      oprot.writeString(self.newExperimentProjectId)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    if self.authzToken is None:
+      raise TProtocol.TProtocolException(message='Required field authzToken is 
unset!')
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.authzToken)
+    value = (value * 31) ^ hash(self.existingExperimentID)
+    value = (value * 31) ^ hash(self.newExperimentName)
+    value = (value * 31) ^ hash(self.newExperimentProjectId)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    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 cloneExperimentByAdmin_result:
+  """
+  Attributes:
+   - success
+   - ire
+   - enf
+   - ace
+   - ase
+   - ae
+   - pnfe
+  """
+
+  thrift_spec = (
+    (0, TType.STRING, 'success', None, None, ), # 0
+    (1, TType.STRUCT, 'ire', 
(apache.airavata.api.error.ttypes.InvalidRequestException, 
apache.airavata.api.error.ttypes.InvalidRequestException.thrift_spec), None, ), 
# 1
+    (2, TType.STRUCT, 'enf', 
(apache.airavata.api.error.ttypes.ExperimentNotFoundException, 
apache.airavata.api.error.ttypes.ExperimentNotFoundException.thrift_spec), 
None, ), # 2
+    (3, TType.STRUCT, 'ace', 
(apache.airavata.api.error.ttypes.AiravataClientException, 
apache.airavata.api.error.ttypes.AiravataClientException.thrift_spec), None, ), 
# 3
+    (4, TType.STRUCT, 'ase', 
(apache.airavata.api.error.ttypes.AiravataSystemException, 
apache.airavata.api.error.ttypes.AiravataSystemException.thrift_spec), None, ), 
# 4
+    (5, TType.STRUCT, 'ae', 
(apache.airavata.api.error.ttypes.AuthorizationException, 
apache.airavata.api.error.ttypes.AuthorizationException.thrift_spec), None, ), 
# 5
+    (6, TType.STRUCT, 'pnfe', 
(apache.airavata.api.error.ttypes.ProjectNotFoundException, 
apache.airavata.api.error.ttypes.ProjectNotFoundException.thrift_spec), None, 
), # 6
+  )
+
+  def __init__(self, success=None, ire=None, enf=None, ace=None, ase=None, 
ae=None, pnfe=None,):
+    self.success = success
+    self.ire = ire
+    self.enf = enf
+    self.ace = ace
+    self.ase = ase
+    self.ae = ae
+    self.pnfe = pnfe
+
+  def read(self, iprot):
+    if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is 
not None and fastbinary is not None:
+      fastbinary.decode_binary(self, iprot.trans, (self.__class__, 
self.thrift_spec))
+      return
+    iprot.readStructBegin()
+    while True:
+      (fname, ftype, fid) = iprot.readFieldBegin()
+      if ftype == TType.STOP:
+        break
+      if fid == 0:
+        if ftype == TType.STRING:
+          self.success = iprot.readString()
+        else:
+          iprot.skip(ftype)
+      elif fid == 1:
+        if ftype == TType.STRUCT:
+          self.ire = apache.airavata.api.error.ttypes.InvalidRequestException()
+          self.ire.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 2:
+        if ftype == TType.STRUCT:
+          self.enf = 
apache.airavata.api.error.ttypes.ExperimentNotFoundException()
+          self.enf.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 3:
+        if ftype == TType.STRUCT:
+          self.ace = apache.airavata.api.error.ttypes.AiravataClientException()
+          self.ace.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 4:
+        if ftype == TType.STRUCT:
+          self.ase = apache.airavata.api.error.ttypes.AiravataSystemException()
+          self.ase.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 5:
+        if ftype == TType.STRUCT:
+          self.ae = apache.airavata.api.error.ttypes.AuthorizationException()
+          self.ae.read(iprot)
+        else:
+          iprot.skip(ftype)
+      elif fid == 6:
+        if ftype == TType.STRUCT:
+          self.pnfe = 
apache.airavata.api.error.ttypes.ProjectNotFoundException()
+          self.pnfe.read(iprot)
+        else:
+          iprot.skip(ftype)
+      else:
+        iprot.skip(ftype)
+      iprot.readFieldEnd()
+    iprot.readStructEnd()
+
+  def write(self, oprot):
+    if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and 
self.thrift_spec is not None and fastbinary is not None:
+      oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, 
self.thrift_spec)))
+      return
+    oprot.writeStructBegin('cloneExperimentByAdmin_result')
+    if self.success is not None:
+      oprot.writeFieldBegin('success', TType.STRING, 0)
+      oprot.writeString(self.success)
+      oprot.writeFieldEnd()
+    if self.ire is not None:
+      oprot.writeFieldBegin('ire', TType.STRUCT, 1)
+      self.ire.write(oprot)
+      oprot.writeFieldEnd()
+    if self.enf is not None:
+      oprot.writeFieldBegin('enf', TType.STRUCT, 2)
+      self.enf.write(oprot)
+      oprot.writeFieldEnd()
+    if self.ace is not None:
+      oprot.writeFieldBegin('ace', TType.STRUCT, 3)
+      self.ace.write(oprot)
+      oprot.writeFieldEnd()
+    if self.ase is not None:
+      oprot.writeFieldBegin('ase', TType.STRUCT, 4)
+      self.ase.write(oprot)
+      oprot.writeFieldEnd()
+    if self.ae is not None:
+      oprot.writeFieldBegin('ae', TType.STRUCT, 5)
+      self.ae.write(oprot)
+      oprot.writeFieldEnd()
+    if self.pnfe is not None:
+      oprot.writeFieldBegin('pnfe', TType.STRUCT, 6)
+      self.pnfe.write(oprot)
+      oprot.writeFieldEnd()
+    oprot.writeFieldStop()
+    oprot.writeStructEnd()
+
+  def validate(self):
+    return
+
+
+  def __hash__(self):
+    value = 17
+    value = (value * 31) ^ hash(self.success)
+    value = (value * 31) ^ hash(self.ire)
+    value = (value * 31) ^ hash(self.enf)
+    value = (value * 31) ^ hash(self.ace)
+    value = (value * 31) ^ hash(self.ase)
+    value = (value * 31) ^ hash(self.ae)
+    value = (value * 31) ^ hash(self.pnfe)
+    return value
+
+  def __repr__(self):
+    L = ['%s=%r' % (key, value)
+      for key, value in self.__dict__.iteritems()]
+    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 terminateExperiment_args:
   """
   Attributes:

http://git-wip-us.apache.org/repos/asf/airavata/blob/177a2484/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/group/ttypes.py
----------------------------------------------------------------------
diff --git 
a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/group/ttypes.py
 
b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/group/ttypes.py
index 661c390..996700b 100644
--- 
a/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/group/ttypes.py
+++ 
b/airavata-api/airavata-client-sdks/airavata-python-sdk/src/main/resources/lib/apache/airavata/model/group/ttypes.py
@@ -41,15 +41,18 @@ class ResourceType:
 class ResourcePermissionType:
   WRITE = 0
   READ = 1
+  OWNER = 2
 
   _VALUES_TO_NAMES = {
     0: "WRITE",
     1: "READ",
+    2: "OWNER",
   }
 
   _NAMES_TO_VALUES = {
     "WRITE": 0,
     "READ": 1,
+    "OWNER": 2,
   }
 
 

http://git-wip-us.apache.org/repos/asf/airavata/blob/177a2484/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
----------------------------------------------------------------------
diff --git 
a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
 
b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
index b355864..558ed59 100644
--- 
a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
+++ 
b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/group/ResourcePermissionType.java
@@ -30,7 +30,8 @@ import org.apache.thrift.TEnum;
 
 public enum ResourcePermissionType implements org.apache.thrift.TEnum {
   WRITE(0),
-  READ(1);
+  READ(1),
+  OWNER(2);
 
   private final int value;
 
@@ -55,6 +56,8 @@ public enum ResourcePermissionType implements 
org.apache.thrift.TEnum {
         return WRITE;
       case 1:
         return READ;
+      case 2:
+        return OWNER;
       default:
         return null;
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/177a2484/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
----------------------------------------------------------------------
diff --git 
a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
 
b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
index 8501d94..b3ae341 100644
--- 
a/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
+++ 
b/modules/sharing-registry/sharing-registry-server/src/main/java/org/apache/airavata/sharing/registry/db/repositories/UserRepository.java
@@ -48,6 +48,9 @@ public class UserRepository extends AbstractRepository<User, 
UserEntity, UserPK>
         query += "u." + DBConstants.UserTable.DOMAIN_ID + " = '" + domainId + 
"' AND ";
         query += "s." + DBConstants.SharingTable.ENTITY_ID + " = '" + entityId 
+ "' AND ";
         query += "s." + DBConstants.SharingTable.PERMISSION_TYPE_ID + " = '" + 
permissionTypeId + "'";
+        if(permissionTypeId.equals((new 
PermissionTypeRepository()).getOwnerPermissionTypeIdForDomain(domainId))){
+            query += "AND s." + DBConstants.SharingTable.SHARING_TYPE + " LIKE 
'DIRECT_%'";
+        }
         query += " ORDER BY s.createdTime DESC";
         return select(query, 0, -1);
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/177a2484/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
----------------------------------------------------------------------
diff --git 
a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
 
b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
index d11e744..80cb1d4 100644
--- 
a/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
+++ 
b/modules/sharing-registry/sharing-registry-server/src/test/java/org/apache/airavata/sharing/registry/SharingRegistryServerHandlerTest.java
@@ -272,6 +272,8 @@ public class SharingRegistryServerHandlerTest {
         
Assert.assertNotNull(sharingRegistryServerHandler.getListOfSharedUsers(domainId,
 entityId1, permissionTypeId1));
         
Assert.assertNotNull(sharingRegistryServerHandler.getListOfSharedGroups(domainId,
 entityId1, permissionTypeId1));
 
+        
Assert.assertTrue(sharingRegistryServerHandler.getListOfSharedUsers(domainId, 
entityId1, "OWNER").size()==1);
+
 //        sharingRegistryServerHandler.revokeEntitySharingFromUsers(entityId1, 
Arrays.asList(userId2), permissionTypeId1);
 //        
sharingRegistryServerHandler.revokeEntitySharingFromGroups(entityId3, 
Arrays.asList(groupId2), permissionTypeId1);
     }

http://git-wip-us.apache.org/repos/asf/airavata/blob/177a2484/thrift-interface-descriptions/data-models/user-group-models/group_manager_cpi.thrift
----------------------------------------------------------------------
diff --git 
a/thrift-interface-descriptions/data-models/user-group-models/group_manager_cpi.thrift
 
b/thrift-interface-descriptions/data-models/user-group-models/group_manager_cpi.thrift
deleted file mode 100644
index 5b17fcd..0000000
--- 
a/thrift-interface-descriptions/data-models/user-group-models/group_manager_cpi.thrift
+++ /dev/null
@@ -1,95 +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 "./group_manager_model.thrift"
-
-namespace java org.apache.airavata.group.cpi
-
-service GroupManagerService {
-
-    /**
-     * Resources related API methods
-    **/
-    string registerResource(group_manager_model.Resource  resource);
-
-    bool updateResource(group_manager_model.Resource  resource);
-
-    bool deleteResource(string resourceId);
-
-    group_manager_model.Resource getResource(string resourceId);
-
-
-    /**
-     * Users related API methods
-    **/
-    bool registerUser(group_manager_model.User user);
-
-    bool updateUser(group_manager_model.User user);
-
-    bool deleteUser(string grouperUserId);
-
-    group_manager_model.User getUser(string grouperUserId);
-
-    bool assignUserToGroup(string grouperUserId, string groupId);
-
-    bool removeUserFromGroup(string grouperUserId, string groupId);
-
-    list<group_manager_model.GroupMembership> 
getAllGroupMembershipsForUser(string grouperUserId);
-
-
-    /**
-     * Groups related API methods
-    **/
-    string registerGroup(group_manager_model.Group group);
-
-    bool updateGroup(group_manager_model.Group group);
-
-    bool deleteGroup(string groupId);
-
-    group_manager_model.Group getGroup(string groupdId);
-
-    bool addGroupToGroup(string parentGroupId, string childGroupId);
-
-    bool removeGroupFromGroup(string parentGroupId, string childGroupId);
-
-    list<group_manager_model.GroupMembership> getAllMembersForTheGroup(string 
groupId);
-
-
-    /**
-     * Grant Revoke Permissions API methods
-    **/
-    bool grantPermissions(string subjectId, group_manager_model.SubjectType 
subjectType, string resourceId,
-        list<group_manager_model.ResourcePermissionType> grantPermissions, 
bool recursively)
-
-    bool revokePermissions(string subjectId, group_manager_model.SubjectType 
subjectType, string resourceId,
-            list<group_manager_model.ResourcePermissionType> 
revokePermissiones,bool recursively)
-
-    bool revokeAllPermissions(string subjectId, 
group_manager_model.SubjectType subjectType, string resourceId, bool 
recursively)
-
-
-    /**
-     * Browse and Search Related API method
-    **/
-    list<group_manager_model.Resource> getAccessibleResourcesForUser(string 
grouperUserId, group_manager_model.ResourceType resourceType,
-            list<group_manager_model.ResourcePermissionType> permissions, i32 
offset, i32 limit)
-
-    list<group_manager_model.Resource> searcgAccessibleResourcesForUser(string 
grouperUserId, group_manager_model.ResourceType resourceType,
-                list<group_manager_model.ResourcePermissionType> permissions, 
map<string,string> filters, i32 offset, i32 limit)
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/airavata/blob/177a2484/thrift-interface-descriptions/data-models/user-group-models/group_manager_model.thrift
----------------------------------------------------------------------
diff --git 
a/thrift-interface-descriptions/data-models/user-group-models/group_manager_model.thrift
 
b/thrift-interface-descriptions/data-models/user-group-models/group_manager_model.thrift
index b288840..2bc3b2f 100644
--- 
a/thrift-interface-descriptions/data-models/user-group-models/group_manager_model.thrift
+++ 
b/thrift-interface-descriptions/data-models/user-group-models/group_manager_model.thrift
@@ -35,7 +35,8 @@ enum ResourceType {
 
 enum ResourcePermissionType {
     WRITE,
-    READ
+    READ,
+    OWNER
 }
 
 struct GroupModel{

Reply via email to