You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2014/07/01 17:47:58 UTC

git commit: implementing AiravataServerHandler to call app catalog cpi - AIRAVATA-1228

Repository: airavata
Updated Branches:
  refs/heads/master f03e6ec54 -> a2a27146a


implementing AiravataServerHandler to call app catalog cpi - AIRAVATA-1228


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

Branch: refs/heads/master
Commit: a2a27146aa46829c34899cedb43864467d0834d2
Parents: f03e6ec
Author: Chathuri Wimalasena <ka...@gmail.com>
Authored: Tue Jul 1 11:47:50 2014 -0400
Committer: Chathuri Wimalasena <ka...@gmail.com>
Committed: Tue Jul 1 11:47:50 2014 -0400

----------------------------------------------------------------------
 airavata-api/airavata-api-server/pom.xml        |  10 +
 .../airavata/api/server/AiravataAPIServer.java  |   4 +-
 .../server/handler/AiravataServerHandler.java   | 181 +++++++++++++++++--
 .../appcatalog/cpi/ApplicationDeployment.java   |   7 +
 .../appcatalog/cpi/ApplicationInterface.java    |  38 +++-
 .../appcatalog/cpi/ComputeResource.java         |   6 +
 .../catalog/data/impl/AppCatalogFactory.java    |  46 +++++
 .../data/impl/ApplicationDeploymentImpl.java    |   5 +
 .../data/impl/ApplicationInterfaceImpl.java     | 114 +++++++++++-
 .../catalog/data/impl/ComputeResourceImpl.java  |  79 ++++++++
 10 files changed, 470 insertions(+), 20 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/airavata-api/airavata-api-server/pom.xml
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/pom.xml b/airavata-api/airavata-api-server/pom.xml
index 1a89fcc..c585408 100644
--- a/airavata-api/airavata-api-server/pom.xml
+++ b/airavata-api/airavata-api-server/pom.xml
@@ -53,6 +53,16 @@
         </dependency>
         <dependency>
             <groupId>org.apache.airavata</groupId>
+            <artifactId>app-catalog-cpi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
+            <artifactId>app-catalog-data</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.airavata</groupId>
             <artifactId>airavata-orchestrator-service</artifactId>
             <version>${project.version}</version>
         </dependency>

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java
----------------------------------------------------------------------
diff --git a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java
index 599de49..361408d 100644
--- a/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java
+++ b/airavata-api/airavata-api-server/src/main/java/org/apache/airavata/api/server/AiravataAPIServer.java
@@ -25,6 +25,7 @@ import java.net.InetSocketAddress;
 
 import org.apache.airavata.api.Airavata;
 import org.apache.airavata.api.server.handler.AiravataServerHandler;
+import org.apache.airavata.api.server.util.AppCatalogInitUtil;
 import org.apache.airavata.api.server.util.Constants;
 import org.apache.airavata.api.server.util.RegistryInitUtil;
 import org.apache.airavata.common.utils.AiravataUtils;
