You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by sc...@apache.org on 2015/06/10 18:54:36 UTC

[1/4] airavata git commit: Adding getExperimentStatistics API method

Repository: airavata
Updated Branches:
  refs/heads/master 3224e72a1 -> 2c6620f03


http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/WorkerResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/WorkerResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/WorkerResource.java
index 80bfe8e..c7dfd49 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/WorkerResource.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/WorkerResource.java
@@ -49,7 +49,7 @@ import java.util.UUID;
 public class WorkerResource extends AbstractExpCatResource {
     private final static Logger logger = LoggerFactory.getLogger(WorkerResource.class);
     private String user;
-	private String gatewayId;
+    private String gatewayId;
 
     public WorkerResource() {
     }
@@ -69,38 +69,38 @@ public class WorkerResource extends AbstractExpCatResource {
 
     /**
      * Gateway worker can create child data structures such as projects and user workflows
+     *
      * @param type child resource type
-     * @return  child resource
+     * @return child resource
      */
-	public ExperimentCatResource create(ResourceType type) throws RegistryException{
-		ExperimentCatResource result = null;
-		switch (type) {
-			case PROJECT:
-				ProjectResource projectResource = new ProjectResource();
-				projectResource.setWorker(this);
-				projectResource.setGatewayId(gatewayId);
-				result=projectResource;
-				break;
+    public ExperimentCatResource create(ResourceType type) throws RegistryException {
+        ExperimentCatResource result = null;
+        switch (type) {
+            case PROJECT:
+                ProjectResource projectResource = new ProjectResource();
+                projectResource.setWorker(this);
+                projectResource.setGatewayId(gatewayId);
+                result = projectResource;
+                break;
             case EXPERIMENT:
                 ExperimentResource experimentResource = new ExperimentResource();
                 experimentResource.setExecutionUser(user);
                 experimentResource.setGatewayId(gatewayId);
                 result = experimentResource;
                 break;
-			default:
+            default:
                 logger.error("Unsupported resource type for worker resource.", new IllegalArgumentException());
                 throw new IllegalArgumentException("Unsupported resource type for worker resource.");
 
-		}
-		return result;
-	}
+        }
+        return result;
+    }
 
     /**
-     *
      * @param type child resource type
      * @param name child resource name
      */
-	public void remove(ResourceType type, Object name) throws RegistryException{
+    public void remove(ResourceType type, Object name) throws RegistryException {
         EntityManager em = null;
         try {
             em = ExpCatResourceUtils.getEntityManager();
@@ -131,7 +131,7 @@ public class WorkerResource extends AbstractExpCatResource {
             throw new RegistryException(e.getMessage());
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -140,12 +140,11 @@ public class WorkerResource extends AbstractExpCatResource {
     }
 
     /**
-     *
      * @param type child resource type
      * @param name child resource name
      * @return child resource
      */
-	public ExperimentCatResource get(ResourceType type, Object name) throws RegistryException{
+    public ExperimentCatResource get(ResourceType type, Object name) throws RegistryException {
         ExperimentCatResource result = null;
         EntityManager em = null;
         try {
@@ -178,7 +177,7 @@ public class WorkerResource extends AbstractExpCatResource {
             throw new RegistryException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -231,14 +230,14 @@ public class WorkerResource extends AbstractExpCatResource {
      * @param type child resource type
      * @return list of child resources
      */
-    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException{
+    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException {
         return get(type, -1, -1, null, null);
     }
 
     /**
      * Method get all results of the given child resource type with paginaltion and ordering
      *
-     * @param type child resource type
+     * @param type              child resource type
      * @param limit
      * @param offset
      * @param orderByIdentifier
@@ -247,7 +246,7 @@ public class WorkerResource extends AbstractExpCatResource {
      * @throws RegistryException
      */
     public List<ExperimentCatResource> get(ResourceType type, int limit, int offset, Object orderByIdentifier,
-                              ResultOrderType resultOrderType) throws RegistryException{
+                                           ResultOrderType resultOrderType) throws RegistryException {
         List<ExperimentCatResource> result = new ArrayList<ExperimentCatResource>();
         EntityManager em = null;
         try {
@@ -261,20 +260,20 @@ public class WorkerResource extends AbstractExpCatResource {
                     Users users = em.find(Users.class, getUser());
                     Gateway gatewayModel = em.find(Gateway.class, gatewayId);
                     generator.setParameter("users", users);
-                    if (gatewayModel != null){
+                    if (gatewayModel != null) {
                         generator.setParameter("gateway", gatewayModel);
                     }
 
                     //ordering - only supported only by CREATION_TIME
-                    if(orderByIdentifier != null && resultOrderType != null
+                    if (orderByIdentifier != null && resultOrderType != null
                             && orderByIdentifier.equals(Constants.FieldConstants.ProjectConstants.CREATION_TIME)) {
                         q = generator.selectQuery(em, ProjectConstants.CREATION_TIME, resultOrderType);
-                    }else{
+                    } else {
                         q = generator.selectQuery(em);
                     }
 
                     //pagination
-                    if(limit>0 && offset>=0){
+                    if (limit > 0 && offset >= 0) {
                         q.setFirstResult(offset);
                         q.setMaxResults(limit);
                     }
@@ -290,15 +289,15 @@ public class WorkerResource extends AbstractExpCatResource {
                     generator.setParameter(ExperimentConstants.EXECUTION_USER, getUser());
 
                     //ordering - only supported only by CREATION_TIME
-                    if(orderByIdentifier != null && resultOrderType != null
+                    if (orderByIdentifier != null && resultOrderType != null
                             && orderByIdentifier.equals(Constants.FieldConstants.ProjectConstants.CREATION_TIME)) {
                         q = generator.selectQuery(em, ExperimentConstants.CREATION_TIME, resultOrderType);
-                    }else{
+                    } else {
                         q = generator.selectQuery(em);
                     }
 
                     //pagination
-                    if(limit>0 && offset>=0){
+                    if (limit > 0 && offset >= 0) {
                         q.setFirstResult(offset);
                         q.setMaxResults(limit);
                     }
@@ -320,7 +319,7 @@ public class WorkerResource extends AbstractExpCatResource {
             throw new RegistryException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -332,7 +331,7 @@ public class WorkerResource extends AbstractExpCatResource {
     /**
      * save gateway worker to database
      */
-	public void save() throws RegistryException{
+    public void save() throws RegistryException {
         EntityManager em = null;
         try {
             em = ExpCatResourceUtils.getEntityManager();
@@ -361,7 +360,7 @@ public class WorkerResource extends AbstractExpCatResource {
             throw new RegistryException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -370,40 +369,36 @@ public class WorkerResource extends AbstractExpCatResource {
     }
 
     /**
-     *
      * @return user name
      */
-	public String getUser() {
-		return user;
-	}
+    public String getUser() {
+        return user;
+    }
 
     /**
-     *
      * @param user user name
      */
     public void setUser(String user) {
-		this.user = user;
-	}
+        this.user = user;
+    }
 
     /**
-     *
-     * @param id  project id
+     * @param id project id
      * @return whether the project is available under the user
      */
-    public boolean isProjectExists(String id) throws RegistryException{
-		return isExists(ResourceType.PROJECT, id);
-	}
+    public boolean isProjectExists(String id) throws RegistryException {
+        return isExists(ResourceType.PROJECT, id);
+    }
 
     /**
-     *
      * @param projectId project id
      * @return project resource for the user
      */
-	public ProjectResource createProject(String projectId) throws RegistryException{
-		ProjectResource project=(ProjectResource)create(ResourceType.PROJECT);
+    public ProjectResource createProject(String projectId) throws RegistryException {
+        ProjectResource project = (ProjectResource) create(ResourceType.PROJECT);
         project.setId(projectId);
-		return project;
-	}
+        return project;
+    }
 
     public String getProjectID(String projectName) {
         String pro = projectName.replaceAll("\\s", "");
@@ -411,39 +406,38 @@ public class WorkerResource extends AbstractExpCatResource {
     }
 
     /**
-     *
      * @param id project id
      * @return project resource
      */
-	public ProjectResource getProject(String id) throws RegistryException{
-		return (ProjectResource)get(ResourceType.PROJECT, id);
-	}
+    public ProjectResource getProject(String id) throws RegistryException {
+        return (ProjectResource) get(ResourceType.PROJECT, id);
+    }
 
     /**
-     *
      * @param id project id
      */
-	public void removeProject(String id) throws RegistryException{
-		remove(ResourceType.PROJECT, id);
-	}
+    public void removeProject(String id) throws RegistryException {
+        remove(ResourceType.PROJECT, id);
+    }
 
     /**
      * Get projects list of user
-     * @return  list of projects for the user
+     *
+     * @return list of projects for the user
      */
-    public List<ProjectResource> getProjects() throws RegistryException{
-		return getProjects(-1, -1, null, null);
-	}
+    public List<ProjectResource> getProjects() throws RegistryException {
+        return getProjects(-1, -1, null, null);
+    }
 
 
     /**
      * Get projects list of user with pagination and ordering
      *
-     * @return  list of projects for the user
+     * @return list of projects for the user
      */
     public List<ProjectResource> getProjects(int limit, int offset, Object orderByIdentifier,
-                                             ResultOrderType resultOrderType) throws RegistryException{
-        List<ProjectResource> result=new ArrayList<ProjectResource>();
+                                             ResultOrderType resultOrderType) throws RegistryException {
+        List<ProjectResource> result = new ArrayList<ProjectResource>();
         List<ExperimentCatResource> list = get(ResourceType.PROJECT, limit, offset, orderByIdentifier, resultOrderType);
         for (ExperimentCatResource resource : list) {
             result.add((ProjectResource) resource);
@@ -452,23 +446,21 @@ public class WorkerResource extends AbstractExpCatResource {
     }
 
     /**
-     *
      * @param name experiment name
      * @return whether experiment is already exist for the given user
      */
-	public boolean isExperimentExists(String name) throws RegistryException{
-		return isExists(ResourceType.EXPERIMENT, name);
-	}
-	
+    public boolean isExperimentExists(String name) throws RegistryException {
+        return isExists(ResourceType.EXPERIMENT, name);
+    }
+
 
     /**
-     *
      * @param name experiment name
      * @return experiment resource
      */
-    public ExperimentResource getExperiment(String name) throws RegistryException{
-		return (ExperimentResource)get(ResourceType.EXPERIMENT, name);
-	}
+    public ExperimentResource getExperiment(String name) throws RegistryException {
+        return (ExperimentResource) get(ResourceType.EXPERIMENT, name);
+    }
 //
 //    public GFacJobDataResource getGFacJob(String jobId){
 //    	return (GFacJobDataResource)get(ResourceType.GFAC_JOB_DATA,jobId);
@@ -476,14 +468,16 @@ public class WorkerResource extends AbstractExpCatResource {
 
     /**
      * Method to get list of expeirments of user
+     *
      * @return list of experiments for the user
      */
-	public List<ExperimentResource> getExperiments() throws RegistryException{
-		return getExperiments(-1, -1, null, null);
-	}
+    public List<ExperimentResource> getExperiments() throws RegistryException {
+        return getExperiments(-1, -1, null, null);
+    }
 
     /**
      * Method to get list of experiments of user with pagination and ordering
+     *
      * @param limit
      * @param offset
      * @param orderByIdentifier
@@ -492,8 +486,8 @@ public class WorkerResource extends AbstractExpCatResource {
      * @throws RegistryException
      */
     public List<ExperimentResource> getExperiments(int limit, int offset, Object orderByIdentifier,
-                                                   ResultOrderType resultOrderType) throws RegistryException{
-        List<ExperimentResource> result=new ArrayList<ExperimentResource>();
+                                                   ResultOrderType resultOrderType) throws RegistryException {
+        List<ExperimentResource> result = new ArrayList<ExperimentResource>();
         List<ExperimentCatResource> list = get(ResourceType.EXPERIMENT, limit, offset, orderByIdentifier, resultOrderType);
         for (ExperimentCatResource resource : list) {
             result.add((ExperimentResource) resource);
@@ -502,12 +496,11 @@ public class WorkerResource extends AbstractExpCatResource {
     }
 
     /**
-     *
-     * @param experimentId  experiment name
+     * @param experimentId experiment name
      */
-	public void removeExperiment(String experimentId) throws RegistryException{
-		remove(ResourceType.EXPERIMENT, experimentId);
-	}
+    public void removeExperiment(String experimentId) throws RegistryException {
+        remove(ResourceType.EXPERIMENT, experimentId);
+    }
 
     /**
      * To search the projects of user with the given filter criteria and retrieve the results with
@@ -524,7 +517,7 @@ public class WorkerResource extends AbstractExpCatResource {
      * @throws RegistryException
      */
     public List<ProjectResource> searchProjects(Map<String, String> filters, int limit,
-             int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException {
+                                                int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException {
         List<ProjectResource> result = new ArrayList<ProjectResource>();
         EntityManager em = null;
         try {
@@ -534,10 +527,10 @@ public class WorkerResource extends AbstractExpCatResource {
                     String filterVal = filters.get(field);
                     if (field.equals(ProjectConstants.USERNAME)) {
                         query += "p." + field + "= '" + filterVal + "' AND ";
-                    }else if (field.equals(ProjectConstants.GATEWAY_ID)) {
+                    } else if (field.equals(ProjectConstants.GATEWAY_ID)) {
                         query += "p." + field + "= '" + filterVal + "' AND ";
-                    }else {
-                        if (filterVal.contains("*")){
+                    } else {
+                        if (filterVal.contains("*")) {
                             filterVal = filterVal.replaceAll("\\*", "");
                         }
                         query += "p." + field + " LIKE '%" + filterVal + "%' AND ";
@@ -547,8 +540,8 @@ public class WorkerResource extends AbstractExpCatResource {
             query = query.substring(0, query.length() - 5);
 
             //ordering
-            if( orderByIdentifier != null && resultOrderType != null
-                    && orderByIdentifier.equals(Constants.FieldConstants.ProjectConstants.CREATION_TIME)){
+            if (orderByIdentifier != null && resultOrderType != null
+                    && orderByIdentifier.equals(Constants.FieldConstants.ProjectConstants.CREATION_TIME)) {
                 String order = (resultOrderType == ResultOrderType.ASC) ? "ASC" : "DESC";
                 query += " ORDER BY p." + ProjectConstants.CREATION_TIME + " " + order;
             }
@@ -558,9 +551,9 @@ public class WorkerResource extends AbstractExpCatResource {
             Query q;
 
             //pagination
-            if(offset>=0 && limit >=0){
+            if (offset >= 0 && limit >= 0) {
                 q = em.createQuery(query).setFirstResult(offset).setMaxResults(limit);
-            }else{
+            } else {
                 q = em.createQuery(query);
             }
 
@@ -578,7 +571,7 @@ public class WorkerResource extends AbstractExpCatResource {
             throw new RegistryException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -604,20 +597,20 @@ public class WorkerResource extends AbstractExpCatResource {
      * @throws RegistryException
      */
     public List<ExperimentSummaryResource> searchExperiments(Timestamp fromTime, Timestamp toTime, Map<String, String> filters, int limit,
-                                                      int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException {
+                                                             int offset, Object orderByIdentifier, ResultOrderType resultOrderType) throws RegistryException {
         List<ExperimentSummaryResource> result = new ArrayList();
         EntityManager em = null;
         try {
             String query = "SELECT e, s FROM Experiment e " +
                     ",Status s WHERE e.expId=s.expId AND " +
                     "s.statusType='" + StatusType.EXPERIMENT + "' AND ";
-            if(filters.get(StatusConstants.STATE) != null) {
+            if (filters.get(StatusConstants.STATE) != null) {
                 String experimentState = ExperimentState.valueOf(filters.get(StatusConstants.STATE)).toString();
                 query += "s.state='" + experimentState + "' AND ";
             }
 
-            if(toTime != null && fromTime != null && toTime.after(fromTime)){
-                query += "e.creationTime > '" + fromTime +  "' " + "AND e.creationTime <'" + toTime + "' AND ";
+            if (toTime != null && fromTime != null && toTime.after(fromTime)) {
+                query += "e.creationTime > '" + fromTime + "' " + "AND e.creationTime <'" + toTime + "' AND ";
             }
 
             filters.remove(StatusConstants.STATE);
@@ -626,12 +619,12 @@ public class WorkerResource extends AbstractExpCatResource {
                     String filterVal = filters.get(field);
                     if (field.equals(ExperimentConstants.EXECUTION_USER)) {
                         query += "e." + field + "= '" + filterVal + "' AND ";
-                    }else if (field.equals(ExperimentConstants.GATEWAY_ID)) {
+                    } else if (field.equals(ExperimentConstants.GATEWAY_ID)) {
                         query += "e." + field + "= '" + filterVal + "' AND ";
                     } else if (field.equals(ExperimentConstants.PROJECT_ID)) {
                         query += "e." + field + "= '" + filterVal + "' AND ";
                     } else {
-                        if (filterVal.contains("*")){
+                        if (filterVal.contains("*")) {
                             filterVal = filterVal.replaceAll("\\*", "");
                         }
                         query += "e." + field + " LIKE '%" + filterVal + "%' AND ";
@@ -641,8 +634,8 @@ public class WorkerResource extends AbstractExpCatResource {
             query = query.substring(0, query.length() - 5);
 
             //ordering
-            if( orderByIdentifier != null && resultOrderType != null
-                    && orderByIdentifier.equals(Constants.FieldConstants.ExperimentConstants.CREATION_TIME)){
+            if (orderByIdentifier != null && resultOrderType != null
+                    && orderByIdentifier.equals(Constants.FieldConstants.ExperimentConstants.CREATION_TIME)) {
                 String order = (resultOrderType == ResultOrderType.ASC) ? "ASC" : "DESC";
                 query += " ORDER BY e." + ExperimentConstants.CREATION_TIME + " " + order;
             }
@@ -652,9 +645,9 @@ public class WorkerResource extends AbstractExpCatResource {
             Query q;
 
             //pagination
-            if(offset>=0 && limit >=0){
+            if (offset >= 0 && limit >= 0) {
                 q = em.createQuery(query).setFirstResult(offset).setMaxResults(limit);
-            }else{
+            } else {
                 q = em.createQuery(query);
             }
             OpenJPAQuery kq = OpenJPAPersistence.cast(q);
@@ -663,8 +656,8 @@ public class WorkerResource extends AbstractExpCatResource {
 
             List resultList = q.getResultList();
             for (Object o : resultList) {
-                Experiment experiment = (Experiment) ((Object[])o)[0];
-                Status experimentStatus = (Status) ((Object[])o)[1];
+                Experiment experiment = (Experiment) ((Object[]) o)[0];
+                Status experimentStatus = (Status) ((Object[]) o)[1];
                 experiment.setExperimentStatus(experimentStatus);
                 ExperimentSummaryResource experimentSummaryResource =
                         (ExperimentSummaryResource) Utils.getResource(ResourceType.EXPERIMENT_SUMMARY, experiment);
@@ -677,7 +670,7 @@ public class WorkerResource extends AbstractExpCatResource {
             throw new RegistryException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();
@@ -686,11 +679,87 @@ public class WorkerResource extends AbstractExpCatResource {
         return result;
     }
 
+
     /**
+     * Method to get experiment statistics for a gateway
      *
+     * @param gatewayId
+     * @param fromTime
+     * @param toTime
+     * @return
+     * @throws RegistryException
+     */
+    public ExperimentStatisticsResource getExperimentStatistics(String gatewayId, Timestamp fromTime, Timestamp toTime) throws RegistryException {
+        ExperimentStatisticsResource experimentStatisticsResource = new ExperimentStatisticsResource();
+        List<ExperimentSummaryResource> allExperiments = getExperimentStatisticsForState(null, gatewayId, fromTime, toTime);
+        experimentStatisticsResource.setAllExperimentCount(allExperiments.size());
+        experimentStatisticsResource.setAllExperiments(allExperiments);
+
+        List<ExperimentSummaryResource> completedExperiments = getExperimentStatisticsForState(ExperimentState.COMPLETED, gatewayId, fromTime, toTime);
+        experimentStatisticsResource.setCompletedExperimentCount(completedExperiments.size());
+        experimentStatisticsResource.setCompletedExperiments(completedExperiments);
+
+        List<ExperimentSummaryResource> failedExperiments = getExperimentStatisticsForState(ExperimentState.FAILED, gatewayId, fromTime, toTime);
+        experimentStatisticsResource.setFailedExperimentCount(failedExperiments.size());
+        experimentStatisticsResource.setFailedExperiments(failedExperiments);
+
+        List<ExperimentSummaryResource> cancelledExperiments = getExperimentStatisticsForState(ExperimentState.CANCELED, gatewayId, fromTime, toTime);
+        experimentStatisticsResource.setCancelledExperimentCount(cancelledExperiments.size());
+        experimentStatisticsResource.setCancelledExperiments(cancelledExperiments);
+
+        return experimentStatisticsResource;
+    }
+
+    private List<ExperimentSummaryResource> getExperimentStatisticsForState(
+            ExperimentState expState, String gatewayId, Timestamp fromTime, Timestamp toTime) throws RegistryException {
+        EntityManager em = null;
+        List<ExperimentSummaryResource> result = new ArrayList();
+        try {
+            String query = "SELECT e, s FROM Experiment e " +
+                    ",Status s WHERE e.expId=s.expId AND " +
+                    "s.statusType='" + StatusType.EXPERIMENT + "' AND ";
+            if (expState != null) {
+                query += "s.state='" + expState.toString() + "' AND ";
+            }
+            query += "e.creationTime > '" + fromTime + "' " + "AND e.creationTime <'" + toTime + "' AND ";
+            query += "e." + ExperimentConstants.GATEWAY_ID + "= '" + gatewayId + "'";
+
+            em = ExpCatResourceUtils.getEntityManager();
+            em.getTransaction().begin();
+            Query q = em.createQuery(query);
+            OpenJPAQuery kq = OpenJPAPersistence.cast(q);
+            JDBCFetchPlan fetch = (JDBCFetchPlan) kq.getFetchPlan();
+            fetch.setEagerFetchMode(FetchMode.JOIN);
+
+            List resultList = q.getResultList();
+            for (Object o : resultList) {
+                Experiment experiment = (Experiment) ((Object[]) o)[0];
+                Status experimentStatus = (Status) ((Object[]) o)[1];
+                experiment.setExperimentStatus(experimentStatus);
+                ExperimentSummaryResource experimentSummaryResource =
+                        (ExperimentSummaryResource) Utils.getResource(ResourceType.EXPERIMENT_SUMMARY, experiment);
+                result.add(experimentSummaryResource);
+            }
+            em.getTransaction().commit();
+            em.close();
+        } catch (Exception e) {
+            logger.error(e.getMessage(), e);
+            throw new RegistryException(e);
+        } finally {
+            if (em != null && em.isOpen()) {
+                if (em.getTransaction().isActive()) {
+                    em.getTransaction().rollback();
+                }
+                em.close();
+            }
+        }
+        return result;
+    }
+
+    /**
      * @return list of experiments for the user
      */
-    public List<ExperimentResource> getExperimentsByCaching(String user) throws RegistryException{
+    public List<ExperimentResource> getExperimentsByCaching(String user) throws RegistryException {
         List<ExperimentResource> result = new ArrayList<ExperimentResource>();
         EntityManager em = null;
         try {
@@ -714,7 +783,7 @@ public class WorkerResource extends AbstractExpCatResource {
             throw new RegistryException(e);
         } finally {
             if (em != null && em.isOpen()) {
-                if (em.getTransaction().isActive()){
+                if (em.getTransaction().isActive()) {
                     em.getTransaction().rollback();
                 }
                 em.close();

http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/ExperimentCatalogModelType.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/ExperimentCatalogModelType.java b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/ExperimentCatalogModelType.java
index 74b1e69..22d755f 100644
--- a/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/ExperimentCatalogModelType.java
+++ b/modules/registry/registry-cpi/src/main/java/org/apache/airavata/registry/cpi/ExperimentCatalogModelType.java
@@ -26,6 +26,7 @@ public enum ExperimentCatalogModelType {
     PROJECT,
     GATEWAY,
     EXPERIMENT,
+    EXPERIMENT_STATISTICS,
     EXPERIMENT_INPUT,
     EXPERIMENT_OUTPUT,
     EXPERIMENT_STATUS,


[4/4] airavata git commit: Adding getExperimentStatistics API method

Posted by sc...@apache.org.
Adding getExperimentStatistics API method


Project: http://git-wip-us.apache.org/repos/asf/airavata/repo
Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/2c6620f0
Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/2c6620f0
Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/2c6620f0

Branch: refs/heads/master
Commit: 2c6620f03f5d5ba9d7255f65156adffbe687ff18
Parents: 3224e72
Author: Supun Nakandala <sc...@apache.org>
Authored: Wed Jun 10 22:23:17 2015 +0530
Committer: Supun Nakandala <sc...@apache.org>
Committed: Wed Jun 10 22:23:17 2015 +0530

----------------------------------------------------------------------
 .../server/handler/AiravataServerHandler.java   |    36 +
 .../java/org/apache/airavata/api/Airavata.java  | 16246 +++++++++--------
 .../experiment/ExperimentStatistics.java        |  1280 ++
 .../airavata-api/airavataAPI.thrift             |    15 +
 .../airavata-api/experimentModel.thrift         |    11 +
 .../catalog/impl/ExperimentCatalogImpl.java     |     3 +
 .../catalog/impl/ExperimentRegistry.java        |    51 +
 .../resources/ExperimentStatisticsResource.java |   133 +
 .../catalog/resources/WorkerResource.java       |   287 +-
 .../cpi/ExperimentCatalogModelType.java         |     1 +
 10 files changed, 10515 insertions(+), 7548 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
index 3f0fc0d..915973a 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/handler/AiravataServerHandler.java
@@ -1003,6 +1003,42 @@ public class AiravataServerHandler implements Airavata.Iface {
     }
 
     /**
+     * Get Experiment execution statisitics by sending the gateway id and the time period interested in.
+     * This method will retrun an ExperimentStatistics object which contains the number of successfully
+     * completed experiments, failed experiments etc.
+     * @param gatewayId
+     * @param fromTime
+     * @param toTime
+     * @return
+     * @throws InvalidRequestException
+     * @throws AiravataClientException
+     * @throws AiravataSystemException
+     * @throws TException
+     */
+    @Override
+    public ExperimentStatistics getExperimentStatistics(String gatewayId, long fromTime, long toTime) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
+        if (!isGatewayExist(gatewayId)){
+            logger.error("Gateway does not exist.Please provide a valid gateway id...");
+            throw new AiravataSystemException(AiravataErrorType.INTERNAL_ERROR);
+        }
+        try {
+            Map<String, String> filters = new HashMap();
+            filters.put(Constants.FieldConstants.ExperimentConstants.GATEWAY, gatewayId);
+            filters.put(Constants.FieldConstants.ExperimentConstants.FROM_DATE, fromTime+"");
+            filters.put(Constants.FieldConstants.ExperimentConstants.TO_DATE, toTime+"");
+
+            List<Object> results = experimentCatalog.search(ExperimentCatalogModelType.EXPERIMENT_STATISTICS, filters);
+            return (ExperimentStatistics) results.get(0);
+        }catch (Exception e) {
+            logger.error("Error while retrieving experiments", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving experiments. More info : " + e.getMessage());
+            throw exception;
+        }
+    }
+
+    /**
      * Get all Experiments within a Project
      *
      * @param projectId


[2/4] airavata git commit: Adding getExperimentStatistics API method

Posted by sc...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/ExperimentStatistics.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/ExperimentStatistics.java b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/ExperimentStatistics.java
new file mode 100644
index 0000000..d191249
--- /dev/null
+++ b/airavata-api/airavata-data-models/src/main/java/org/apache/airavata/model/workspace/experiment/ExperimentStatistics.java
@@ -0,0 +1,1280 @@
+/**
+ * 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.
+ */
+/**
+ * Autogenerated by Thrift Compiler (0.9.1)
+ *
+ * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
+ *  @generated
+ */
+package org.apache.airavata.model.workspace.experiment;
+
+import org.apache.thrift.EncodingUtils;
+import org.apache.thrift.TException;
+import org.apache.thrift.protocol.TProtocolException;
+import org.apache.thrift.protocol.TTupleProtocol;
+import org.apache.thrift.scheme.IScheme;
+import org.apache.thrift.scheme.SchemeFactory;
+import org.apache.thrift.scheme.StandardScheme;
+import org.apache.thrift.scheme.TupleScheme;
+
+import java.util.*;
+
+public class ExperimentStatistics implements org.apache.thrift.TBase<ExperimentStatistics, ExperimentStatistics._Fields>, java.io.Serializable, Cloneable, Comparable<ExperimentStatistics> {
+  private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("ExperimentStatistics");
+
+  private static final org.apache.thrift.protocol.TField ALL_EXPERIMENT_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("allExperimentCount", org.apache.thrift.protocol.TType.I32, (short)1);
+  private static final org.apache.thrift.protocol.TField COMPLETED_EXPERIMENT_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("completedExperimentCount", org.apache.thrift.protocol.TType.I32, (short)2);
+  private static final org.apache.thrift.protocol.TField CANCELLED_EXPERIMENT_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("cancelledExperimentCount", org.apache.thrift.protocol.TType.I32, (short)3);
+  private static final org.apache.thrift.protocol.TField FAILED_EXPERIMENT_COUNT_FIELD_DESC = new org.apache.thrift.protocol.TField("failedExperimentCount", org.apache.thrift.protocol.TType.I32, (short)4);
+  private static final org.apache.thrift.protocol.TField ALL_EXPERIMENTS_FIELD_DESC = new org.apache.thrift.protocol.TField("allExperiments", org.apache.thrift.protocol.TType.LIST, (short)5);
+  private static final org.apache.thrift.protocol.TField COMPLETED_EXPERIMENTS_FIELD_DESC = new org.apache.thrift.protocol.TField("completedExperiments", org.apache.thrift.protocol.TType.LIST, (short)6);
+  private static final org.apache.thrift.protocol.TField FAILED_EXPERIMENTS_FIELD_DESC = new org.apache.thrift.protocol.TField("failedExperiments", org.apache.thrift.protocol.TType.LIST, (short)7);
+  private static final org.apache.thrift.protocol.TField CANCELLED_EXPERIMENTS_FIELD_DESC = new org.apache.thrift.protocol.TField("cancelledExperiments", org.apache.thrift.protocol.TType.LIST, (short)8);
+
+  private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
+  static {
+    schemes.put(StandardScheme.class, new ExperimentStatisticsStandardSchemeFactory());
+    schemes.put(TupleScheme.class, new ExperimentStatisticsTupleSchemeFactory());
+  }
+
+  public int allExperimentCount; // required
+  public int completedExperimentCount; // required
+  public int cancelledExperimentCount; // optional
+  public int failedExperimentCount; // required
+  public List<ExperimentSummary> allExperiments; // required
+  public List<ExperimentSummary> completedExperiments; // optional
+  public List<ExperimentSummary> failedExperiments; // optional
+  public List<ExperimentSummary> cancelledExperiments; // optional
+
+  /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
+  public enum _Fields implements org.apache.thrift.TFieldIdEnum {
+    ALL_EXPERIMENT_COUNT((short)1, "allExperimentCount"),
+    COMPLETED_EXPERIMENT_COUNT((short)2, "completedExperimentCount"),
+    CANCELLED_EXPERIMENT_COUNT((short)3, "cancelledExperimentCount"),
+    FAILED_EXPERIMENT_COUNT((short)4, "failedExperimentCount"),
+    ALL_EXPERIMENTS((short)5, "allExperiments"),
+    COMPLETED_EXPERIMENTS((short)6, "completedExperiments"),
+    FAILED_EXPERIMENTS((short)7, "failedExperiments"),
+    CANCELLED_EXPERIMENTS((short)8, "cancelledExperiments");
+
+    private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
+
+    static {
+      for (_Fields field : EnumSet.allOf(_Fields.class)) {
+        byName.put(field.getFieldName(), field);
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, or null if its not found.
+     */
+    public static _Fields findByThriftId(int fieldId) {
+      switch(fieldId) {
+        case 1: // ALL_EXPERIMENT_COUNT
+          return ALL_EXPERIMENT_COUNT;
+        case 2: // COMPLETED_EXPERIMENT_COUNT
+          return COMPLETED_EXPERIMENT_COUNT;
+        case 3: // CANCELLED_EXPERIMENT_COUNT
+          return CANCELLED_EXPERIMENT_COUNT;
+        case 4: // FAILED_EXPERIMENT_COUNT
+          return FAILED_EXPERIMENT_COUNT;
+        case 5: // ALL_EXPERIMENTS
+          return ALL_EXPERIMENTS;
+        case 6: // COMPLETED_EXPERIMENTS
+          return COMPLETED_EXPERIMENTS;
+        case 7: // FAILED_EXPERIMENTS
+          return FAILED_EXPERIMENTS;
+        case 8: // CANCELLED_EXPERIMENTS
+          return CANCELLED_EXPERIMENTS;
+        default:
+          return null;
+      }
+    }
+
+    /**
+     * Find the _Fields constant that matches fieldId, throwing an exception
+     * if it is not found.
+     */
+    public static _Fields findByThriftIdOrThrow(int fieldId) {
+      _Fields fields = findByThriftId(fieldId);
+      if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
+      return fields;
+    }
+
+    /**
+     * Find the _Fields constant that matches name, or null if its not found.
+     */
+    public static _Fields findByName(String name) {
+      return byName.get(name);
+    }
+
+    private final short _thriftId;
+    private final String _fieldName;
+
+    _Fields(short thriftId, String fieldName) {
+      _thriftId = thriftId;
+      _fieldName = fieldName;
+    }
+
+    public short getThriftFieldId() {
+      return _thriftId;
+    }
+
+    public String getFieldName() {
+      return _fieldName;
+    }
+  }
+
+  // isset id assignments
+  private static final int __ALLEXPERIMENTCOUNT_ISSET_ID = 0;
+  private static final int __COMPLETEDEXPERIMENTCOUNT_ISSET_ID = 1;
+  private static final int __CANCELLEDEXPERIMENTCOUNT_ISSET_ID = 2;
+  private static final int __FAILEDEXPERIMENTCOUNT_ISSET_ID = 3;
+  private byte __isset_bitfield = 0;
+  private _Fields optionals[] = {_Fields.CANCELLED_EXPERIMENT_COUNT,_Fields.COMPLETED_EXPERIMENTS,_Fields.FAILED_EXPERIMENTS,_Fields.CANCELLED_EXPERIMENTS};
+  public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
+  static {
+    Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
+    tmpMap.put(_Fields.ALL_EXPERIMENT_COUNT, new org.apache.thrift.meta_data.FieldMetaData("allExperimentCount", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.COMPLETED_EXPERIMENT_COUNT, new org.apache.thrift.meta_data.FieldMetaData("completedExperimentCount", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.CANCELLED_EXPERIMENT_COUNT, new org.apache.thrift.meta_data.FieldMetaData("cancelledExperimentCount", org.apache.thrift.TFieldRequirementType.OPTIONAL, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.FAILED_EXPERIMENT_COUNT, new org.apache.thrift.meta_data.FieldMetaData("failedExperimentCount", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.I32)));
+    tmpMap.put(_Fields.ALL_EXPERIMENTS, new org.apache.thrift.meta_data.FieldMetaData("allExperiments", org.apache.thrift.TFieldRequirementType.REQUIRED, 
+        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, ExperimentSummary.class))));
+    tmpMap.put(_Fields.COMPLETED_EXPERIMENTS, new org.apache.thrift.meta_data.FieldMetaData("completedExperiments", 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, ExperimentSummary.class))));
+    tmpMap.put(_Fields.FAILED_EXPERIMENTS, new org.apache.thrift.meta_data.FieldMetaData("failedExperiments", 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, ExperimentSummary.class))));
+    tmpMap.put(_Fields.CANCELLED_EXPERIMENTS, new org.apache.thrift.meta_data.FieldMetaData("cancelledExperiments", 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, ExperimentSummary.class))));
+    metaDataMap = Collections.unmodifiableMap(tmpMap);
+    org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(ExperimentStatistics.class, metaDataMap);
+  }
+
+  public ExperimentStatistics() {
+  }
+
+  public ExperimentStatistics(
+    int allExperimentCount,
+    int completedExperimentCount,
+    int failedExperimentCount,
+    List<ExperimentSummary> allExperiments)
+  {
+    this();
+    this.allExperimentCount = allExperimentCount;
+    setAllExperimentCountIsSet(true);
+    this.completedExperimentCount = completedExperimentCount;
+    setCompletedExperimentCountIsSet(true);
+    this.failedExperimentCount = failedExperimentCount;
+    setFailedExperimentCountIsSet(true);
+    this.allExperiments = allExperiments;
+  }
+
+  /**
+   * Performs a deep copy on <i>other</i>.
+   */
+  public ExperimentStatistics(ExperimentStatistics other) {
+    __isset_bitfield = other.__isset_bitfield;
+    this.allExperimentCount = other.allExperimentCount;
+    this.completedExperimentCount = other.completedExperimentCount;
+    this.cancelledExperimentCount = other.cancelledExperimentCount;
+    this.failedExperimentCount = other.failedExperimentCount;
+    if (other.isSetAllExperiments()) {
+      List<ExperimentSummary> __this__allExperiments = new ArrayList<ExperimentSummary>(other.allExperiments.size());
+      for (ExperimentSummary other_element : other.allExperiments) {
+        __this__allExperiments.add(new ExperimentSummary(other_element));
+      }
+      this.allExperiments = __this__allExperiments;
+    }
+    if (other.isSetCompletedExperiments()) {
+      List<ExperimentSummary> __this__completedExperiments = new ArrayList<ExperimentSummary>(other.completedExperiments.size());
+      for (ExperimentSummary other_element : other.completedExperiments) {
+        __this__completedExperiments.add(new ExperimentSummary(other_element));
+      }
+      this.completedExperiments = __this__completedExperiments;
+    }
+    if (other.isSetFailedExperiments()) {
+      List<ExperimentSummary> __this__failedExperiments = new ArrayList<ExperimentSummary>(other.failedExperiments.size());
+      for (ExperimentSummary other_element : other.failedExperiments) {
+        __this__failedExperiments.add(new ExperimentSummary(other_element));
+      }
+      this.failedExperiments = __this__failedExperiments;
+    }
+    if (other.isSetCancelledExperiments()) {
+      List<ExperimentSummary> __this__cancelledExperiments = new ArrayList<ExperimentSummary>(other.cancelledExperiments.size());
+      for (ExperimentSummary other_element : other.cancelledExperiments) {
+        __this__cancelledExperiments.add(new ExperimentSummary(other_element));
+      }
+      this.cancelledExperiments = __this__cancelledExperiments;
+    }
+  }
+
+  public ExperimentStatistics deepCopy() {
+    return new ExperimentStatistics(this);
+  }
+
+  @Override
+  public void clear() {
+    setAllExperimentCountIsSet(false);
+    this.allExperimentCount = 0;
+    setCompletedExperimentCountIsSet(false);
+    this.completedExperimentCount = 0;
+    setCancelledExperimentCountIsSet(false);
+    this.cancelledExperimentCount = 0;
+    setFailedExperimentCountIsSet(false);
+    this.failedExperimentCount = 0;
+    this.allExperiments = null;
+    this.completedExperiments = null;
+    this.failedExperiments = null;
+    this.cancelledExperiments = null;
+  }
+
+  public int getAllExperimentCount() {
+    return this.allExperimentCount;
+  }
+
+  public ExperimentStatistics setAllExperimentCount(int allExperimentCount) {
+    this.allExperimentCount = allExperimentCount;
+    setAllExperimentCountIsSet(true);
+    return this;
+  }
+
+  public void unsetAllExperimentCount() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __ALLEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  /** Returns true if field allExperimentCount is set (has been assigned a value) and false otherwise */
+  public boolean isSetAllExperimentCount() {
+    return EncodingUtils.testBit(__isset_bitfield, __ALLEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  public void setAllExperimentCountIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __ALLEXPERIMENTCOUNT_ISSET_ID, value);
+  }
+
+  public int getCompletedExperimentCount() {
+    return this.completedExperimentCount;
+  }
+
+  public ExperimentStatistics setCompletedExperimentCount(int completedExperimentCount) {
+    this.completedExperimentCount = completedExperimentCount;
+    setCompletedExperimentCountIsSet(true);
+    return this;
+  }
+
+  public void unsetCompletedExperimentCount() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __COMPLETEDEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  /** Returns true if field completedExperimentCount is set (has been assigned a value) and false otherwise */
+  public boolean isSetCompletedExperimentCount() {
+    return EncodingUtils.testBit(__isset_bitfield, __COMPLETEDEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  public void setCompletedExperimentCountIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __COMPLETEDEXPERIMENTCOUNT_ISSET_ID, value);
+  }
+
+  public int getCancelledExperimentCount() {
+    return this.cancelledExperimentCount;
+  }
+
+  public ExperimentStatistics setCancelledExperimentCount(int cancelledExperimentCount) {
+    this.cancelledExperimentCount = cancelledExperimentCount;
+    setCancelledExperimentCountIsSet(true);
+    return this;
+  }
+
+  public void unsetCancelledExperimentCount() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __CANCELLEDEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  /** Returns true if field cancelledExperimentCount is set (has been assigned a value) and false otherwise */
+  public boolean isSetCancelledExperimentCount() {
+    return EncodingUtils.testBit(__isset_bitfield, __CANCELLEDEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  public void setCancelledExperimentCountIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __CANCELLEDEXPERIMENTCOUNT_ISSET_ID, value);
+  }
+
+  public int getFailedExperimentCount() {
+    return this.failedExperimentCount;
+  }
+
+  public ExperimentStatistics setFailedExperimentCount(int failedExperimentCount) {
+    this.failedExperimentCount = failedExperimentCount;
+    setFailedExperimentCountIsSet(true);
+    return this;
+  }
+
+  public void unsetFailedExperimentCount() {
+    __isset_bitfield = EncodingUtils.clearBit(__isset_bitfield, __FAILEDEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  /** Returns true if field failedExperimentCount is set (has been assigned a value) and false otherwise */
+  public boolean isSetFailedExperimentCount() {
+    return EncodingUtils.testBit(__isset_bitfield, __FAILEDEXPERIMENTCOUNT_ISSET_ID);
+  }
+
+  public void setFailedExperimentCountIsSet(boolean value) {
+    __isset_bitfield = EncodingUtils.setBit(__isset_bitfield, __FAILEDEXPERIMENTCOUNT_ISSET_ID, value);
+  }
+
+  public int getAllExperimentsSize() {
+    return (this.allExperiments == null) ? 0 : this.allExperiments.size();
+  }
+
+  public java.util.Iterator<ExperimentSummary> getAllExperimentsIterator() {
+    return (this.allExperiments == null) ? null : this.allExperiments.iterator();
+  }
+
+  public void addToAllExperiments(ExperimentSummary elem) {
+    if (this.allExperiments == null) {
+      this.allExperiments = new ArrayList<ExperimentSummary>();
+    }
+    this.allExperiments.add(elem);
+  }
+
+  public List<ExperimentSummary> getAllExperiments() {
+    return this.allExperiments;
+  }
+
+  public ExperimentStatistics setAllExperiments(List<ExperimentSummary> allExperiments) {
+    this.allExperiments = allExperiments;
+    return this;
+  }
+
+  public void unsetAllExperiments() {
+    this.allExperiments = null;
+  }
+
+  /** Returns true if field allExperiments is set (has been assigned a value) and false otherwise */
+  public boolean isSetAllExperiments() {
+    return this.allExperiments != null;
+  }
+
+  public void setAllExperimentsIsSet(boolean value) {
+    if (!value) {
+      this.allExperiments = null;
+    }
+  }
+
+  public int getCompletedExperimentsSize() {
+    return (this.completedExperiments == null) ? 0 : this.completedExperiments.size();
+  }
+
+  public java.util.Iterator<ExperimentSummary> getCompletedExperimentsIterator() {
+    return (this.completedExperiments == null) ? null : this.completedExperiments.iterator();
+  }
+
+  public void addToCompletedExperiments(ExperimentSummary elem) {
+    if (this.completedExperiments == null) {
+      this.completedExperiments = new ArrayList<ExperimentSummary>();
+    }
+    this.completedExperiments.add(elem);
+  }
+
+  public List<ExperimentSummary> getCompletedExperiments() {
+    return this.completedExperiments;
+  }
+
+  public ExperimentStatistics setCompletedExperiments(List<ExperimentSummary> completedExperiments) {
+    this.completedExperiments = completedExperiments;
+    return this;
+  }
+
+  public void unsetCompletedExperiments() {
+    this.completedExperiments = null;
+  }
+
+  /** Returns true if field completedExperiments is set (has been assigned a value) and false otherwise */
+  public boolean isSetCompletedExperiments() {
+    return this.completedExperiments != null;
+  }
+
+  public void setCompletedExperimentsIsSet(boolean value) {
+    if (!value) {
+      this.completedExperiments = null;
+    }
+  }
+
+  public int getFailedExperimentsSize() {
+    return (this.failedExperiments == null) ? 0 : this.failedExperiments.size();
+  }
+
+  public java.util.Iterator<ExperimentSummary> getFailedExperimentsIterator() {
+    return (this.failedExperiments == null) ? null : this.failedExperiments.iterator();
+  }
+
+  public void addToFailedExperiments(ExperimentSummary elem) {
+    if (this.failedExperiments == null) {
+      this.failedExperiments = new ArrayList<ExperimentSummary>();
+    }
+    this.failedExperiments.add(elem);
+  }
+
+  public List<ExperimentSummary> getFailedExperiments() {
+    return this.failedExperiments;
+  }
+
+  public ExperimentStatistics setFailedExperiments(List<ExperimentSummary> failedExperiments) {
+    this.failedExperiments = failedExperiments;
+    return this;
+  }
+
+  public void unsetFailedExperiments() {
+    this.failedExperiments = null;
+  }
+
+  /** Returns true if field failedExperiments is set (has been assigned a value) and false otherwise */
+  public boolean isSetFailedExperiments() {
+    return this.failedExperiments != null;
+  }
+
+  public void setFailedExperimentsIsSet(boolean value) {
+    if (!value) {
+      this.failedExperiments = null;
+    }
+  }
+
+  public int getCancelledExperimentsSize() {
+    return (this.cancelledExperiments == null) ? 0 : this.cancelledExperiments.size();
+  }
+
+  public java.util.Iterator<ExperimentSummary> getCancelledExperimentsIterator() {
+    return (this.cancelledExperiments == null) ? null : this.cancelledExperiments.iterator();
+  }
+
+  public void addToCancelledExperiments(ExperimentSummary elem) {
+    if (this.cancelledExperiments == null) {
+      this.cancelledExperiments = new ArrayList<ExperimentSummary>();
+    }
+    this.cancelledExperiments.add(elem);
+  }
+
+  public List<ExperimentSummary> getCancelledExperiments() {
+    return this.cancelledExperiments;
+  }
+
+  public ExperimentStatistics setCancelledExperiments(List<ExperimentSummary> cancelledExperiments) {
+    this.cancelledExperiments = cancelledExperiments;
+    return this;
+  }
+
+  public void unsetCancelledExperiments() {
+    this.cancelledExperiments = null;
+  }
+
+  /** Returns true if field cancelledExperiments is set (has been assigned a value) and false otherwise */
+  public boolean isSetCancelledExperiments() {
+    return this.cancelledExperiments != null;
+  }
+
+  public void setCancelledExperimentsIsSet(boolean value) {
+    if (!value) {
+      this.cancelledExperiments = null;
+    }
+  }
+
+  public void setFieldValue(_Fields field, Object value) {
+    switch (field) {
+    case ALL_EXPERIMENT_COUNT:
+      if (value == null) {
+        unsetAllExperimentCount();
+      } else {
+        setAllExperimentCount((Integer)value);
+      }
+      break;
+
+    case COMPLETED_EXPERIMENT_COUNT:
+      if (value == null) {
+        unsetCompletedExperimentCount();
+      } else {
+        setCompletedExperimentCount((Integer)value);
+      }
+      break;
+
+    case CANCELLED_EXPERIMENT_COUNT:
+      if (value == null) {
+        unsetCancelledExperimentCount();
+      } else {
+        setCancelledExperimentCount((Integer)value);
+      }
+      break;
+
+    case FAILED_EXPERIMENT_COUNT:
+      if (value == null) {
+        unsetFailedExperimentCount();
+      } else {
+        setFailedExperimentCount((Integer)value);
+      }
+      break;
+
+    case ALL_EXPERIMENTS:
+      if (value == null) {
+        unsetAllExperiments();
+      } else {
+        setAllExperiments((List<ExperimentSummary>)value);
+      }
+      break;
+
+    case COMPLETED_EXPERIMENTS:
+      if (value == null) {
+        unsetCompletedExperiments();
+      } else {
+        setCompletedExperiments((List<ExperimentSummary>)value);
+      }
+      break;
+
+    case FAILED_EXPERIMENTS:
+      if (value == null) {
+        unsetFailedExperiments();
+      } else {
+        setFailedExperiments((List<ExperimentSummary>)value);
+      }
+      break;
+
+    case CANCELLED_EXPERIMENTS:
+      if (value == null) {
+        unsetCancelledExperiments();
+      } else {
+        setCancelledExperiments((List<ExperimentSummary>)value);
+      }
+      break;
+
+    }
+  }
+
+  public Object getFieldValue(_Fields field) {
+    switch (field) {
+    case ALL_EXPERIMENT_COUNT:
+      return Integer.valueOf(getAllExperimentCount());
+
+    case COMPLETED_EXPERIMENT_COUNT:
+      return Integer.valueOf(getCompletedExperimentCount());
+
+    case CANCELLED_EXPERIMENT_COUNT:
+      return Integer.valueOf(getCancelledExperimentCount());
+
+    case FAILED_EXPERIMENT_COUNT:
+      return Integer.valueOf(getFailedExperimentCount());
+
+    case ALL_EXPERIMENTS:
+      return getAllExperiments();
+
+    case COMPLETED_EXPERIMENTS:
+      return getCompletedExperiments();
+
+    case FAILED_EXPERIMENTS:
+      return getFailedExperiments();
+
+    case CANCELLED_EXPERIMENTS:
+      return getCancelledExperiments();
+
+    }
+    throw new IllegalStateException();
+  }
+
+  /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
+  public boolean isSet(_Fields field) {
+    if (field == null) {
+      throw new IllegalArgumentException();
+    }
+
+    switch (field) {
+    case ALL_EXPERIMENT_COUNT:
+      return isSetAllExperimentCount();
+    case COMPLETED_EXPERIMENT_COUNT:
+      return isSetCompletedExperimentCount();
+    case CANCELLED_EXPERIMENT_COUNT:
+      return isSetCancelledExperimentCount();
+    case FAILED_EXPERIMENT_COUNT:
+      return isSetFailedExperimentCount();
+    case ALL_EXPERIMENTS:
+      return isSetAllExperiments();
+    case COMPLETED_EXPERIMENTS:
+      return isSetCompletedExperiments();
+    case FAILED_EXPERIMENTS:
+      return isSetFailedExperiments();
+    case CANCELLED_EXPERIMENTS:
+      return isSetCancelledExperiments();
+    }
+    throw new IllegalStateException();
+  }
+
+  @Override
+  public boolean equals(Object that) {
+    if (that == null)
+      return false;
+    if (that instanceof ExperimentStatistics)
+      return this.equals((ExperimentStatistics)that);
+    return false;
+  }
+
+  public boolean equals(ExperimentStatistics that) {
+    if (that == null)
+      return false;
+
+    boolean this_present_allExperimentCount = true;
+    boolean that_present_allExperimentCount = true;
+    if (this_present_allExperimentCount || that_present_allExperimentCount) {
+      if (!(this_present_allExperimentCount && that_present_allExperimentCount))
+        return false;
+      if (this.allExperimentCount != that.allExperimentCount)
+        return false;
+    }
+
+    boolean this_present_completedExperimentCount = true;
+    boolean that_present_completedExperimentCount = true;
+    if (this_present_completedExperimentCount || that_present_completedExperimentCount) {
+      if (!(this_present_completedExperimentCount && that_present_completedExperimentCount))
+        return false;
+      if (this.completedExperimentCount != that.completedExperimentCount)
+        return false;
+    }
+
+    boolean this_present_cancelledExperimentCount = true && this.isSetCancelledExperimentCount();
+    boolean that_present_cancelledExperimentCount = true && that.isSetCancelledExperimentCount();
+    if (this_present_cancelledExperimentCount || that_present_cancelledExperimentCount) {
+      if (!(this_present_cancelledExperimentCount && that_present_cancelledExperimentCount))
+        return false;
+      if (this.cancelledExperimentCount != that.cancelledExperimentCount)
+        return false;
+    }
+
+    boolean this_present_failedExperimentCount = true;
+    boolean that_present_failedExperimentCount = true;
+    if (this_present_failedExperimentCount || that_present_failedExperimentCount) {
+      if (!(this_present_failedExperimentCount && that_present_failedExperimentCount))
+        return false;
+      if (this.failedExperimentCount != that.failedExperimentCount)
+        return false;
+    }
+
+    boolean this_present_allExperiments = true && this.isSetAllExperiments();
+    boolean that_present_allExperiments = true && that.isSetAllExperiments();
+    if (this_present_allExperiments || that_present_allExperiments) {
+      if (!(this_present_allExperiments && that_present_allExperiments))
+        return false;
+      if (!this.allExperiments.equals(that.allExperiments))
+        return false;
+    }
+
+    boolean this_present_completedExperiments = true && this.isSetCompletedExperiments();
+    boolean that_present_completedExperiments = true && that.isSetCompletedExperiments();
+    if (this_present_completedExperiments || that_present_completedExperiments) {
+      if (!(this_present_completedExperiments && that_present_completedExperiments))
+        return false;
+      if (!this.completedExperiments.equals(that.completedExperiments))
+        return false;
+    }
+
+    boolean this_present_failedExperiments = true && this.isSetFailedExperiments();
+    boolean that_present_failedExperiments = true && that.isSetFailedExperiments();
+    if (this_present_failedExperiments || that_present_failedExperiments) {
+      if (!(this_present_failedExperiments && that_present_failedExperiments))
+        return false;
+      if (!this.failedExperiments.equals(that.failedExperiments))
+        return false;
+    }
+
+    boolean this_present_cancelledExperiments = true && this.isSetCancelledExperiments();
+    boolean that_present_cancelledExperiments = true && that.isSetCancelledExperiments();
+    if (this_present_cancelledExperiments || that_present_cancelledExperiments) {
+      if (!(this_present_cancelledExperiments && that_present_cancelledExperiments))
+        return false;
+      if (!this.cancelledExperiments.equals(that.cancelledExperiments))
+        return false;
+    }
+
+    return true;
+  }
+
+  @Override
+  public int hashCode() {
+    return 0;
+  }
+
+  @Override
+  public int compareTo(ExperimentStatistics other) {
+    if (!getClass().equals(other.getClass())) {
+      return getClass().getName().compareTo(other.getClass().getName());
+    }
+
+    int lastComparison = 0;
+
+    lastComparison = Boolean.valueOf(isSetAllExperimentCount()).compareTo(other.isSetAllExperimentCount());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetAllExperimentCount()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.allExperimentCount, other.allExperimentCount);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetCompletedExperimentCount()).compareTo(other.isSetCompletedExperimentCount());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCompletedExperimentCount()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.completedExperimentCount, other.completedExperimentCount);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetCancelledExperimentCount()).compareTo(other.isSetCancelledExperimentCount());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCancelledExperimentCount()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.cancelledExperimentCount, other.cancelledExperimentCount);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetFailedExperimentCount()).compareTo(other.isSetFailedExperimentCount());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetFailedExperimentCount()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.failedExperimentCount, other.failedExperimentCount);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetAllExperiments()).compareTo(other.isSetAllExperiments());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetAllExperiments()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.allExperiments, other.allExperiments);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetCompletedExperiments()).compareTo(other.isSetCompletedExperiments());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCompletedExperiments()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.completedExperiments, other.completedExperiments);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetFailedExperiments()).compareTo(other.isSetFailedExperiments());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetFailedExperiments()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.failedExperiments, other.failedExperiments);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    lastComparison = Boolean.valueOf(isSetCancelledExperiments()).compareTo(other.isSetCancelledExperiments());
+    if (lastComparison != 0) {
+      return lastComparison;
+    }
+    if (isSetCancelledExperiments()) {
+      lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.cancelledExperiments, other.cancelledExperiments);
+      if (lastComparison != 0) {
+        return lastComparison;
+      }
+    }
+    return 0;
+  }
+
+  public _Fields fieldForId(int fieldId) {
+    return _Fields.findByThriftId(fieldId);
+  }
+
+  public void read(org.apache.thrift.protocol.TProtocol iprot) throws TException {
+    schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
+  }
+
+  public void write(org.apache.thrift.protocol.TProtocol oprot) throws TException {
+    schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
+  }
+
+  @Override
+  public String toString() {
+    StringBuilder sb = new StringBuilder("ExperimentStatistics(");
+    boolean first = true;
+
+    sb.append("allExperimentCount:");
+    sb.append(this.allExperimentCount);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("completedExperimentCount:");
+    sb.append(this.completedExperimentCount);
+    first = false;
+    if (isSetCancelledExperimentCount()) {
+      if (!first) sb.append(", ");
+      sb.append("cancelledExperimentCount:");
+      sb.append(this.cancelledExperimentCount);
+      first = false;
+    }
+    if (!first) sb.append(", ");
+    sb.append("failedExperimentCount:");
+    sb.append(this.failedExperimentCount);
+    first = false;
+    if (!first) sb.append(", ");
+    sb.append("allExperiments:");
+    if (this.allExperiments == null) {
+      sb.append("null");
+    } else {
+      sb.append(this.allExperiments);
+    }
+    first = false;
+    if (isSetCompletedExperiments()) {
+      if (!first) sb.append(", ");
+      sb.append("completedExperiments:");
+      if (this.completedExperiments == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.completedExperiments);
+      }
+      first = false;
+    }
+    if (isSetFailedExperiments()) {
+      if (!first) sb.append(", ");
+      sb.append("failedExperiments:");
+      if (this.failedExperiments == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.failedExperiments);
+      }
+      first = false;
+    }
+    if (isSetCancelledExperiments()) {
+      if (!first) sb.append(", ");
+      sb.append("cancelledExperiments:");
+      if (this.cancelledExperiments == null) {
+        sb.append("null");
+      } else {
+        sb.append(this.cancelledExperiments);
+      }
+      first = false;
+    }
+    sb.append(")");
+    return sb.toString();
+  }
+
+  public void validate() throws TException {
+    // check for required fields
+    // alas, we cannot check 'allExperimentCount' because it's a primitive and you chose the non-beans generator.
+    // alas, we cannot check 'completedExperimentCount' because it's a primitive and you chose the non-beans generator.
+    // alas, we cannot check 'failedExperimentCount' because it's a primitive and you chose the non-beans generator.
+    if (allExperiments == null) {
+      throw new TProtocolException("Required field 'allExperiments' was not present! Struct: " + toString());
+    }
+    // check for sub-struct validity
+  }
+
+  private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
+    try {
+      write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
+    } catch (TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
+    try {
+      // it doesn't seem like you should have to do this, but java serialization is wacky, and doesn't call the default constructor.
+      __isset_bitfield = 0;
+      read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
+    } catch (TException te) {
+      throw new java.io.IOException(te);
+    }
+  }
+
+  private static class ExperimentStatisticsStandardSchemeFactory implements SchemeFactory {
+    public ExperimentStatisticsStandardScheme getScheme() {
+      return new ExperimentStatisticsStandardScheme();
+    }
+  }
+
+  private static class ExperimentStatisticsStandardScheme extends StandardScheme<ExperimentStatistics> {
+
+    public void read(org.apache.thrift.protocol.TProtocol iprot, ExperimentStatistics struct) throws TException {
+      org.apache.thrift.protocol.TField schemeField;
+      iprot.readStructBegin();
+      while (true)
+      {
+        schemeField = iprot.readFieldBegin();
+        if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
+          break;
+        }
+        switch (schemeField.id) {
+          case 1: // ALL_EXPERIMENT_COUNT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.allExperimentCount = iprot.readI32();
+              struct.setAllExperimentCountIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 2: // COMPLETED_EXPERIMENT_COUNT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.completedExperimentCount = iprot.readI32();
+              struct.setCompletedExperimentCountIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 3: // CANCELLED_EXPERIMENT_COUNT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.cancelledExperimentCount = iprot.readI32();
+              struct.setCancelledExperimentCountIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 4: // FAILED_EXPERIMENT_COUNT
+            if (schemeField.type == org.apache.thrift.protocol.TType.I32) {
+              struct.failedExperimentCount = iprot.readI32();
+              struct.setFailedExperimentCountIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 5: // ALL_EXPERIMENTS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list152 = iprot.readListBegin();
+                struct.allExperiments = new ArrayList<ExperimentSummary>(_list152.size);
+                for (int _i153 = 0; _i153 < _list152.size; ++_i153)
+                {
+                  ExperimentSummary _elem154;
+                  _elem154 = new ExperimentSummary();
+                  _elem154.read(iprot);
+                  struct.allExperiments.add(_elem154);
+                }
+                iprot.readListEnd();
+              }
+              struct.setAllExperimentsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 6: // COMPLETED_EXPERIMENTS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list155 = iprot.readListBegin();
+                struct.completedExperiments = new ArrayList<ExperimentSummary>(_list155.size);
+                for (int _i156 = 0; _i156 < _list155.size; ++_i156)
+                {
+                  ExperimentSummary _elem157;
+                  _elem157 = new ExperimentSummary();
+                  _elem157.read(iprot);
+                  struct.completedExperiments.add(_elem157);
+                }
+                iprot.readListEnd();
+              }
+              struct.setCompletedExperimentsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 7: // FAILED_EXPERIMENTS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list158 = iprot.readListBegin();
+                struct.failedExperiments = new ArrayList<ExperimentSummary>(_list158.size);
+                for (int _i159 = 0; _i159 < _list158.size; ++_i159)
+                {
+                  ExperimentSummary _elem160;
+                  _elem160 = new ExperimentSummary();
+                  _elem160.read(iprot);
+                  struct.failedExperiments.add(_elem160);
+                }
+                iprot.readListEnd();
+              }
+              struct.setFailedExperimentsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          case 8: // CANCELLED_EXPERIMENTS
+            if (schemeField.type == org.apache.thrift.protocol.TType.LIST) {
+              {
+                org.apache.thrift.protocol.TList _list161 = iprot.readListBegin();
+                struct.cancelledExperiments = new ArrayList<ExperimentSummary>(_list161.size);
+                for (int _i162 = 0; _i162 < _list161.size; ++_i162)
+                {
+                  ExperimentSummary _elem163;
+                  _elem163 = new ExperimentSummary();
+                  _elem163.read(iprot);
+                  struct.cancelledExperiments.add(_elem163);
+                }
+                iprot.readListEnd();
+              }
+              struct.setCancelledExperimentsIsSet(true);
+            } else { 
+              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+            }
+            break;
+          default:
+            org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
+        }
+        iprot.readFieldEnd();
+      }
+      iprot.readStructEnd();
+
+      // check for required fields of primitive type, which can't be checked in the validate method
+      if (!struct.isSetAllExperimentCount()) {
+        throw new TProtocolException("Required field 'allExperimentCount' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetCompletedExperimentCount()) {
+        throw new TProtocolException("Required field 'completedExperimentCount' was not found in serialized data! Struct: " + toString());
+      }
+      if (!struct.isSetFailedExperimentCount()) {
+        throw new TProtocolException("Required field 'failedExperimentCount' was not found in serialized data! Struct: " + toString());
+      }
+      struct.validate();
+    }
+
+    public void write(org.apache.thrift.protocol.TProtocol oprot, ExperimentStatistics struct) throws TException {
+      struct.validate();
+
+      oprot.writeStructBegin(STRUCT_DESC);
+      oprot.writeFieldBegin(ALL_EXPERIMENT_COUNT_FIELD_DESC);
+      oprot.writeI32(struct.allExperimentCount);
+      oprot.writeFieldEnd();
+      oprot.writeFieldBegin(COMPLETED_EXPERIMENT_COUNT_FIELD_DESC);
+      oprot.writeI32(struct.completedExperimentCount);
+      oprot.writeFieldEnd();
+      if (struct.isSetCancelledExperimentCount()) {
+        oprot.writeFieldBegin(CANCELLED_EXPERIMENT_COUNT_FIELD_DESC);
+        oprot.writeI32(struct.cancelledExperimentCount);
+        oprot.writeFieldEnd();
+      }
+      oprot.writeFieldBegin(FAILED_EXPERIMENT_COUNT_FIELD_DESC);
+      oprot.writeI32(struct.failedExperimentCount);
+      oprot.writeFieldEnd();
+      if (struct.allExperiments != null) {
+        oprot.writeFieldBegin(ALL_EXPERIMENTS_FIELD_DESC);
+        {
+          oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.allExperiments.size()));
+          for (ExperimentSummary _iter164 : struct.allExperiments)
+          {
+            _iter164.write(oprot);
+          }
+          oprot.writeListEnd();
+        }
+        oprot.writeFieldEnd();
+      }
+      if (struct.completedExperiments != null) {
+        if (struct.isSetCompletedExperiments()) {
+          oprot.writeFieldBegin(COMPLETED_EXPERIMENTS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.completedExperiments.size()));
+            for (ExperimentSummary _iter165 : struct.completedExperiments)
+            {
+              _iter165.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.failedExperiments != null) {
+        if (struct.isSetFailedExperiments()) {
+          oprot.writeFieldBegin(FAILED_EXPERIMENTS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.failedExperiments.size()));
+            for (ExperimentSummary _iter166 : struct.failedExperiments)
+            {
+              _iter166.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      if (struct.cancelledExperiments != null) {
+        if (struct.isSetCancelledExperiments()) {
+          oprot.writeFieldBegin(CANCELLED_EXPERIMENTS_FIELD_DESC);
+          {
+            oprot.writeListBegin(new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, struct.cancelledExperiments.size()));
+            for (ExperimentSummary _iter167 : struct.cancelledExperiments)
+            {
+              _iter167.write(oprot);
+            }
+            oprot.writeListEnd();
+          }
+          oprot.writeFieldEnd();
+        }
+      }
+      oprot.writeFieldStop();
+      oprot.writeStructEnd();
+    }
+
+  }
+
+  private static class ExperimentStatisticsTupleSchemeFactory implements SchemeFactory {
+    public ExperimentStatisticsTupleScheme getScheme() {
+      return new ExperimentStatisticsTupleScheme();
+    }
+  }
+
+  private static class ExperimentStatisticsTupleScheme extends TupleScheme<ExperimentStatistics> {
+
+    @Override
+    public void write(org.apache.thrift.protocol.TProtocol prot, ExperimentStatistics struct) throws TException {
+      TTupleProtocol oprot = (TTupleProtocol) prot;
+      oprot.writeI32(struct.allExperimentCount);
+      oprot.writeI32(struct.completedExperimentCount);
+      oprot.writeI32(struct.failedExperimentCount);
+      {
+        oprot.writeI32(struct.allExperiments.size());
+        for (ExperimentSummary _iter168 : struct.allExperiments)
+        {
+          _iter168.write(oprot);
+        }
+      }
+      BitSet optionals = new BitSet();
+      if (struct.isSetCancelledExperimentCount()) {
+        optionals.set(0);
+      }
+      if (struct.isSetCompletedExperiments()) {
+        optionals.set(1);
+      }
+      if (struct.isSetFailedExperiments()) {
+        optionals.set(2);
+      }
+      if (struct.isSetCancelledExperiments()) {
+        optionals.set(3);
+      }
+      oprot.writeBitSet(optionals, 4);
+      if (struct.isSetCancelledExperimentCount()) {
+        oprot.writeI32(struct.cancelledExperimentCount);
+      }
+      if (struct.isSetCompletedExperiments()) {
+        {
+          oprot.writeI32(struct.completedExperiments.size());
+          for (ExperimentSummary _iter169 : struct.completedExperiments)
+          {
+            _iter169.write(oprot);
+          }
+        }
+      }
+      if (struct.isSetFailedExperiments()) {
+        {
+          oprot.writeI32(struct.failedExperiments.size());
+          for (ExperimentSummary _iter170 : struct.failedExperiments)
+          {
+            _iter170.write(oprot);
+          }
+        }
+      }
+      if (struct.isSetCancelledExperiments()) {
+        {
+          oprot.writeI32(struct.cancelledExperiments.size());
+          for (ExperimentSummary _iter171 : struct.cancelledExperiments)
+          {
+            _iter171.write(oprot);
+          }
+        }
+      }
+    }
+
+    @Override
+    public void read(org.apache.thrift.protocol.TProtocol prot, ExperimentStatistics struct) throws TException {
+      TTupleProtocol iprot = (TTupleProtocol) prot;
+      struct.allExperimentCount = iprot.readI32();
+      struct.setAllExperimentCountIsSet(true);
+      struct.completedExperimentCount = iprot.readI32();
+      struct.setCompletedExperimentCountIsSet(true);
+      struct.failedExperimentCount = iprot.readI32();
+      struct.setFailedExperimentCountIsSet(true);
+      {
+        org.apache.thrift.protocol.TList _list172 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+        struct.allExperiments = new ArrayList<ExperimentSummary>(_list172.size);
+        for (int _i173 = 0; _i173 < _list172.size; ++_i173)
+        {
+          ExperimentSummary _elem174;
+          _elem174 = new ExperimentSummary();
+          _elem174.read(iprot);
+          struct.allExperiments.add(_elem174);
+        }
+      }
+      struct.setAllExperimentsIsSet(true);
+      BitSet incoming = iprot.readBitSet(4);
+      if (incoming.get(0)) {
+        struct.cancelledExperimentCount = iprot.readI32();
+        struct.setCancelledExperimentCountIsSet(true);
+      }
+      if (incoming.get(1)) {
+        {
+          org.apache.thrift.protocol.TList _list175 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.completedExperiments = new ArrayList<ExperimentSummary>(_list175.size);
+          for (int _i176 = 0; _i176 < _list175.size; ++_i176)
+          {
+            ExperimentSummary _elem177;
+            _elem177 = new ExperimentSummary();
+            _elem177.read(iprot);
+            struct.completedExperiments.add(_elem177);
+          }
+        }
+        struct.setCompletedExperimentsIsSet(true);
+      }
+      if (incoming.get(2)) {
+        {
+          org.apache.thrift.protocol.TList _list178 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.failedExperiments = new ArrayList<ExperimentSummary>(_list178.size);
+          for (int _i179 = 0; _i179 < _list178.size; ++_i179)
+          {
+            ExperimentSummary _elem180;
+            _elem180 = new ExperimentSummary();
+            _elem180.read(iprot);
+            struct.failedExperiments.add(_elem180);
+          }
+        }
+        struct.setFailedExperimentsIsSet(true);
+      }
+      if (incoming.get(3)) {
+        {
+          org.apache.thrift.protocol.TList _list181 = new org.apache.thrift.protocol.TList(org.apache.thrift.protocol.TType.STRUCT, iprot.readI32());
+          struct.cancelledExperiments = new ArrayList<ExperimentSummary>(_list181.size);
+          for (int _i182 = 0; _i182 < _list181.size; ++_i182)
+          {
+            ExperimentSummary _elem183;
+            _elem183 = new ExperimentSummary();
+            _elem183.read(iprot);
+            struct.cancelledExperiments.add(_elem183);
+          }
+        }
+        struct.setCancelledExperimentsIsSet(true);
+      }
+    }
+  }
+
+}
+

http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/component-interface-descriptions/airavata-api/airavataAPI.thrift
----------------------------------------------------------------------
diff --git a/component-interface-descriptions/airavata-api/airavataAPI.thrift b/component-interface-descriptions/airavata-api/airavataAPI.thrift
index 699e96b..1dafab2 100644
--- a/component-interface-descriptions/airavata-api/airavataAPI.thrift
+++ b/component-interface-descriptions/airavata-api/airavataAPI.thrift
@@ -525,6 +525,21 @@ service Airavata {
                         2: airavataErrors.AiravataClientException ace,
                         3: airavataErrors.AiravataSystemException ase)
 
+    /**
+     * Get Experiment Statisitics for the given gateway for a specific time period
+     * @param gatewayId
+     *       Identifier of the requested gateway
+     * @param fromTime
+     *       Starting date time
+     * @param toTime
+     *       Ending data time
+     **/
+    experimentModel.ExperimentStatistics getExperimentStatistics(1: required string gatewayId,
+                            2: required i64 fromTime, 3: required i64 toTime)
+                throws (1: airavataErrors.InvalidRequestException ire,
+                        2: airavataErrors.AiravataClientException ace,
+                        3: airavataErrors.AiravataSystemException ase)
+
    /**
     * Get all Experiments within a Project
     *

http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/component-interface-descriptions/airavata-api/experimentModel.thrift
----------------------------------------------------------------------
diff --git a/component-interface-descriptions/airavata-api/experimentModel.thrift b/component-interface-descriptions/airavata-api/experimentModel.thrift
index 7bc2dc7..f9d76ab 100644
--- a/component-interface-descriptions/airavata-api/experimentModel.thrift
+++ b/component-interface-descriptions/airavata-api/experimentModel.thrift
@@ -409,3 +409,14 @@ struct ExperimentSummary {
     7: optional string applicationId,
     8: optional ExperimentStatus experimentStatus,
 }
+
+struct ExperimentStatistics {
+    1: required i32 allExperimentCount,
+    2: required i32 completedExperimentCount,
+    3: optional i32 cancelledExperimentCount,
+    4: required i32 failedExperimentCount,
+    5: required list<ExperimentSummary> allExperiments,
+    6: optional list<ExperimentSummary> completedExperiments,
+    7: optional list<ExperimentSummary> failedExperiments,
+    8: optional list<ExperimentSummary> cancelledExperiments,
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentCatalogImpl.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentCatalogImpl.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentCatalogImpl.java
index e71cff0..81f2c8b 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentCatalogImpl.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentCatalogImpl.java
@@ -544,6 +544,9 @@ public class ExperimentCatalogImpl implements ExperimentCatalog {
                         result.add(ex);
                     }
                     return result;
+                case EXPERIMENT_STATISTICS:
+                    result.add(experimentRegistry.getExperimentStatistics(filters));
+                    return result;
                 default:
                     logger.error("Unsupported data type...", new UnsupportedOperationException());
                     throw new UnsupportedOperationException();

http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
index 6bae21f..1187e37 100644
--- a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/impl/ExperimentRegistry.java
@@ -2940,6 +2940,57 @@ public class ExperimentRegistry {
         return null;
     }
 
+    /**
+     * Method to get experiment execution statistics for a specific time period
+     * @param filters
+     * @return
+     * @throws RegistryException
+     */
+    public ExperimentStatistics getExperimentStatistics(Map<String,String> filters) throws RegistryException {
+        try {
+            ExperimentStatistics experimentStatistics = new ExperimentStatistics();
+            ExperimentStatisticsResource experimentStatisticsResource = workerResource.getExperimentStatistics(
+                    filters.get(Constants.FieldConstants.ExperimentConstants.GATEWAY),
+                    new Timestamp(Long.parseLong(filters.get(Constants.FieldConstants.ExperimentConstants.FROM_DATE))),
+                    new Timestamp(Long.parseLong(filters.get(Constants.FieldConstants.ExperimentConstants.TO_DATE)))
+            );
+
+            experimentStatistics.setAllExperimentCount(experimentStatisticsResource.getAllExperimentCount());
+            experimentStatistics.setCompletedExperimentCount(experimentStatisticsResource.getCompletedExperimentCount());
+            experimentStatistics.setFailedExperimentCount(experimentStatisticsResource.getFailedExperimentCount());
+            experimentStatistics.setCancelledExperimentCount(experimentStatisticsResource.getCancelledExperimentCount());
+
+            ArrayList<ExperimentSummary> experimentSummaries = new ArrayList();
+            for (ExperimentSummaryResource ex : experimentStatisticsResource.getAllExperiments()) {
+                experimentSummaries.add(ThriftDataModelConversion.getExperimentSummary(ex));
+            }
+            experimentStatistics.setAllExperiments(experimentSummaries);
+
+            experimentSummaries = new ArrayList();
+            for (ExperimentSummaryResource ex : experimentStatisticsResource.getCompletedExperiments()) {
+                experimentSummaries.add(ThriftDataModelConversion.getExperimentSummary(ex));
+            }
+            experimentStatistics.setCompletedExperiments(experimentSummaries);
+
+            experimentSummaries = new ArrayList();
+            for (ExperimentSummaryResource ex : experimentStatisticsResource.getFailedExperiments()) {
+                experimentSummaries.add(ThriftDataModelConversion.getExperimentSummary(ex));
+            }
+            experimentStatistics.setFailedExperiments(experimentSummaries);
+
+            experimentSummaries = new ArrayList();
+            for (ExperimentSummaryResource ex : experimentStatisticsResource.getCancelledExperiments()) {
+                experimentSummaries.add(ThriftDataModelConversion.getExperimentSummary(ex));
+            }
+            experimentStatistics.setCancelledExperiments(experimentSummaries);
+
+            return experimentStatistics;
+        } catch (RegistryException e) {
+            logger.error("Error while retrieving experiment statistics from registry", e);
+            throw new RegistryException(e);
+        }
+    }
+
     public boolean isValidStatusTransition(ExperimentState oldState, ExperimentState nextState) {
         if (nextState == null) {
             return false;

http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentStatisticsResource.java
----------------------------------------------------------------------
diff --git a/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentStatisticsResource.java b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentStatisticsResource.java
new file mode 100644
index 0000000..11cc510
--- /dev/null
+++ b/modules/registry/registry-core/src/main/java/org/apache/airavata/registry/core/experiment/catalog/resources/ExperimentStatisticsResource.java
@@ -0,0 +1,133 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+package org.apache.airavata.registry.core.experiment.catalog.resources;
+
+import org.apache.airavata.registry.core.experiment.catalog.ExperimentCatResource;
+import org.apache.airavata.registry.core.experiment.catalog.ResourceType;
+import org.apache.airavata.registry.cpi.RegistryException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.el.MethodNotFoundException;
+import java.util.List;
+
+public class ExperimentStatisticsResource extends AbstractExpCatResource {
+    private final static Logger logger = LoggerFactory.getLogger(ExperimentStatisticsResource.class);
+
+    private int allExperimentCount;
+    private int completedExperimentCount;
+    private int cancelledExperimentCount;
+    private int failedExperimentCount;
+
+    private List<ExperimentSummaryResource> allExperiments;
+    private List<ExperimentSummaryResource> completedExperiments;
+    private List<ExperimentSummaryResource> cancelledExperiments;
+    private List<ExperimentSummaryResource> failedExperiments;
+
+    @Override
+    public ExperimentCatResource create(ResourceType type) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public void remove(ResourceType type, Object name) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public ExperimentCatResource get(ResourceType type, Object name) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public List<ExperimentCatResource> get(ResourceType type) throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    @Override
+    public void save() throws RegistryException {
+        throw new MethodNotFoundException();
+    }
+
+    public int getAllExperimentCount() {
+        return allExperimentCount;
+    }
+
+    public void setAllExperimentCount(int allExperimentCount) {
+        this.allExperimentCount = allExperimentCount;
+    }
+
+    public int getCompletedExperimentCount() {
+        return completedExperimentCount;
+    }
+
+    public void setCompletedExperimentCount(int completedExperimentCount) {
+        this.completedExperimentCount = completedExperimentCount;
+    }
+
+    public int getCancelledExperimentCount() {
+        return cancelledExperimentCount;
+    }
+
+    public void setCancelledExperimentCount(int cancelledExperimentCount) {
+        this.cancelledExperimentCount = cancelledExperimentCount;
+    }
+
+    public int getFailedExperimentCount() {
+        return failedExperimentCount;
+    }
+
+    public void setFailedExperimentCount(int failedExperimentCount) {
+        this.failedExperimentCount = failedExperimentCount;
+    }
+
+    public List<ExperimentSummaryResource> getAllExperiments() {
+        return allExperiments;
+    }
+
+    public void setAllExperiments(List<ExperimentSummaryResource> allExperiments) {
+        this.allExperiments = allExperiments;
+    }
+
+    public List<ExperimentSummaryResource> getCompletedExperiments() {
+        return completedExperiments;
+    }
+
+    public void setCompletedExperiments(List<ExperimentSummaryResource> completedExperiments) {
+        this.completedExperiments = completedExperiments;
+    }
+
+    public List<ExperimentSummaryResource> getCancelledExperiments() {
+        return cancelledExperiments;
+    }
+
+    public void setCancelledExperiments(List<ExperimentSummaryResource> cancelledExperiments) {
+        this.cancelledExperiments = cancelledExperiments;
+    }
+
+    public List<ExperimentSummaryResource> getFailedExperiments() {
+        return failedExperiments;
+    }
+
+    public void setFailedExperiments(List<ExperimentSummaryResource> failedExperiments) {
+        this.failedExperiments = failedExperiments;
+    }
+}
\ No newline at end of file


[3/4] airavata git commit: Adding getExperimentStatistics API method

Posted by sc...@apache.org.
http://git-wip-us.apache.org/repos/asf/airavata/blob/2c6620f0/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
index 44b9230..4e471d5 100644
--- a/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
+++ b/airavata-api/airavata-api-stubs/src/main/java/org/apache/airavata/api/Airavata.java
@@ -1,21 +1,4 @@
 /**
- * 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.
- */
-
-/**
  * Autogenerated by Thrift Compiler (0.9.1)
  *
  * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
@@ -49,7 +32,7 @@ import java.util.Arrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@SuppressWarnings("all") public class Airavata {
+public class Airavata {
 
   public interface Iface {
 
@@ -484,6 +467,22 @@ import org.slf4j.LoggerFactory;
     public List<org.apache.airavata.model.workspace.experiment.ExperimentSummary> searchExperiments(String gatewayId, String userName, Map<org.apache.airavata.model.workspace.experiment.ExperimentSearchFields,String> filters, int limit, int offset) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException;
 
     /**
+     * Get Experiment Statisitics for the given gateway for a specific time period
+     * @param gatewayId
+     *       Identifier of the requested gateway
+     * @param fromTime
+     *       Starting date time
+     * @param toTime
+     *       Ending data time
+     * 
+     * 
+     * @param gatewayId
+     * @param fromTime
+     * @param toTime
+     */
+    public org.apache.airavata.model.workspace.experiment.ExperimentStatistics getExperimentStatistics(String gatewayId, long fromTime, long toTime) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException;
+
+    /**
      * Get all Experiments within a Project
      * 
      * @param projectId
@@ -559,7 +558,7 @@ import org.slf4j.LoggerFactory;
      *      the ExperimentMetadata is a required field.
      * 
      * @return
-     *   The server-side generated airavata experiment globally unique identifier.
+     *   The server-side generated.airavata.registry.core.experiment.globally unique identifier.
      * 
      * @throws org.apache.airavata.model.error.InvalidRequestException
      *    For any incorrect forming of the request itself.
@@ -758,7 +757,7 @@ import org.slf4j.LoggerFactory;
      *      should be shared public by default.
      * 
      * @return
-     *   The server-side generated airavata experiment globally unique identifier for the newly cloned experiment.
+     *   The server-side generated.airavata.registry.core.experiment.globally unique identifier for the newly cloned experiment.
      * 
      * @throws org.apache.airavata.model.error.InvalidRequestException
      *    For any incorrect forming of the request itself.
@@ -1879,6 +1878,8 @@ import org.slf4j.LoggerFactory;
 
     public void searchExperiments(String gatewayId, String userName, Map<org.apache.airavata.model.workspace.experiment.ExperimentSearchFields,String> filters, int limit, int offset, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
+    public void getExperimentStatistics(String gatewayId, long fromTime, long toTime, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
+
     public void getAllExperimentsInProject(String projectId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
 
     public void getAllExperimentsInProjectWithPagination(String projectId, int limit, int offset, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
@@ -3146,6 +3147,40 @@ import org.slf4j.LoggerFactory;
       throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "searchExperiments failed: unknown result");
     }
 
+    public org.apache.airavata.model.workspace.experiment.ExperimentStatistics getExperimentStatistics(String gatewayId, long fromTime, long toTime) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException
+    {
+      send_getExperimentStatistics(gatewayId, fromTime, toTime);
+      return recv_getExperimentStatistics();
+    }
+
+    public void send_getExperimentStatistics(String gatewayId, long fromTime, long toTime) throws org.apache.thrift.TException
+    {
+      getExperimentStatistics_args args = new getExperimentStatistics_args();
+      args.setGatewayId(gatewayId);
+      args.setFromTime(fromTime);
+      args.setToTime(toTime);
+      sendBase("getExperimentStatistics", args);
+    }
+
+    public org.apache.airavata.model.workspace.experiment.ExperimentStatistics recv_getExperimentStatistics() throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException
+    {
+      getExperimentStatistics_result result = new getExperimentStatistics_result();
+      receiveBase(result, "getExperimentStatistics");
+      if (result.isSetSuccess()) {
+        return result.success;
+      }
+      if (result.ire != null) {
+        throw result.ire;
+      }
+      if (result.ace != null) {
+        throw result.ace;
+      }
+      if (result.ase != null) {
+        throw result.ase;
+      }
+      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "getExperimentStatistics failed: unknown result");
+    }
+
     public List<org.apache.airavata.model.workspace.experiment.Experiment> getAllExperimentsInProject(String projectId) throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.airavata.model.error.ProjectNotFoundException, org.apache.thrift.TException
     {
       send_getAllExperimentsInProject(projectId);
@@ -7456,6 +7491,44 @@ import org.slf4j.LoggerFactory;
       }
     }
 
+    public void getExperimentStatistics(String gatewayId, long fromTime, long toTime, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
+      checkReady();
+      getExperimentStatistics_call method_call = new getExperimentStatistics_call(gatewayId, fromTime, toTime, resultHandler, this, ___protocolFactory, ___transport);
+      this.___currentMethod = method_call;
+      ___manager.call(method_call);
+    }
+
+    public static class getExperimentStatistics_call extends org.apache.thrift.async.TAsyncMethodCall {
+      private String gatewayId;
+      private long fromTime;
+      private long toTime;
+      public getExperimentStatistics_call(String gatewayId, long fromTime, long toTime, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
+        super(client, protocolFactory, transport, resultHandler, false);
+        this.gatewayId = gatewayId;
+        this.fromTime = fromTime;
+        this.toTime = toTime;
+      }
+
+      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
+        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("getExperimentStatistics", org.apache.thrift.protocol.TMessageType.CALL, 0));
+        getExperimentStatistics_args args = new getExperimentStatistics_args();
+        args.setGatewayId(gatewayId);
+        args.setFromTime(fromTime);
+        args.setToTime(toTime);
+        args.write(prot);
+        prot.writeMessageEnd();
+      }
+
+      public org.apache.airavata.model.workspace.experiment.ExperimentStatistics getResult() throws org.apache.airavata.model.error.InvalidRequestException, org.apache.airavata.model.error.AiravataClientException, org.apache.airavata.model.error.AiravataSystemException, org.apache.thrift.TException {
+        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
+          throw new IllegalStateException("Method call not finished!");
+        }
+        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
+        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
+        return (new Client(prot)).recv_getExperimentStatistics();
+      }
+    }
+
     public void getAllExperimentsInProject(String projectId, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
       checkReady();
       getAllExperimentsInProject_call method_call = new getAllExperimentsInProject_call(projectId, resultHandler, this, ___protocolFactory, ___transport);
@@ -10743,6 +10816,7 @@ import org.slf4j.LoggerFactory;
       processMap.put("searchExperimentsByCreationTime", new searchExperimentsByCreationTime());
       processMap.put("searchExperimentsByCreationTimeWithPagination", new searchExperimentsByCreationTimeWithPagination());
       processMap.put("searchExperiments", new searchExperiments());
+      processMap.put("getExperimentStatistics", new getExperimentStatistics());
       processMap.put("getAllExperimentsInProject", new getAllExperimentsInProject());
       processMap.put("getAllExperimentsInProjectWithPagination", new getAllExperimentsInProjectWithPagination());
       processMap.put("getAllUserExperiments", new getAllUserExperiments());
@@ -11721,6 +11795,34 @@ import org.slf4j.LoggerFactory;
       }
     }
 
+    public static class getExperimentStatistics<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getExperimentStatistics_args> {
+      public getExperimentStatistics() {
+        super("getExperimentStatistics");
+      }
+
+      public getExperimentStatistics_args getEmptyArgsInstance() {
+        return new getExperimentStatistics_args();
+      }
+
+      protected boolean isOneway() {
+        return false;
+      }
+
+      public getExperimentStatistics_result getResult(I iface, getExperimentStatistics_args args) throws org.apache.thrift.TException {
+        getExperimentStatistics_result result = new getExperimentStatistics_result();
+        try {
+          result.success = iface.getExperimentStatistics(args.gatewayId, args.fromTime, args.toTime);
+        } catch (org.apache.airavata.model.error.InvalidRequestException ire) {
+          result.ire = ire;
+        } catch (org.apache.airavata.model.error.AiravataClientException ace) {
+          result.ace = ace;
+        } catch (org.apache.airavata.model.error.AiravataSystemException ase) {
+          result.ase = ase;
+        }
+        return result;
+      }
+    }
+
     public static class getAllExperimentsInProject<I extends Iface> extends org.apache.thrift.ProcessFunction<I, getAllExperimentsInProject_args> {
       public getAllExperimentsInProject() {
         super("getAllExperimentsInProject");
@@ -14499,6 +14601,7 @@ import org.slf4j.LoggerFactory;
       processMap.put("searchExperimentsByCreationTime", new searchExperimentsByCreationTime());
       processMap.put("searchExperimentsByCreationTimeWithPagination", new searchExperimentsByCreationTimeWithPagination());
       processMap.put("searchExperiments", new searchExperiments());
+      processMap.put("getExperimentStatistics", new getExperimentStatistics());
       processMap.put("getAllExperimentsInProject", new getAllExperimentsInProject());
       processMap.put("getAllExperimentsInProjectWithPagination", new getAllExperimentsInProjectWithPagination());
       processMap.put("getAllUserExperiments", new getAllUserExperiments());
@@ -16696,20 +16799,20 @@ import org.slf4j.LoggerFactory;
       }
     }
 
-    public static class getAllExperimentsInProject<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllExperimentsInProject_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
-      public getAllExperimentsInProject() {
-        super("getAllExperimentsInProject");
+    public static class getExperimentStatistics<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getExperimentStatistics_args, org.apache.airavata.model.workspace.experiment.ExperimentStatistics> {
+      public getExperimentStatistics() {
+        super("getExperimentStatistics");
       }
 
-      public getAllExperimentsInProject_args getEmptyArgsInstance() {
-        return new getAllExperimentsInProject_args();
+      public getExperimentStatistics_args getEmptyArgsInstance() {
+        return new getExperimentStatistics_args();
       }
 
-      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatistics> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>>() { 
-          public void onComplete(List<org.apache.airavata.model.workspace.experiment.Experiment> o) {
-            getAllExperimentsInProject_result result = new getAllExperimentsInProject_result();
+        return new AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatistics>() { 
+          public void onComplete(org.apache.airavata.model.workspace.experiment.ExperimentStatistics o) {
+            getExperimentStatistics_result result = new getExperimentStatistics_result();
             result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -16722,7 +16825,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getAllExperimentsInProject_result result = new getAllExperimentsInProject_result();
+            getExperimentStatistics_result result = new getExperimentStatistics_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -16738,11 +16841,6 @@ import org.slf4j.LoggerFactory;
                         result.setAseIsSet(true);
                         msg = result;
             }
-            else             if (e instanceof org.apache.airavata.model.error.ProjectNotFoundException) {
-                        result.pnfe = (org.apache.airavata.model.error.ProjectNotFoundException) e;
-                        result.setPnfeIsSet(true);
-                        msg = result;
-            }
              else 
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
@@ -16763,25 +16861,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getAllExperimentsInProject_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
-        iface.getAllExperimentsInProject(args.projectId,resultHandler);
+      public void start(I iface, getExperimentStatistics_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatistics> resultHandler) throws TException {
+        iface.getExperimentStatistics(args.gatewayId, args.fromTime, args.toTime,resultHandler);
       }
     }
 
-    public static class getAllExperimentsInProjectWithPagination<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllExperimentsInProjectWithPagination_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
-      public getAllExperimentsInProjectWithPagination() {
-        super("getAllExperimentsInProjectWithPagination");
+    public static class getAllExperimentsInProject<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllExperimentsInProject_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
+      public getAllExperimentsInProject() {
+        super("getAllExperimentsInProject");
       }
 
-      public getAllExperimentsInProjectWithPagination_args getEmptyArgsInstance() {
-        return new getAllExperimentsInProjectWithPagination_args();
+      public getAllExperimentsInProject_args getEmptyArgsInstance() {
+        return new getAllExperimentsInProject_args();
       }
 
       public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
         return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>>() { 
           public void onComplete(List<org.apache.airavata.model.workspace.experiment.Experiment> o) {
-            getAllExperimentsInProjectWithPagination_result result = new getAllExperimentsInProjectWithPagination_result();
+            getAllExperimentsInProject_result result = new getAllExperimentsInProject_result();
             result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -16794,7 +16892,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getAllExperimentsInProjectWithPagination_result result = new getAllExperimentsInProjectWithPagination_result();
+            getAllExperimentsInProject_result result = new getAllExperimentsInProject_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -16835,298 +16933,26 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getAllExperimentsInProjectWithPagination_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
-        iface.getAllExperimentsInProjectWithPagination(args.projectId, args.limit, args.offset,resultHandler);
-      }
-    }
-
-    public static class getAllUserExperiments<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllUserExperiments_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
-      public getAllUserExperiments() {
-        super("getAllUserExperiments");
-      }
-
-      public getAllUserExperiments_args getEmptyArgsInstance() {
-        return new getAllUserExperiments_args();
-      }
-
-      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
-        final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>>() { 
-          public void onComplete(List<org.apache.airavata.model.workspace.experiment.Experiment> o) {
-            getAllUserExperiments_result result = new getAllUserExperiments_result();
-            result.success = o;
-            try {
-              fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
-              return;
-            } catch (Exception e) {
-              LOGGER.error("Exception writing to internal frame buffer", e);
-            }
-            fb.close();
-          }
-          public void onError(Exception e) {
-            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
-            org.apache.thrift.TBase msg;
-            getAllUserExperiments_result result = new getAllUserExperiments_result();
-            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
-                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
-                        result.setIreIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
-                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
-                        result.setAceIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
-                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
-                        result.setAseIsSet(true);
-                        msg = result;
-            }
-             else 
-            {
-              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-              msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
-            }
-            try {
-              fcall.sendResponse(fb,msg,msgType,seqid);
-              return;
-            } catch (Exception ex) {
-              LOGGER.error("Exception writing to internal frame buffer", ex);
-            }
-            fb.close();
-          }
-        };
-      }
-
-      protected boolean isOneway() {
-        return false;
-      }
-
-      public void start(I iface, getAllUserExperiments_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
-        iface.getAllUserExperiments(args.gatewayId, args.userName,resultHandler);
-      }
-    }
-
-    public static class getAllUserExperimentsWithPagination<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllUserExperimentsWithPagination_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
-      public getAllUserExperimentsWithPagination() {
-        super("getAllUserExperimentsWithPagination");
-      }
-
-      public getAllUserExperimentsWithPagination_args getEmptyArgsInstance() {
-        return new getAllUserExperimentsWithPagination_args();
-      }
-
-      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
-        final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>>() { 
-          public void onComplete(List<org.apache.airavata.model.workspace.experiment.Experiment> o) {
-            getAllUserExperimentsWithPagination_result result = new getAllUserExperimentsWithPagination_result();
-            result.success = o;
-            try {
-              fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
-              return;
-            } catch (Exception e) {
-              LOGGER.error("Exception writing to internal frame buffer", e);
-            }
-            fb.close();
-          }
-          public void onError(Exception e) {
-            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
-            org.apache.thrift.TBase msg;
-            getAllUserExperimentsWithPagination_result result = new getAllUserExperimentsWithPagination_result();
-            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
-                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
-                        result.setIreIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
-                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
-                        result.setAceIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
-                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
-                        result.setAseIsSet(true);
-                        msg = result;
-            }
-             else 
-            {
-              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-              msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
-            }
-            try {
-              fcall.sendResponse(fb,msg,msgType,seqid);
-              return;
-            } catch (Exception ex) {
-              LOGGER.error("Exception writing to internal frame buffer", ex);
-            }
-            fb.close();
-          }
-        };
-      }
-
-      protected boolean isOneway() {
-        return false;
-      }
-
-      public void start(I iface, getAllUserExperimentsWithPagination_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
-        iface.getAllUserExperimentsWithPagination(args.gatewayId, args.userName, args.limit, args.offset,resultHandler);
-      }
-    }
-
-    public static class createExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createExperiment_args, String> {
-      public createExperiment() {
-        super("createExperiment");
-      }
-
-      public createExperiment_args getEmptyArgsInstance() {
-        return new createExperiment_args();
-      }
-
-      public AsyncMethodCallback<String> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
-        final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<String>() { 
-          public void onComplete(String o) {
-            createExperiment_result result = new createExperiment_result();
-            result.success = o;
-            try {
-              fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
-              return;
-            } catch (Exception e) {
-              LOGGER.error("Exception writing to internal frame buffer", e);
-            }
-            fb.close();
-          }
-          public void onError(Exception e) {
-            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
-            org.apache.thrift.TBase msg;
-            createExperiment_result result = new createExperiment_result();
-            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
-                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
-                        result.setIreIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
-                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
-                        result.setAceIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
-                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
-                        result.setAseIsSet(true);
-                        msg = result;
-            }
-             else 
-            {
-              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-              msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
-            }
-            try {
-              fcall.sendResponse(fb,msg,msgType,seqid);
-              return;
-            } catch (Exception ex) {
-              LOGGER.error("Exception writing to internal frame buffer", ex);
-            }
-            fb.close();
-          }
-        };
-      }
-
-      protected boolean isOneway() {
-        return false;
-      }
-
-      public void start(I iface, createExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
-        iface.createExperiment(args.gatewayId, args.experiment,resultHandler);
-      }
-    }
-
-    public static class getExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getExperiment_args, org.apache.airavata.model.workspace.experiment.Experiment> {
-      public getExperiment() {
-        super("getExperiment");
-      }
-
-      public getExperiment_args getEmptyArgsInstance() {
-        return new getExperiment_args();
-      }
-
-      public AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.Experiment> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
-        final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.Experiment>() { 
-          public void onComplete(org.apache.airavata.model.workspace.experiment.Experiment o) {
-            getExperiment_result result = new getExperiment_result();
-            result.success = o;
-            try {
-              fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
-              return;
-            } catch (Exception e) {
-              LOGGER.error("Exception writing to internal frame buffer", e);
-            }
-            fb.close();
-          }
-          public void onError(Exception e) {
-            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
-            org.apache.thrift.TBase msg;
-            getExperiment_result result = new getExperiment_result();
-            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
-                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
-                        result.setIreIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.ExperimentNotFoundException) {
-                        result.enf = (org.apache.airavata.model.error.ExperimentNotFoundException) e;
-                        result.setEnfIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
-                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
-                        result.setAceIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
-                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
-                        result.setAseIsSet(true);
-                        msg = result;
-            }
-             else 
-            {
-              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-              msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
-            }
-            try {
-              fcall.sendResponse(fb,msg,msgType,seqid);
-              return;
-            } catch (Exception ex) {
-              LOGGER.error("Exception writing to internal frame buffer", ex);
-            }
-            fb.close();
-          }
-        };
-      }
-
-      protected boolean isOneway() {
-        return false;
-      }
-
-      public void start(I iface, getExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.Experiment> resultHandler) throws TException {
-        iface.getExperiment(args.airavataExperimentId,resultHandler);
+      public void start(I iface, getAllExperimentsInProject_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
+        iface.getAllExperimentsInProject(args.projectId,resultHandler);
       }
     }
 
-    public static class updateExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateExperiment_args, Void> {
-      public updateExperiment() {
-        super("updateExperiment");
+    public static class getAllExperimentsInProjectWithPagination<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllExperimentsInProjectWithPagination_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
+      public getAllExperimentsInProjectWithPagination() {
+        super("getAllExperimentsInProjectWithPagination");
       }
 
-      public updateExperiment_args getEmptyArgsInstance() {
-        return new updateExperiment_args();
+      public getAllExperimentsInProjectWithPagination_args getEmptyArgsInstance() {
+        return new getAllExperimentsInProjectWithPagination_args();
       }
 
-      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Void>() { 
-          public void onComplete(Void o) {
-            updateExperiment_result result = new updateExperiment_result();
+        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>>() { 
+          public void onComplete(List<org.apache.airavata.model.workspace.experiment.Experiment> o) {
+            getAllExperimentsInProjectWithPagination_result result = new getAllExperimentsInProjectWithPagination_result();
+            result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17138,17 +16964,12 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            updateExperiment_result result = new updateExperiment_result();
+            getAllExperimentsInProjectWithPagination_result result = new getAllExperimentsInProjectWithPagination_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
                         msg = result;
             }
-            else             if (e instanceof org.apache.airavata.model.error.ExperimentNotFoundException) {
-                        result.enf = (org.apache.airavata.model.error.ExperimentNotFoundException) e;
-                        result.setEnfIsSet(true);
-                        msg = result;
-            }
             else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
                         result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
                         result.setAceIsSet(true);
@@ -17159,6 +16980,11 @@ import org.slf4j.LoggerFactory;
                         result.setAseIsSet(true);
                         msg = result;
             }
+            else             if (e instanceof org.apache.airavata.model.error.ProjectNotFoundException) {
+                        result.pnfe = (org.apache.airavata.model.error.ProjectNotFoundException) e;
+                        result.setPnfeIsSet(true);
+                        msg = result;
+            }
              else 
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
@@ -17179,25 +17005,26 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, updateExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
-        iface.updateExperiment(args.airavataExperimentId, args.experiment,resultHandler);
+      public void start(I iface, getAllExperimentsInProjectWithPagination_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
+        iface.getAllExperimentsInProjectWithPagination(args.projectId, args.limit, args.offset,resultHandler);
       }
     }
 
-    public static class updateExperimentConfiguration<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateExperimentConfiguration_args, Void> {
-      public updateExperimentConfiguration() {
-        super("updateExperimentConfiguration");
+    public static class getAllUserExperiments<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllUserExperiments_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
+      public getAllUserExperiments() {
+        super("getAllUserExperiments");
       }
 
-      public updateExperimentConfiguration_args getEmptyArgsInstance() {
-        return new updateExperimentConfiguration_args();
+      public getAllUserExperiments_args getEmptyArgsInstance() {
+        return new getAllUserExperiments_args();
       }
 
-      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Void>() { 
-          public void onComplete(Void o) {
-            updateExperimentConfiguration_result result = new updateExperimentConfiguration_result();
+        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>>() { 
+          public void onComplete(List<org.apache.airavata.model.workspace.experiment.Experiment> o) {
+            getAllUserExperiments_result result = new getAllUserExperiments_result();
+            result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17209,7 +17036,23 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            updateExperimentConfiguration_result result = new updateExperimentConfiguration_result();
+            getAllUserExperiments_result result = new getAllUserExperiments_result();
+            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
+                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
+                        result.setIreIsSet(true);
+                        msg = result;
+            }
+            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
+                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
+                        result.setAceIsSet(true);
+                        msg = result;
+            }
+            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
+                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
+                        result.setAseIsSet(true);
+                        msg = result;
+            }
+             else 
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
               msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
@@ -17229,25 +17072,26 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, updateExperimentConfiguration_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
-        iface.updateExperimentConfiguration(args.airavataExperimentId, args.userConfiguration,resultHandler);
+      public void start(I iface, getAllUserExperiments_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
+        iface.getAllUserExperiments(args.gatewayId, args.userName,resultHandler);
       }
     }
 
-    public static class updateResourceScheduleing<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateResourceScheduleing_args, Void> {
-      public updateResourceScheduleing() {
-        super("updateResourceScheduleing");
+    public static class getAllUserExperimentsWithPagination<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getAllUserExperimentsWithPagination_args, List<org.apache.airavata.model.workspace.experiment.Experiment>> {
+      public getAllUserExperimentsWithPagination() {
+        super("getAllUserExperimentsWithPagination");
       }
 
-      public updateResourceScheduleing_args getEmptyArgsInstance() {
-        return new updateResourceScheduleing_args();
+      public getAllUserExperimentsWithPagination_args getEmptyArgsInstance() {
+        return new getAllUserExperimentsWithPagination_args();
       }
 
-      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Void>() { 
-          public void onComplete(Void o) {
-            updateResourceScheduleing_result result = new updateResourceScheduleing_result();
+        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>>() { 
+          public void onComplete(List<org.apache.airavata.model.workspace.experiment.Experiment> o) {
+            getAllUserExperimentsWithPagination_result result = new getAllUserExperimentsWithPagination_result();
+            result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17259,7 +17103,23 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            updateResourceScheduleing_result result = new updateResourceScheduleing_result();
+            getAllUserExperimentsWithPagination_result result = new getAllUserExperimentsWithPagination_result();
+            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
+                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
+                        result.setIreIsSet(true);
+                        msg = result;
+            }
+            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
+                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
+                        result.setAceIsSet(true);
+                        msg = result;
+            }
+            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
+                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
+                        result.setAseIsSet(true);
+                        msg = result;
+            }
+             else 
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
               msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
@@ -17279,27 +17139,26 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, updateResourceScheduleing_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
-        iface.updateResourceScheduleing(args.airavataExperimentId, args.resourceScheduling,resultHandler);
+      public void start(I iface, getAllUserExperimentsWithPagination_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.Experiment>> resultHandler) throws TException {
+        iface.getAllUserExperimentsWithPagination(args.gatewayId, args.userName, args.limit, args.offset,resultHandler);
       }
     }
 
-    public static class validateExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, validateExperiment_args, Boolean> {
-      public validateExperiment() {
-        super("validateExperiment");
+    public static class createExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, createExperiment_args, String> {
+      public createExperiment() {
+        super("createExperiment");
       }
 
-      public validateExperiment_args getEmptyArgsInstance() {
-        return new validateExperiment_args();
+      public createExperiment_args getEmptyArgsInstance() {
+        return new createExperiment_args();
       }
 
-      public AsyncMethodCallback<Boolean> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<String> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Boolean>() { 
-          public void onComplete(Boolean o) {
-            validateExperiment_result result = new validateExperiment_result();
+        return new AsyncMethodCallback<String>() { 
+          public void onComplete(String o) {
+            createExperiment_result result = new createExperiment_result();
             result.success = o;
-            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17311,17 +17170,12 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            validateExperiment_result result = new validateExperiment_result();
+            createExperiment_result result = new createExperiment_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
                         msg = result;
             }
-            else             if (e instanceof org.apache.airavata.model.error.ExperimentNotFoundException) {
-                        result.enf = (org.apache.airavata.model.error.ExperimentNotFoundException) e;
-                        result.setEnfIsSet(true);
-                        msg = result;
-            }
             else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
                         result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
                         result.setAceIsSet(true);
@@ -17352,25 +17206,26 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, validateExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
-        iface.validateExperiment(args.airavataExperimentId,resultHandler);
+      public void start(I iface, createExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
+        iface.createExperiment(args.gatewayId, args.experiment,resultHandler);
       }
     }
 
-    public static class launchExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, launchExperiment_args, Void> {
-      public launchExperiment() {
-        super("launchExperiment");
+    public static class getExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getExperiment_args, org.apache.airavata.model.workspace.experiment.Experiment> {
+      public getExperiment() {
+        super("getExperiment");
       }
 
-      public launchExperiment_args getEmptyArgsInstance() {
-        return new launchExperiment_args();
+      public getExperiment_args getEmptyArgsInstance() {
+        return new getExperiment_args();
       }
 
-      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.Experiment> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Void>() { 
-          public void onComplete(Void o) {
-            launchExperiment_result result = new launchExperiment_result();
+        return new AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.Experiment>() { 
+          public void onComplete(org.apache.airavata.model.workspace.experiment.Experiment o) {
+            getExperiment_result result = new getExperiment_result();
+            result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17382,7 +17237,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            launchExperiment_result result = new launchExperiment_result();
+            getExperiment_result result = new getExperiment_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -17403,11 +17258,6 @@ import org.slf4j.LoggerFactory;
                         result.setAseIsSet(true);
                         msg = result;
             }
-            else             if (e instanceof org.apache.airavata.model.error.LaunchValidationException) {
-                        result.lve = (org.apache.airavata.model.error.LaunchValidationException) e;
-                        result.setLveIsSet(true);
-                        msg = result;
-            }
              else 
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
@@ -17428,26 +17278,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, launchExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
-        iface.launchExperiment(args.airavataExperimentId, args.airavataCredStoreToken,resultHandler);
+      public void start(I iface, getExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.Experiment> resultHandler) throws TException {
+        iface.getExperiment(args.airavataExperimentId,resultHandler);
       }
     }
 
-    public static class getExperimentStatus<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getExperimentStatus_args, org.apache.airavata.model.workspace.experiment.ExperimentStatus> {
-      public getExperimentStatus() {
-        super("getExperimentStatus");
+    public static class updateExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateExperiment_args, Void> {
+      public updateExperiment() {
+        super("updateExperiment");
       }
 
-      public getExperimentStatus_args getEmptyArgsInstance() {
-        return new getExperimentStatus_args();
+      public updateExperiment_args getEmptyArgsInstance() {
+        return new updateExperiment_args();
       }
 
-      public AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatus> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatus>() { 
-          public void onComplete(org.apache.airavata.model.workspace.experiment.ExperimentStatus o) {
-            getExperimentStatus_result result = new getExperimentStatus_result();
-            result.success = o;
+        return new AsyncMethodCallback<Void>() { 
+          public void onComplete(Void o) {
+            updateExperiment_result result = new updateExperiment_result();
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17459,7 +17308,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getExperimentStatus_result result = new getExperimentStatus_result();
+            updateExperiment_result result = new updateExperiment_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -17500,26 +17349,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getExperimentStatus_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatus> resultHandler) throws TException {
-        iface.getExperimentStatus(args.airavataExperimentId,resultHandler);
+      public void start(I iface, updateExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
+        iface.updateExperiment(args.airavataExperimentId, args.experiment,resultHandler);
       }
     }
 
-    public static class getExperimentOutputs<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getExperimentOutputs_args, List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> {
-      public getExperimentOutputs() {
-        super("getExperimentOutputs");
+    public static class updateExperimentConfiguration<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateExperimentConfiguration_args, Void> {
+      public updateExperimentConfiguration() {
+        super("updateExperimentConfiguration");
       }
 
-      public getExperimentOutputs_args getEmptyArgsInstance() {
-        return new getExperimentOutputs_args();
+      public updateExperimentConfiguration_args getEmptyArgsInstance() {
+        return new updateExperimentConfiguration_args();
       }
 
-      public AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>>() { 
-          public void onComplete(List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType> o) {
-            getExperimentOutputs_result result = new getExperimentOutputs_result();
-            result.success = o;
+        return new AsyncMethodCallback<Void>() { 
+          public void onComplete(Void o) {
+            updateExperimentConfiguration_result result = new updateExperimentConfiguration_result();
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17531,28 +17379,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getExperimentOutputs_result result = new getExperimentOutputs_result();
-            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
-                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
-                        result.setIreIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.ExperimentNotFoundException) {
-                        result.enf = (org.apache.airavata.model.error.ExperimentNotFoundException) e;
-                        result.setEnfIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
-                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
-                        result.setAceIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
-                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
-                        result.setAseIsSet(true);
-                        msg = result;
-            }
-             else 
+            updateExperimentConfiguration_result result = new updateExperimentConfiguration_result();
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
               msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
@@ -17572,26 +17399,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getExperimentOutputs_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> resultHandler) throws TException {
-        iface.getExperimentOutputs(args.airavataExperimentId,resultHandler);
+      public void start(I iface, updateExperimentConfiguration_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
+        iface.updateExperimentConfiguration(args.airavataExperimentId, args.userConfiguration,resultHandler);
       }
     }
 
-    public static class getIntermediateOutputs<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getIntermediateOutputs_args, List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> {
-      public getIntermediateOutputs() {
-        super("getIntermediateOutputs");
+    public static class updateResourceScheduleing<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, updateResourceScheduleing_args, Void> {
+      public updateResourceScheduleing() {
+        super("updateResourceScheduleing");
       }
 
-      public getIntermediateOutputs_args getEmptyArgsInstance() {
-        return new getIntermediateOutputs_args();
+      public updateResourceScheduleing_args getEmptyArgsInstance() {
+        return new updateResourceScheduleing_args();
       }
 
-      public AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>>() { 
-          public void onComplete(List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType> o) {
-            getIntermediateOutputs_result result = new getIntermediateOutputs_result();
-            result.success = o;
+        return new AsyncMethodCallback<Void>() { 
+          public void onComplete(Void o) {
+            updateResourceScheduleing_result result = new updateResourceScheduleing_result();
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17603,28 +17429,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getIntermediateOutputs_result result = new getIntermediateOutputs_result();
-            if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
-                        result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
-                        result.setIreIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.ExperimentNotFoundException) {
-                        result.enf = (org.apache.airavata.model.error.ExperimentNotFoundException) e;
-                        result.setEnfIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
-                        result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
-                        result.setAceIsSet(true);
-                        msg = result;
-            }
-            else             if (e instanceof org.apache.airavata.model.error.AiravataSystemException) {
-                        result.ase = (org.apache.airavata.model.error.AiravataSystemException) e;
-                        result.setAseIsSet(true);
-                        msg = result;
-            }
-             else 
+            updateResourceScheduleing_result result = new updateResourceScheduleing_result();
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
               msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
@@ -17644,26 +17449,27 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getIntermediateOutputs_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> resultHandler) throws TException {
-        iface.getIntermediateOutputs(args.airavataExperimentId,resultHandler);
+      public void start(I iface, updateResourceScheduleing_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
+        iface.updateResourceScheduleing(args.airavataExperimentId, args.resourceScheduling,resultHandler);
       }
     }
 
-    public static class getJobStatuses<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getJobStatuses_args, Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>> {
-      public getJobStatuses() {
-        super("getJobStatuses");
+    public static class validateExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, validateExperiment_args, Boolean> {
+      public validateExperiment() {
+        super("validateExperiment");
       }
 
-      public getJobStatuses_args getEmptyArgsInstance() {
-        return new getJobStatuses_args();
+      public validateExperiment_args getEmptyArgsInstance() {
+        return new validateExperiment_args();
       }
 
-      public AsyncMethodCallback<Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<Boolean> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>>() { 
-          public void onComplete(Map<String,org.apache.airavata.model.workspace.experiment.JobStatus> o) {
-            getJobStatuses_result result = new getJobStatuses_result();
+        return new AsyncMethodCallback<Boolean>() { 
+          public void onComplete(Boolean o) {
+            validateExperiment_result result = new validateExperiment_result();
             result.success = o;
+            result.setSuccessIsSet(true);
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17675,7 +17481,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getJobStatuses_result result = new getJobStatuses_result();
+            validateExperiment_result result = new validateExperiment_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -17716,26 +17522,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getJobStatuses_args args, org.apache.thrift.async.AsyncMethodCallback<Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>> resultHandler) throws TException {
-        iface.getJobStatuses(args.airavataExperimentId,resultHandler);
+      public void start(I iface, validateExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Boolean> resultHandler) throws TException {
+        iface.validateExperiment(args.airavataExperimentId,resultHandler);
       }
     }
 
-    public static class getJobDetails<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getJobDetails_args, List<org.apache.airavata.model.workspace.experiment.JobDetails>> {
-      public getJobDetails() {
-        super("getJobDetails");
+    public static class launchExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, launchExperiment_args, Void> {
+      public launchExperiment() {
+        super("launchExperiment");
       }
 
-      public getJobDetails_args getEmptyArgsInstance() {
-        return new getJobDetails_args();
+      public launchExperiment_args getEmptyArgsInstance() {
+        return new launchExperiment_args();
       }
 
-      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.JobDetails>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.JobDetails>>() { 
-          public void onComplete(List<org.apache.airavata.model.workspace.experiment.JobDetails> o) {
-            getJobDetails_result result = new getJobDetails_result();
-            result.success = o;
+        return new AsyncMethodCallback<Void>() { 
+          public void onComplete(Void o) {
+            launchExperiment_result result = new launchExperiment_result();
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17747,7 +17552,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getJobDetails_result result = new getJobDetails_result();
+            launchExperiment_result result = new launchExperiment_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -17768,6 +17573,11 @@ import org.slf4j.LoggerFactory;
                         result.setAseIsSet(true);
                         msg = result;
             }
+            else             if (e instanceof org.apache.airavata.model.error.LaunchValidationException) {
+                        result.lve = (org.apache.airavata.model.error.LaunchValidationException) e;
+                        result.setLveIsSet(true);
+                        msg = result;
+            }
              else 
             {
               msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
@@ -17788,25 +17598,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getJobDetails_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.JobDetails>> resultHandler) throws TException {
-        iface.getJobDetails(args.airavataExperimentId,resultHandler);
+      public void start(I iface, launchExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
+        iface.launchExperiment(args.airavataExperimentId, args.airavataCredStoreToken,resultHandler);
       }
     }
 
-    public static class getDataTransferDetails<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getDataTransferDetails_args, List<org.apache.airavata.model.workspace.experiment.DataTransferDetails>> {
-      public getDataTransferDetails() {
-        super("getDataTransferDetails");
+    public static class getExperimentStatus<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getExperimentStatus_args, org.apache.airavata.model.workspace.experiment.ExperimentStatus> {
+      public getExperimentStatus() {
+        super("getExperimentStatus");
       }
 
-      public getDataTransferDetails_args getEmptyArgsInstance() {
-        return new getDataTransferDetails_args();
+      public getExperimentStatus_args getEmptyArgsInstance() {
+        return new getExperimentStatus_args();
       }
 
-      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.DataTransferDetails>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatus> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.DataTransferDetails>>() { 
-          public void onComplete(List<org.apache.airavata.model.workspace.experiment.DataTransferDetails> o) {
-            getDataTransferDetails_result result = new getDataTransferDetails_result();
+        return new AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatus>() { 
+          public void onComplete(org.apache.airavata.model.workspace.experiment.ExperimentStatus o) {
+            getExperimentStatus_result result = new getExperimentStatus_result();
             result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -17819,7 +17629,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getDataTransferDetails_result result = new getDataTransferDetails_result();
+            getExperimentStatus_result result = new getExperimentStatus_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -17860,25 +17670,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getDataTransferDetails_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.DataTransferDetails>> resultHandler) throws TException {
-        iface.getDataTransferDetails(args.airavataExperimentId,resultHandler);
+      public void start(I iface, getExperimentStatus_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.workspace.experiment.ExperimentStatus> resultHandler) throws TException {
+        iface.getExperimentStatus(args.airavataExperimentId,resultHandler);
       }
     }
 
-    public static class cloneExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, cloneExperiment_args, String> {
-      public cloneExperiment() {
-        super("cloneExperiment");
+    public static class getExperimentOutputs<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getExperimentOutputs_args, List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> {
+      public getExperimentOutputs() {
+        super("getExperimentOutputs");
       }
 
-      public cloneExperiment_args getEmptyArgsInstance() {
-        return new cloneExperiment_args();
+      public getExperimentOutputs_args getEmptyArgsInstance() {
+        return new getExperimentOutputs_args();
       }
 
-      public AsyncMethodCallback<String> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<String>() { 
-          public void onComplete(String o) {
-            cloneExperiment_result result = new cloneExperiment_result();
+        return new AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>>() { 
+          public void onComplete(List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType> o) {
+            getExperimentOutputs_result result = new getExperimentOutputs_result();
             result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -17891,7 +17701,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            cloneExperiment_result result = new cloneExperiment_result();
+            getExperimentOutputs_result result = new getExperimentOutputs_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -17932,25 +17742,26 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, cloneExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
-        iface.cloneExperiment(args.existingExperimentID, args.newExperimentName,resultHandler);
+      public void start(I iface, getExperimentOutputs_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> resultHandler) throws TException {
+        iface.getExperimentOutputs(args.airavataExperimentId,resultHandler);
       }
     }
 
-    public static class terminateExperiment<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, terminateExperiment_args, Void> {
-      public terminateExperiment() {
-        super("terminateExperiment");
+    public static class getIntermediateOutputs<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getIntermediateOutputs_args, List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> {
+      public getIntermediateOutputs() {
+        super("getIntermediateOutputs");
       }
 
-      public terminateExperiment_args getEmptyArgsInstance() {
-        return new terminateExperiment_args();
+      public getIntermediateOutputs_args getEmptyArgsInstance() {
+        return new getIntermediateOutputs_args();
       }
 
-      public AsyncMethodCallback<Void> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<Void>() { 
-          public void onComplete(Void o) {
-            terminateExperiment_result result = new terminateExperiment_result();
+        return new AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>>() { 
+          public void onComplete(List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType> o) {
+            getIntermediateOutputs_result result = new getIntermediateOutputs_result();
+            result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
               return;
@@ -17962,7 +17773,7 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            terminateExperiment_result result = new terminateExperiment_result();
+            getIntermediateOutputs_result result = new getIntermediateOutputs_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
@@ -18003,25 +17814,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, terminateExperiment_args args, org.apache.thrift.async.AsyncMethodCallback<Void> resultHandler) throws TException {
-        iface.terminateExperiment(args.airavataExperimentId, args.tokenId,resultHandler);
+      public void start(I iface, getIntermediateOutputs_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType>> resultHandler) throws TException {
+        iface.getIntermediateOutputs(args.airavataExperimentId,resultHandler);
       }
     }
 
-    public static class registerApplicationModule<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, registerApplicationModule_args, String> {
-      public registerApplicationModule() {
-        super("registerApplicationModule");
+    public static class getJobStatuses<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getJobStatuses_args, Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>> {
+      public getJobStatuses() {
+        super("getJobStatuses");
       }
 
-      public registerApplicationModule_args getEmptyArgsInstance() {
-        return new registerApplicationModule_args();
+      public getJobStatuses_args getEmptyArgsInstance() {
+        return new getJobStatuses_args();
       }
 
-      public AsyncMethodCallback<String> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<String>() { 
-          public void onComplete(String o) {
-            registerApplicationModule_result result = new registerApplicationModule_result();
+        return new AsyncMethodCallback<Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>>() { 
+          public void onComplete(Map<String,org.apache.airavata.model.workspace.experiment.JobStatus> o) {
+            getJobStatuses_result result = new getJobStatuses_result();
             result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -18034,12 +17845,17 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            registerApplicationModule_result result = new registerApplicationModule_result();
+            getJobStatuses_result result = new getJobStatuses_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
                         msg = result;
             }
+            else             if (e instanceof org.apache.airavata.model.error.ExperimentNotFoundException) {
+                        result.enf = (org.apache.airavata.model.error.ExperimentNotFoundException) e;
+                        result.setEnfIsSet(true);
+                        msg = result;
+            }
             else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
                         result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
                         result.setAceIsSet(true);
@@ -18070,25 +17886,25 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, registerApplicationModule_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
-        iface.registerApplicationModule(args.gatewayId, args.applicationModule,resultHandler);
+      public void start(I iface, getJobStatuses_args args, org.apache.thrift.async.AsyncMethodCallback<Map<String,org.apache.airavata.model.workspace.experiment.JobStatus>> resultHandler) throws TException {
+        iface.getJobStatuses(args.airavataExperimentId,resultHandler);
       }
     }
 
-    public static class getApplicationModule<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getApplicationModule_args, org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule> {
-      public getApplicationModule() {
-        super("getApplicationModule");
+    public static class getJobDetails<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, getJobDetails_args, List<org.apache.airavata.model.workspace.experiment.JobDetails>> {
+      public getJobDetails() {
+        super("getJobDetails");
       }
 
-      public getApplicationModule_args getEmptyArgsInstance() {
-        return new getApplicationModule_args();
+      public getJobDetails_args getEmptyArgsInstance() {
+        return new getJobDetails_args();
       }
 
-      public AsyncMethodCallback<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
+      public AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.JobDetails>> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
         final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule>() { 
-          public void onComplete(org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule o) {
-            getApplicationModule_result result = new getApplicationModule_result();
+        return new AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.JobDetails>>() { 
+          public void onComplete(List<org.apache.airavata.model.workspace.experiment.JobDetails> o) {
+            getJobDetails_result result = new getJobDetails_result();
             result.success = o;
             try {
               fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
@@ -18101,12 +17917,17 @@ import org.slf4j.LoggerFactory;
           public void onError(Exception e) {
             byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
             org.apache.thrift.TBase msg;
-            getApplicationModule_result result = new getApplicationModule_result();
+            getJobDetails_result result = new getJobDetails_result();
             if (e instanceof org.apache.airavata.model.error.InvalidRequestException) {
                         result.ire = (org.apache.airavata.model.error.InvalidRequestException) e;
                         result.setIreIsSet(true);
                         msg = result;
             }
+            else             if (e instanceof org.apache.airavata.model.error.ExperimentNotFoundException) {
+                        result.enf = (org.apache.airavata.model.error.ExperimentNotFoundException) e;
+                        result.setEnfIsSet(true);
+                        msg = result;
+            }
             else             if (e instanceof org.apache.airavata.model.error.AiravataClientException) {
                         result.ace = (org.apache.airavata.model.error.AiravataClientException) e;
                         result.setAceIsSet(true);
@@ -18137,27 +17958,26 @@ import org.slf4j.LoggerFactory;
         return false;
       }
 
-      public void start(I iface, getApplicationModule_args args, org.apache.thrift.async.AsyncMethodCallback<org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule> resultHandler) throws TException {
-        iface.getApplicationModule(args.appModuleId,resultHandler);
+      public void start(I iface, getJobDetails_args args, org.apache.thrift.async.AsyncMethodCallback<List<org.apache.airavata.model.workspace.experiment.JobDetails>> resultHandler) throws TException {
+        iface.getJobDetails(args.airavataExperimentId,resultHandler);
       }
     }
 
-    public static class updateApplicationModule<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, up

<TRUNCATED>