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 <[email protected]> Authored: Tue Jul 1 11:47:50 2014 -0400 Committer: Chathuri Wimalasena <[email protected]> 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();