@@ -58,7 +59,8 @@ public class AiravataAPIServer implements IServer{
     public void StartAiravataServer(Airavata.Processor<Airavata.Iface> airavataAPIServer) throws AiravataSystemException {
         try {
             AiravataUtils.setExecutionAsServer();
-            //RegistryInitUtil.initializeDB();
+            RegistryInitUtil.initializeDB();
+            AppCatalogInitUtil.initializeDB();
             final int serverPort = Integer.parseInt(ServerSettings.getSetting(Constants.API_SERVER_PORT,"8930"));
             final String serverHost = ServerSettings.getSetting(Constants.API_SERVER_HOST, null);
             

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/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 91835b8..be6f4bb 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
@@ -30,6 +30,10 @@ import java.util.List;
 import java.util.Map;
 import java.util.Random;
 
+import org.airavata.appcatalog.cpi.AppCatalog;
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.apache.aiaravata.application.catalog.data.impl.AppCatalogFactory;
+import org.apache.aiaravata.application.catalog.data.resources.AbstractResource;
 import org.apache.airavata.api.Airavata;
 import org.apache.airavata.api.airavataAPIConstants;
 import org.apache.airavata.common.exception.ApplicationSettingsException;
@@ -85,6 +89,7 @@ import org.slf4j.LoggerFactory;
 public class AiravataServerHandler implements Airavata.Iface, Watcher {
     private static final Logger logger = LoggerFactory.getLogger(AiravataServerHandler.class);
     private Registry registry;
+    private AppCatalog appCatalog;
 
     private ZooKeeper zk;
 
@@ -1164,7 +1169,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public String registerApplicationModule(ApplicationModule applicationModule) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().addApplicationModule(applicationModule);
+        } catch (AppCatalogException e) {
+            logger.error("Error while adding application module...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while adding application module. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1176,7 +1190,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public ApplicationModule getApplicationModule(String appModuleId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().getApplicationModule(appModuleId);
+        } catch (AppCatalogException e) {
+            logger.error("Error while retrieving application module...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving the adding application module. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1189,7 +1212,17 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public boolean updateApplicationModule(String appModuleId, ApplicationModule applicationModule) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return false;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            appCatalog.getApplicationInterface().updateApplicationModule(appModuleId, applicationModule);
+            return true;
+        } catch (AppCatalogException e) {
+            logger.error("Error while updating application module...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while updating application module. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1201,7 +1234,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public boolean deleteApplicationModule(String appModuleId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return false;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().removeApplicationModule(appModuleId);
+        } catch (AppCatalogException e) {
+            logger.error("Error while deleting application module...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while deleting the application module. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1212,7 +1254,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public String registerApplicationDeployment(ApplicationDeploymentDescription applicationDeployment) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationDeployment().addApplicationDeployment(applicationDeployment);
+        } catch (AppCatalogException e) {
+            logger.error("Error while adding application deployment...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while adding application deployment. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1224,7 +1275,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public ApplicationDeploymentDescription getApplicationDeployment(String appDeploymentId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationDeployment().getApplicationDeployement(appDeploymentId);
+        } catch (AppCatalogException e) {
+            logger.error("Error while retrieving application deployment...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving application deployment. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1237,7 +1297,17 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public boolean updateApplicationDeployment(String appDeploymentId, ApplicationDeploymentDescription applicationDeployment) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return false;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            appCatalog.getApplicationDeployment().updateApplicationDeployment(appDeploymentId, applicationDeployment);
+            return true;
+        } catch (AppCatalogException e) {
+            logger.error("Error while updating application deployment...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while updating application deployment. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1249,7 +1319,17 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public boolean deleteApplicationDeployment(String appDeploymentId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return false;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            appCatalog.getApplicationDeployment().removeAppDeployment(appDeploymentId);
+            return true;
+        } catch (AppCatalogException e) {
+            logger.error("Error while deleting application deployment...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while deleting application deployment. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1261,7 +1341,23 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public List<String> getAppModuleDeployedResources(String appModuleId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            List<String> appDeployments = new ArrayList<String>();
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            Map<String, String> filters = new HashMap<String, String>();
+            filters.put(AbstractResource.ApplicationDeploymentConstants.APP_MODULE_ID, appModuleId);
+            List<ApplicationDeploymentDescription> applicationDeployements = appCatalog.getApplicationDeployment().getApplicationDeployements(filters);
+            for (ApplicationDeploymentDescription description : applicationDeployements){
+                appDeployments.add(description.getAppDeploymentId());
+            }
+            return appDeployments;
+        } catch (AppCatalogException e) {
+            logger.error("Error while retrieving application deployments...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving application deployment. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1272,7 +1368,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public String registerApplicationInterface(ApplicationInterfaceDescription applicationInterface) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().addApplicationInterface(applicationInterface);
+        } catch (AppCatalogException e) {
+            logger.error("Error while adding application interface...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while adding application interface. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1284,7 +1389,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public ApplicationInterfaceDescription getApplicationInterface(String appInterfaceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().getApplicationInterface(appInterfaceId);
+        } catch (AppCatalogException e) {
+            logger.error("Error while retrieving application interface...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving application interface. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1297,7 +1411,17 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public boolean updateApplicationInterface(String appInterfaceId, ApplicationInterfaceDescription applicationInterface) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return false;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            appCatalog.getApplicationInterface().updateApplicationInterface(appInterfaceId, applicationInterface);
+            return true;
+        } catch (AppCatalogException e) {
+            logger.error("Error while updating application interface...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while updating application interface. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1309,7 +1433,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public boolean deleteApplicationInterface(String appInterfaceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return false;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().removeApplicationInterface(appInterfaceId);
+        } catch (AppCatalogException e) {
+            logger.error("Error while deleting application interface...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while deleting application interface. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1321,7 +1454,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public List<InputDataObjectType> getApplicationInputs(String appInterfaceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().getApplicationInputs(appInterfaceId);
+        } catch (AppCatalogException e) {
+            logger.error("Error while retrieving application inputs...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving application inputs. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
     /**
@@ -1333,7 +1475,16 @@ public class AiravataServerHandler implements Airavata.Iface, Watcher {
      */
     @Override
     public List<OutputDataObjectType> getApplicationOutputs(String appInterfaceId) throws InvalidRequestException, AiravataClientException, AiravataSystemException, TException {
-        return null;
+        try {
+            appCatalog = AppCatalogFactory.getAppCatalog();
+            return appCatalog.getApplicationInterface().getApplicationOutputs(appInterfaceId);
+        } catch (AppCatalogException e) {
+            logger.error("Error while retrieving application outputs...", e);
+            AiravataSystemException exception = new AiravataSystemException();
+            exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
+            exception.setMessage("Error while retrieving application outputs. More info : " + e.getMessage());
+            throw exception;
+        }
     }
 
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationDeployment.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationDeployment.java b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationDeployment.java
index fc87f59..a0e4394 100644
--- a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationDeployment.java
+++ b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationDeployment.java
@@ -14,6 +14,13 @@ public interface ApplicationDeployment {
     String addApplicationDeployment (ApplicationDeploymentDescription deploymentDescription) throws AppCatalogException;
 
     /**
+     * This method will update application deployment
+     * @param deploymentId unique deployment id
+     * @param updatedDeployment updated deployment
+     */
+    void updateApplicationDeployment (String deploymentId, ApplicationDeploymentDescription updatedDeployment);
+
+    /**
      * This method will retrive application deployement
      * @param deploymentId unique deployment id
      * @return application deployment

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationInterface.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationInterface.java b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationInterface.java
index e8e18c6..70fbfe1 100644
--- a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationInterface.java
+++ b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ApplicationInterface.java
@@ -2,6 +2,8 @@ package org.airavata.appcatalog.cpi;
 
 import org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule;
 import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription;
+import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType;
+import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType;
 
 import java.util.List;
 import java.util.Map;
@@ -29,6 +31,22 @@ public interface ApplicationInterface {
     void addApplicationModuleMapping (String moduleId, String interfaceId) throws AppCatalogException;
 
     /**
+     * This method will update application module
+     * @param moduleId unique module Id
+     * @param updatedModule updated module
+     * @throws AppCatalogException
+     */
+    void updateApplicationModule (String moduleId, ApplicationModule updatedModule) throws AppCatalogException;
+
+    /**
+     * This method will update application interface
+     * @param interfaceId unique interface id
+     * @param updatedInterface updated app interface
+     * @throws AppCatalogException
+     */
+    void updateApplicationInterface (String interfaceId, ApplicationInterfaceDescription updatedInterface) throws AppCatalogException;
+
+    /**
      * This method will retrieve application module by given module id
      * @param moduleId unique module Id
      * @return application module object
@@ -60,13 +78,13 @@ public interface ApplicationInterface {
      * Remove application interface
      * @param interfaceId unique interface id
      */
-    void removeApplicationInterface (String interfaceId) throws AppCatalogException;
+    boolean removeApplicationInterface (String interfaceId) throws AppCatalogException;
 
     /**
      * Remove application module
      * @param moduleId unique module Id
      */
-    void removeApplicationModule (String moduleId) throws AppCatalogException;
+    boolean removeApplicationModule (String moduleId) throws AppCatalogException;
 
     /**
      * Check whether application interface exists
@@ -82,4 +100,20 @@ public interface ApplicationInterface {
      */
     boolean isApplicationModuleExists(String moduleId) throws AppCatalogException;
 
+    /**
+     * This method will retrieve application inputs for given application interface
+     * @param interfaceId application interface id
+     * @return list of inputs
+     * @throws AppCatalogException
+     */
+    List<InputDataObjectType> getApplicationInputs(String interfaceId) throws AppCatalogException;
+
+    /**
+     * This method will retrieve application outputs for given application interface
+     * @param interfaceId application interface id
+     * @return list of output
+     * @throws AppCatalogException
+     */
+    List<OutputDataObjectType> getApplicationOutputs(String interfaceId) throws AppCatalogException;
+
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
index 6e3c933..179e89a 100644
--- a/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
+++ b/modules/app-catalog/app-catalog-cpi/src/main/java/org/airavata/appcatalog/cpi/ComputeResource.java
@@ -14,6 +14,12 @@ public interface ComputeResource {
     String addComputeResource (ComputeResourceDescription description) throws AppCatalogException;
 
     /**
+     * This method will update compute resource
+     * @param computeResourceId unique compute resource id
+     * @param updatedComputeResource updated compute resource
+     */
+    void updateComputeResource (String computeResourceId, ComputeResourceDescription updatedComputeResource) throws AppCatalogException;
+    /**
      * This function will add a SSHJobSubmission to the database
      * @param sshJobSubmission sshJobSubmission object
      * @return unique submission ID generated by airavata

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogFactory.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogFactory.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogFactory.java
new file mode 100644
index 0000000..34e0976
--- /dev/null
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/AppCatalogFactory.java
@@ -0,0 +1,46 @@
+/*
+ *
+ * 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.aiaravata.application.catalog.data.impl;
+
+import org.airavata.appcatalog.cpi.AppCatalog;
+import org.airavata.appcatalog.cpi.AppCatalogException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class AppCatalogFactory {
+    private static AppCatalog appCatalog;
+
+    private static Logger logger = LoggerFactory.getLogger(AppCatalogFactory.class);
+
+    public static AppCatalog getAppCatalog() throws AppCatalogException{
+        try {
+            if (appCatalog == null){
+                appCatalog = new AppCatalogImpl();
+            }
+
+        }catch (Exception e){
+            logger.error("Unable to create app catalog instance", e);
+            throw new AppCatalogException(e);
+        }
+        return appCatalog;
+    }
+}

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
index 63ce10d..493cab8 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationDeploymentImpl.java
@@ -105,6 +105,11 @@ public class ApplicationDeploymentImpl implements ApplicationDeployment {
     }
 
     @Override
+    public void updateApplicationDeployment(String deploymentId, ApplicationDeploymentDescription updatedDeployment) {
+
+    }
+
+    @Override
     public ApplicationDeploymentDescription getApplicationDeployement(String deploymentId) throws AppCatalogException {
         try {
             AppDeploymentResource deploymentResource = new AppDeploymentResource();

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationInterfaceImpl.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationInterfaceImpl.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationInterfaceImpl.java
index 4bc63d3..7d75c6a 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationInterfaceImpl.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ApplicationInterfaceImpl.java
@@ -33,6 +33,7 @@ import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -132,6 +133,89 @@ public class ApplicationInterfaceImpl implements ApplicationInterface {
     }
 
     @Override
+    public void updateApplicationModule(String moduleId, ApplicationModule updatedModule) throws AppCatalogException {
+        try {
+            AppModuleResource moduleResource = new AppModuleResource();
+            AppModuleResource existingModule = (AppModuleResource)moduleResource.get(moduleId);
+            existingModule.setModuleName(updatedModule.getAppModuleName());
+            existingModule.setModuleDesc(updatedModule.getAppModuleDescription());
+            existingModule.setModuleVersion(updatedModule.getAppModuleVersion());
+            existingModule.save();
+        }catch (Exception e) {
+            logger.error("Error while updating application module...", e);
+            throw new AppCatalogException(e);
+        }
+    }
+
+    @Override
+    public void updateApplicationInterface(String interfaceId, ApplicationInterfaceDescription updatedInterface) throws AppCatalogException {
+        try {
+            AppInterfaceResource resource = new AppInterfaceResource();
+            AppInterfaceResource existingInterface = (AppInterfaceResource)resource.get(interfaceId);
+            existingInterface.setAppName(updatedInterface.getApplicationName());
+            existingInterface.save();
+
+            List<String> applicationModules = updatedInterface.getApplicationModules();
+            if (applicationModules != null && !applicationModules.isEmpty()){
+                for (String moduleId : applicationModules){
+                    AppModuleResource appModuleResource = new AppModuleResource();
+                    AppModuleMappingResource moduleMappingResource = new AppModuleMappingResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    ids.put(AbstractResource.AppModuleMappingConstants.MODULE_ID, moduleId);
+                    ids.put(AbstractResource.AppModuleMappingConstants.INTERFACE_ID, interfaceId);
+                    AppModuleMappingResource existingMapping = (AppModuleMappingResource)moduleMappingResource.get(ids);
+                    existingMapping.setInterfaceId(interfaceId);
+                    existingMapping.setModuleId(moduleId);
+                    existingMapping.setModuleResource((AppModuleResource)appModuleResource.get(moduleId));
+                    existingMapping.setAppInterfaceResource(existingInterface);
+                    existingMapping.save();
+                }
+            }
+
+            List<InputDataObjectType> applicationInputs = updatedInterface.getApplicationInputs();
+            if (applicationInputs != null && !applicationInputs.isEmpty()){
+                for (InputDataObjectType input : applicationInputs){
+                    ApplicationInputResource inputResource = new ApplicationInputResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    ids.put(AbstractResource.AppInputConstants.INTERFACE_ID, interfaceId);
+                    ids.put(AbstractResource.AppInputConstants.INPUT_KEY, input.getName());
+                    ApplicationInputResource existingResource = (ApplicationInputResource)inputResource.get(ids);
+                    existingResource.setAppInterfaceResource(existingInterface);
+                    existingResource.setInterfaceID(interfaceId);
+                    existingResource.setUserFriendlyDesc(input.getUserFriendlyDescription());
+                    existingResource.setInputKey(input.getName());
+                    existingResource.setInputVal(input.getValue());
+                    existingResource.setDataType(input.getType().toString());
+                    existingResource.setMetadata(input.getMetaData());
+                    existingResource.setStandareInput(input.isStandardInput());
+                    existingResource.setAppArgument(input.getApplicationArguement());
+                    existingResource.save();
+                }
+            }
+
+            List<OutputDataObjectType> applicationOutputs = updatedInterface.getApplicationOutputs();
+            if (applicationOutputs != null && !applicationOutputs.isEmpty()){
+                for (OutputDataObjectType output : applicationOutputs){
+                    ApplicationOutputResource outputResource = new ApplicationOutputResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    ids.put(AbstractResource.AppOutputConstants.INTERFACE_ID, interfaceId);
+                    ids.put(AbstractResource.AppOutputConstants.OUTPUT_KEY, output.getName());
+                    ApplicationOutputResource existingResource = (ApplicationOutputResource)outputResource.get(ids);
+                    existingResource.setInterfaceID(interfaceId);
+                    existingResource.setAppInterfaceResource(existingInterface);
+                    existingResource.setOutputKey(output.getName());
+                    existingResource.setOutputVal(output.getValue());
+                    existingResource.setDataType(output.getType().toString());
+                    existingResource.save();
+                }
+            }
+        }catch (Exception e) {
+            logger.error("Error while updating application interface...", e);
+            throw new AppCatalogException(e);
+        }
+    }
+
+    @Override
     public ApplicationModule getApplicationModule(String moduleId) throws AppCatalogException {
         try {
             AppModuleResource appModuleResource = new AppModuleResource();
@@ -198,10 +282,11 @@ public class ApplicationInterfaceImpl implements ApplicationInterface {
     }
 
     @Override
-    public void removeApplicationInterface(String interfaceId) throws AppCatalogException {
+    public boolean removeApplicationInterface(String interfaceId) throws AppCatalogException {
         try {
             AppInterfaceResource resource = new AppInterfaceResource();
             resource.remove(interfaceId);
+            return true;
         }catch (Exception e){
             logger.error("Error while removing app interface...", e);
             throw new AppCatalogException(e);
@@ -209,10 +294,11 @@ public class ApplicationInterfaceImpl implements ApplicationInterface {
     }
 
     @Override
-    public void removeApplicationModule(String moduleId) throws AppCatalogException {
+    public boolean removeApplicationModule(String moduleId) throws AppCatalogException {
         try {
             AppModuleResource resource = new AppModuleResource();
             resource.remove(moduleId);
+            return true;
         }catch (Exception e){
             logger.error("Error while removing app module...", e);
             throw new AppCatalogException(e);
@@ -240,4 +326,28 @@ public class ApplicationInterfaceImpl implements ApplicationInterface {
             throw new AppCatalogException(e);
         }
     }
+
+    @Override
+    public List<InputDataObjectType> getApplicationInputs(String interfaceId) throws AppCatalogException {
+        try {
+            ApplicationInputResource resource = new ApplicationInputResource();
+            List<Resource> resources = resource.get(AbstractResource.AppInputConstants.INTERFACE_ID, interfaceId);
+            return AppCatalogThriftConversion.getAppInputs(resources);
+        }catch (Exception e){
+            logger.error("Error while retrieving app inputs...", e);
+            throw new AppCatalogException(e);
+        }
+    }
+
+    @Override
+    public List<OutputDataObjectType> getApplicationOutputs(String interfaceId) throws AppCatalogException {
+        try {
+            ApplicationOutputResource resource = new ApplicationOutputResource();
+            List<Resource> resources = resource.get(AbstractResource.AppOutputConstants.INTERFACE_ID, interfaceId);
+            return AppCatalogThriftConversion.getAppOutputs(resources);
+        }catch (Exception e){
+            logger.error("Error while retrieving app outputs...", e);
+            throw new AppCatalogException(e);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/a2a27146/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
----------------------------------------------------------------------
diff --git a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
index 03c61d0..a16028b 100644
--- a/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
+++ b/modules/app-catalog/app-catalog-data/src/main/java/org/apache/aiaravata/application/catalog/data/impl/ComputeResourceImpl.java
@@ -30,6 +30,7 @@ import org.apache.airavata.model.computehost.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -103,6 +104,84 @@ public class ComputeResourceImpl implements ComputeResource {
     }
 
     @Override
+    public void updateComputeResource(String computeResourceId, ComputeResourceDescription updatedComputeResource) throws AppCatalogException{
+        try {
+            ComputeHostResource computeHostResource = new ComputeHostResource();
+            ComputeHostResource existingComputeResouce = (ComputeHostResource)computeHostResource.get(computeResourceId);
+            existingComputeResouce.setHostName(updatedComputeResource.getHostName());
+            existingComputeResouce.setPreferredJobSubmissionProtocol(updatedComputeResource.getPreferredJobSubmissionProtocol());
+            existingComputeResouce.setDescription(updatedComputeResource.getResourceDescription());
+            existingComputeResouce.save();
+
+            Set<String> hostAliases = updatedComputeResource.getHostAliases();
+            if (hostAliases != null && !hostAliases.isEmpty()) {
+                for (String alias : hostAliases) {
+                    HostAliasResource aliasResource = new HostAliasResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    ids.put(AbstractResource.HostAliasConstants.RESOURCE_ID, computeResourceId);
+                    ids.put(AbstractResource.HostAliasConstants.ALIAS, alias);
+                    HostAliasResource existingAlias = (HostAliasResource)aliasResource.get(ids);
+                    existingAlias.setComputeHostResource(existingComputeResouce);
+                    existingAlias.setAlias(alias);
+                    existingAlias.save();
+                }
+            }
+
+            Set<String> ipAddresses = updatedComputeResource.getIpAddresses();
+            if (ipAddresses != null && !ipAddresses.isEmpty()) {
+                for (String ipAddress : ipAddresses) {
+                    HostIPAddressResource ipAddressResource = new HostIPAddressResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    ids.put(AbstractResource.HostIPAddressConstants.RESOURCE_ID, computeResourceId);
+                    ids.put(AbstractResource.HostIPAddressConstants.IP_ADDRESS, ipAddress);
+                    HostIPAddressResource existingIpAddress = (HostIPAddressResource)ipAddressResource.get(ids);
+                    existingIpAddress.setComputeHostResource(existingComputeResouce);
+                    existingIpAddress.setResourceID(computeResourceId);
+                    existingIpAddress.setIpaddress(ipAddress);
+                    existingIpAddress.save();
+                }
+            }
+            Map<String, JobSubmissionProtocol> jobSubmissionProtocols = updatedComputeResource.getJobSubmissionProtocols();
+            if (jobSubmissionProtocols != null && !jobSubmissionProtocols.isEmpty()) {
+                for (String submissionId : jobSubmissionProtocols.keySet()) {
+                    JobSubmissionProtocol jobSubmissionProtocol = jobSubmissionProtocols.get(submissionId);
+                    JobSubmissionProtocolResource resource = new JobSubmissionProtocolResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    ids.put(AbstractResource.JobSubmissionProtocolConstants.RESOURCE_ID, computeResourceId);
+                    ids.put(AbstractResource.JobSubmissionProtocolConstants.SUBMISSION_ID, submissionId);
+                    ids.put(AbstractResource.JobSubmissionProtocolConstants.JOB_TYPE, jobSubmissionProtocol.toString());
+                    JobSubmissionProtocolResource existingJobProtocol = (JobSubmissionProtocolResource)resource.get(ids);
+                    existingJobProtocol.setResourceID(computeResourceId);
+                    existingJobProtocol.setComputeHostResource(existingComputeResouce);
+                    existingJobProtocol.setSubmissionID(submissionId);
+                    existingJobProtocol.setJobType(jobSubmissionProtocol.toString());
+                    existingJobProtocol.save();
+                }
+            }
+            Map<String, DataMovementProtocol> movementProtocols = updatedComputeResource.getDataMovementProtocols();
+            if (movementProtocols != null && !movementProtocols.isEmpty()) {
+                for (String dataMoveId : movementProtocols.keySet()) {
+                    DataMovementProtocol dataMovementProtocol = movementProtocols.get(dataMoveId);
+                    DataMovementProtocolResource resource = new DataMovementProtocolResource();
+                    Map<String, String> ids = new HashMap<String, String>();
+                    ids.put(AbstractResource.DataMoveProtocolConstants.RESOURCE_ID, computeResourceId);
+                    ids.put(AbstractResource.DataMoveProtocolConstants.DATA_MOVE_ID, dataMoveId);
+                    ids.put(AbstractResource.DataMoveProtocolConstants.JOB_TYPE, dataMovementProtocol.toString());
+                    DataMovementProtocolResource existingDMP = (DataMovementProtocolResource)resource.get(ids);
+                    existingDMP.setResourceID(computeResourceId);
+                    existingDMP.setComputeHostResource(existingComputeResouce);
+                    existingDMP.setDataMoveID(dataMoveId);
+                    existingDMP.setDataMoveType(dataMovementProtocol.toString());
+                    existingDMP.save();
+                }
+            }
+        } catch (Exception e) {
+            logger.error("Error while updating compute resource...", e);
+            throw new AppCatalogException(e);
+        } 
+    }
+
+    @Override
     public String addSSHJobSubmission(String computeResourceId, SSHJobSubmission sshJobSubmission) throws AppCatalogException {
         try {
             SSHSubmissionResource resource = new SSHSubmissionResource();