/* * Copyright 2013 Cloud4SOA, www.cloud4soa.eu * * Licensed 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. */ /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package eu.cloud4soa.soa; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.AbstractMap.SimpleEntry; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.Status; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import eu.cloud4soa.api.datamodel.core.ApplicationInstance; import eu.cloud4soa.api.datamodel.core.PaaSInstance; import eu.cloud4soa.api.datamodel.core.SlaContract; import eu.cloud4soa.api.datamodel.core.utilBeans.DBStorageComponentInstance; import eu.cloud4soa.api.datamodel.core.utilBeans.SoftwareComponentInstance; import eu.cloud4soa.api.datamodel.core.utilBeans.StatusType; import eu.cloud4soa.api.datamodel.governance.DatabaseInfo; import eu.cloud4soa.api.datamodel.governance.DeployApplicationParameters; import eu.cloud4soa.api.datamodel.governance.SlaContractValidity; import eu.cloud4soa.api.datamodel.semantic.inf.DBDeployment; import eu.cloud4soa.api.datamodel.semantic.inf.DBStorageComponent; import eu.cloud4soa.api.datamodel.soa.ApplicationDeploymentParameters; import eu.cloud4soa.api.datamodel.soa.GitRepoInfo; import eu.cloud4soa.api.datamodel.soa.StringList; import eu.cloud4soa.api.datamodel.soa.UserPaaSCredentials; import eu.cloud4soa.api.governance.ExecutionManagementServiceModule; import eu.cloud4soa.api.governance.SLAModule; import eu.cloud4soa.api.repository.ApplicationProfilesRepository; import eu.cloud4soa.api.repository.PaaSOfferingProfilesRepository; import eu.cloud4soa.api.util.exception.adapter.Cloud4SoaException; import eu.cloud4soa.api.util.exception.repository.RepositoryException; import eu.cloud4soa.api.util.exception.soa.SOAException; import eu.cloud4soa.relational.datamodel.GitProxy; import eu.cloud4soa.relational.datamodel.GitRepo; import eu.cloud4soa.relational.datamodel.PubKey; import eu.cloud4soa.soa.git.GitServices; /** * * @author vincenzo * C4S Frontend required methods added by Yosu */ @Transactional public class ApplicationDeployment implements eu.cloud4soa.api.soa.ApplicationDeployment{ final Logger logger = LoggerFactory.getLogger(ApplicationDeployment.class); private SLAModule slaModule; private ApplicationProfilesRepository applicationProfilesRepository; private PaaSOfferingProfilesRepository paaSOfferingProfilesRepository; private ExecutionManagementServiceModule executionManagementServiceModule; private UserManagementAndSecurityModule userManagementAndSecurityModule; @Autowired private GitServices gitServices; /** * @param slaModule the slaModule to set */ public void setSlaModule(SLAModule slaModule) { this.slaModule = slaModule; } /** * @param applicationProfilesRepository the applicationProfilesRepository to set */ public void setApplicationProfilesRepository(ApplicationProfilesRepository applicationProfilesRepository) { this.applicationProfilesRepository = applicationProfilesRepository; } /** * @param paaSOfferingProfilesRepository the paaSOfferingProfilesRepository to set */ public void setPaaSOfferingProfilesRepository(PaaSOfferingProfilesRepository paaSOfferingProfilesRepository) { this.paaSOfferingProfilesRepository = paaSOfferingProfilesRepository; } /** * @param executionManagementServiceModule the executionManagementServiceModule to set */ public void setExecutionManagementServiceModule(ExecutionManagementServiceModule executionManagementServiceModule) { this.executionManagementServiceModule = executionManagementServiceModule; } public void setUserManagementAndSecurityModule(UserManagementAndSecurityModule userManagementAndSecurityModule) { this.userManagementAndSecurityModule = userManagementAndSecurityModule; } /* * To be removed when UI interface will adopt method with slaTemplateId * */ @Deprecated @Override public Response deployApplication( String applicationInstanceUriId, String paaSInstanceUriId, InputStream archiveFileStream) throws SOAException { String id = null; /* try { slaModule.startNegotiation( applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId), paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId) ).getId().toString(); } catch(Exception e) { } */ return this.deployApplication(applicationInstanceUriId, paaSInstanceUriId, id, archiveFileStream); } @Deprecated @Override public Response deployApplication( String applicationInstanceUriId, String paaSInstanceUriId, String slaTemplateId, InputStream archiveFileStream ) throws SOAException { ApplicationDeploymentParameters parameters; parameters = new ApplicationDeploymentParameters(); parameters.setApplicationInstanceUriId(applicationInstanceUriId); parameters.setPaaSInstanceUriId(paaSInstanceUriId); parameters.setArchiveFileStream(archiveFileStream); parameters.setSlaTemplateId(slaTemplateId); parameters.setPenalties( null ); return this.deployApplication( parameters ); } @Override public Response deployApplication( ApplicationDeploymentParameters parameters ) throws SOAException { String applicationInstanceUriId; String paaSInstanceUriId; InputStream archiveFileStream; String slaTemplateId; ApplicationInstance applicationInstance; PaaSInstance paaSInstance; File applicationArchiveFile; String deployedAppURL; String responseMessage; Response.Status responseStatus; DeployApplicationParameters emsDeploymentParameters; applicationInstanceUriId = parameters.getApplicationInstanceUriId(); paaSInstanceUriId = parameters.getPaaSInstanceUriId(); archiveFileStream = parameters.getArchiveFileStream(); slaTemplateId = parameters.getSlaTemplateId(); logger.debug( "---- DEPLOYING WITH SLA TEMPLATE ID ---"+slaTemplateId); logger.debug( "received applicationInstanceUriId: "+ applicationInstanceUriId + ", paaSInstanceUriId: " + paaSInstanceUriId ); if(slaTemplateId==null ||slaTemplateId.isEmpty()||slaTemplateId.equalsIgnoreCase("")){ try { slaTemplateId= slaModule.startNegotiation( applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId), paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId) ).getId().toString(); logger.info( "---- Negotianiated again got SLA TEMPLATE ID ---"+slaTemplateId); } catch(Exception e) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage()); } } try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug( "retrieved applicationInstance: " + applicationInstance ); logger.debug( "retrieved application name: " + applicationInstance.getTitle() ); logger.debug( "retrieved applicationInstance: " + applicationInstance.getArchiveFileName() ); try { paaSInstance = paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug( "retrived paaSInstance: "+paaSInstance); List<SoftwareComponentInstance> softwareComponents = applicationInstance.getSoftwareComponents(); for (SoftwareComponentInstance softwareComponentInstance : softwareComponents) { if(softwareComponentInstance instanceof DBStorageComponentInstance) { DBStorageComponentInstance dbStorageComponentInstance = (DBStorageComponentInstance) softwareComponentInstance; //check if there is a db not created yet if(dbStorageComponentInstance.getDeploymentLocationUriId()==null){ logger.debug("found DBStorageComponent having dbStorageComponentUriId: " + ((DBStorageComponentInstance)softwareComponentInstance).getUriId() + " that is not created yet"); return Response.status(Response.Status.PRECONDITION_FAILED).entity("The application dbs need to be created first.").type(MediaType.TEXT_PLAIN).build(); } } } applicationArchiveFile = null; try { applicationArchiveFile = this.getApplicationArchiveFile( applicationInstance, archiveFileStream ); // skip file size and hash checks if (false) { this.checkArchiveSizeAndDigest(applicationArchiveFile, applicationInstance); } this.checkSlaValidity(applicationInstance, paaSInstance); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), paaSInstanceUriId); emsDeploymentParameters = new DeployApplicationParameters(); emsDeploymentParameters.setApplicationInstance(applicationInstance); emsDeploymentParameters.setPaaSInstance(paaSInstance); emsDeploymentParameters.setApplicationArchive(applicationArchiveFile); emsDeploymentParameters.setPublicKey( userCredentialsForPaaS.getPublicKey() ); emsDeploymentParameters.setSecretKey(userCredentialsForPaaS.getSecretKey() ); emsDeploymentParameters.setAccountName( userCredentialsForPaaS.getAccountName() ); emsDeploymentParameters.setSlaTemplateID(slaTemplateId); emsDeploymentParameters.setPenalties( parameters.getPenalties() ); // prepare parameters logger.debug( "Going to deploy application " + applicationInstanceUriId + " on PaaS " + paaSInstanceUriId ); // deployedAppURL = executionManagementServiceModule.deployApplication( applicationArchiveFile, applicationInstance, paaSInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), userCredentialsForPaaS.getAccountName(), slaTemplateId); logger.debug("emsDeploymentParameters.setSlaTemplateID"+emsDeploymentParameters.getSlaTemplateID()); deployedAppURL = executionManagementServiceModule.deployApplication( emsDeploymentParameters ); logger.debug( "Deploy successfull; url of the deployed application: " + deployedAppURL); this.updateRepository(applicationInstance, paaSInstance, deployedAppURL); responseStatus = Response.Status.ACCEPTED; responseMessage = "Application " + applicationInstance.getTitle() + " successfully deployed on PaaS " + paaSInstance.getProviderTitle() + "; URL: " + deployedAppURL; } catch (Cloud4SoaException ex) { logger.error("Failed to process attachments", ex); responseStatus = Response.Status.INTERNAL_SERVER_ERROR; responseMessage = ex.getError(); throw new SOAException(responseStatus, responseMessage); } catch (Exception ex) { logger.error("Failed to process attachments", ex); responseStatus = Response.Status.BAD_REQUEST; responseMessage = "Failed to deploy: " + ex.getClass().getName() + " - " + ex.getMessage() ; throw new SOAException(responseStatus, responseMessage); } applicationArchiveFile.delete(); return Response.status( responseStatus ).entity( responseMessage ).type(MediaType.TEXT_PLAIN).build(); } //ApplicationInstance applicationInstance, StartStopCommand startStopCommand @Override public Response startStopApplication(String applicationInstanceUriId, String startStopCommand) throws SOAException { logger.debug("received applicationInstanceUriId: "+applicationInstanceUriId); logger.debug("received startStopCommand: "+startStopCommand); logger.debug("call applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId)"); logger.debug("applicationProfilesRepository instance:"+applicationProfilesRepository); ApplicationInstance applicationInstance; try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("executionManagementServiceModule.startStopApplication(applicationInstance, startStopCommandJsonObj)"); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), applicationInstance.getPaaSOfferingDeploymentUriId()); try { executionManagementServiceModule.startStopApplication(applicationInstance, startStopCommand, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), userCredentialsForPaaS.getAccountName()); } catch (Cloud4SoaException ex) { logger.error("Failed to process attachments", ex); Status responseStatus = Response.Status.INTERNAL_SERVER_ERROR; String responseMessage = ex.getError(); throw new SOAException(responseStatus, responseMessage); } //Update the Status of the ontology... if(startStopCommand.equals("stop")) applicationInstance.setStatus(StatusType.Stopped); else if(startStopCommand.equals("start")) applicationInstance.setStatus(StatusType.Deployed); try { applicationProfilesRepository.updateApplicationInstance(applicationInstance); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } return Response.status(Response.Status.ACCEPTED).entity("StartStopCommand processed successfully.").type(MediaType.TEXT_PLAIN).build(); } @Override public List<ApplicationInstance> retrieveAllDeployedApplicationProfiles( String userInstanceUriId) throws SOAException{ List<ApplicationInstance> retrievedDeployedApplicationInstances = new ArrayList<ApplicationInstance>(); logger.debug("received userInstanceUriId: "+userInstanceUriId); logger.debug("call applicationProfilesRepository.retrieveAllApplicationProfile(userInstanceUriId)"); List<ApplicationInstance> applicationInstances; try { applicationInstances = applicationProfilesRepository.retrieveAllApplicationProfile(userInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("filtering applicationInstances: "+applicationInstances); for (ApplicationInstance applicationInstance : applicationInstances) { if(applicationInstance.getStatus()!=null){ // if(applicationInstance.getStatus().equals(StatusType.Deployed) || applicationInstance.getStatus().equals(StatusType.Stopped)){ retrievedDeployedApplicationInstances.add(applicationInstance); logger.debug("found deployed applicationInstance: "+applicationInstance); // } } } logger.debug("retrievedDeployedApplicationInstances: "+retrievedDeployedApplicationInstances); return retrievedDeployedApplicationInstances; } @Override public Response removeApplication(String applicationInstanceUriId) throws SOAException { logger.debug("received applicationInstanceUriId: "+applicationInstanceUriId); logger.debug("call applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId)"); ApplicationInstance applicationInstance; try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("executionManagementServiceModule.startStopApplication(applicationInstance, startStopCommandJsonObj)"); //check if the application is deployed if(applicationInstance.getPaaSOfferingDeploymentName()==null){ Status responseStatus = Response.Status.BAD_REQUEST; String responseMessage = "[Application " + applicationInstanceUriId + "] The selected application is not deployed yet." ; logger.error(responseMessage); throw new SOAException(responseStatus, responseMessage); // return Response.status(Response.Status.BAD_REQUEST).entity("The selected application is not deployed yet.").type(MediaType.TEXT_PLAIN).build(); } UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), applicationInstance.getPaaSOfferingDeploymentUriId()); try { executionManagementServiceModule.unDeployApplication(applicationInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), userCredentialsForPaaS.getAccountName()); } catch (Cloud4SoaException ex) { logger.error("Failed to process attachments", ex); Status responseStatus = Response.Status.INTERNAL_SERVER_ERROR; String responseMessage = ex.getError(); throw new SOAException(responseStatus, responseMessage); } //Update the Status of the ontology... applicationInstance.getApplication().setStatus(null); applicationInstance.getApplication().setDeployment(null); try { // applicationInstance.setPaaSOfferingDeployment(null); // applicationInstance.setDeploymentIP(null); applicationProfilesRepository.updateApplicationInstance(applicationInstance); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } return Response.status(Response.Status.ACCEPTED).entity("RemoveApplication processed successfully.").type(MediaType.TEXT_PLAIN).build(); } @Override public Response createDatabase(String applicationInstanceUriId, String paaSInstanceUriId, String dbStorageComponentUriId) throws SOAException { logger.info("received applicationInstanceUriId: " + applicationInstanceUriId); logger.info("received paaSInstanceUriId: " + paaSInstanceUriId); logger.info("received dbStorageComponentUriId: " + dbStorageComponentUriId); logger.info("call applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId)"); ApplicationInstance applicationInstance; try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrieved applicationInstance: " + applicationInstance); PaaSInstance paaSInstance; try { paaSInstance = paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrived paaSInstance: " + paaSInstance); //check if the application is deployed if( !paaSInstanceUriId.equalsIgnoreCase("Heroku") && applicationInstance.getPaaSOfferingDeploymentName()!=null){ return Response.status(Response.Status.BAD_REQUEST).entity("The selected application is already deployed.").type(MediaType.TEXT_PLAIN).build(); } String dbUrl = null; String dbName = null; String dbUser = null; String dbPassword = null; String dbType = null; List<SoftwareComponentInstance> softwareComponents = applicationInstance.getSoftwareComponents(); for (SoftwareComponentInstance softwareComponentInstance : softwareComponents) { String uriId = softwareComponentInstance.getUriId(); if(softwareComponentInstance instanceof DBStorageComponentInstance && uriId.equals(dbStorageComponentUriId) ) { logger.debug("found DBStorageComponent having dbStorageComponentUriId: " + dbStorageComponentUriId); DBStorageComponentInstance dbStorageComponentInstance = (DBStorageComponentInstance) softwareComponentInstance; //check if the db is already created if(dbStorageComponentInstance.getDeploymentLocationUriId()!=null){ return Response.status(Response.Status.BAD_REQUEST).entity("The selected db is already created.").type(MediaType.TEXT_PLAIN).build(); } dbName = dbStorageComponentInstance.getDbname(); dbUser = dbStorageComponentInstance.getDbuser(); dbPassword = dbStorageComponentInstance.getDbpassword(); dbType = dbStorageComponentInstance.getRelatedhwcategoryInstance().getTitle(); logger.debug("executionManagementServiceModule.createDatabase"); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), paaSInstance.getUriId()); try { DatabaseInfo dbInfo = executionManagementServiceModule.createDatabase(applicationInstance, paaSInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), userCredentialsForPaaS.getAccountName(), dbName, dbUser, dbPassword, dbType); //FIXME Encoding DatabaseInfo into the dbURL to be parsed by GUI dbUrl= "dbUrl=" + dbInfo.getDatabaseUrl() + ", host=" + dbInfo.getHost() + ", port=" + dbInfo.getPort() + ", dbName=" + dbInfo.getDatabaseName() + ", dbUser=" + dbInfo.getUserName(); } catch (Cloud4SoaException ex) { logger.error("Failed to process attachments", ex); Status responseStatus = Response.Status.INTERNAL_SERVER_ERROR; String responseMessage = ex.getError(); throw new SOAException(responseStatus, responseMessage); } logger.debug("created DB with url: " + dbUrl); DBDeployment dbDeployment = new DBDeployment(); dbDeployment.setDeploymentLocation(paaSInstance.getPaaSOffering()); ((DBStorageComponent)dbStorageComponentInstance.getSoftwareComponent()).setDBdeployment(dbDeployment); dbStorageComponentInstance.setUrl(dbUrl); break; } } // hardwareComponent.setRelatedhwcategory(storageResource); // hardwareComponentInstance = new HardwareComponentInstance(hardwareComponent); // hardwareComponentInstance.setRelatedhwcategoryInstance(new StorageResourceInstance(storageResource)); //Update the Status of the ontology... try { applicationProfilesRepository.updateApplicationInstance(applicationInstance); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } Response.Status responseStatus = Response.Status.CREATED; return Response.status( responseStatus ).entity( dbUrl ).type(MediaType.TEXT_PLAIN).build(); } @Override public Response initializeDatabase(String applicationInstanceUriId, String paaSInstanceUriId, String dbStorageComponentUriId, InputStream is) throws SOAException{ logger.debug("received applicationInstanceUriId: " + applicationInstanceUriId); logger.debug("received paaSInstanceUriId: " + paaSInstanceUriId); logger.debug("received dbStorageComponentUriId: " + dbStorageComponentUriId); logger.debug("call applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId)"); ApplicationInstance applicationInstance; try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrieved applicationInstance: " + applicationInstance); PaaSInstance paaSInstance; try { paaSInstance = paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrived paaSInstance: " + paaSInstance); //check if the application is deployed (The application should be stopped or not deployed during the db initialization) if(applicationInstance.getPaaSOfferingDeploymentName()!=null){ if(applicationInstance.getStatus().compareTo(StatusType.Stopped)!=0) return Response.status(Response.Status.BAD_REQUEST).entity("The selected application is deployed and running.").type(MediaType.TEXT_PLAIN).build(); } String dbUrl = null; String dbName = null; String dbUser = null; String dbPassword = null; String dbType = null; List<SoftwareComponentInstance> softwareComponents = applicationInstance.getSoftwareComponents(); for (SoftwareComponentInstance softwareComponentInstance : softwareComponents) { String uriId = softwareComponentInstance.getUriId(); if(softwareComponentInstance instanceof DBStorageComponentInstance && uriId.equals(dbStorageComponentUriId) ) { logger.debug("found DBStorageComponent having dbStorageComponentUriId: " + dbStorageComponentUriId); DBStorageComponentInstance dbStorageComponentInstance = (DBStorageComponentInstance) softwareComponentInstance; //check if the db is already created if(dbStorageComponentInstance.getDeploymentLocationUriId()==null){ return Response.status(Response.Status.BAD_REQUEST).entity("The selected db has to be created first.").type(MediaType.TEXT_PLAIN).build(); } dbName = dbStorageComponentInstance.getDbname(); dbUser = dbStorageComponentInstance.getDbuser(); dbPassword = dbStorageComponentInstance.getDbpassword(); dbType = dbStorageComponentInstance.getRelatedhwcategoryInstance().getTitle(); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), paaSInstance.getUriId()); File dumpFile = getTempFile(dbName+"_"+"dump", ".sql", is); try { executionManagementServiceModule.restoreDataBase(applicationInstance, paaSInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), dbName, dbUser, dbPassword, dbType, dumpFile.getAbsolutePath()); } catch (Cloud4SoaException ex) { String error = "Impossible to initialize database: " + dbName + " cause: " + ex.getMessage(); logger.error(error); applicationInstance.setApplicationStatus(new eu.cloud4soa.api.datamodel.semantic.app.Error()); throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, "Error in initializing the DB: " + dbName); } } } Response.Status responseStatus = Response.Status.OK; return Response.status( responseStatus ).entity( "database: " + dbName + "initialized succesfully" ).type(MediaType.TEXT_PLAIN).build(); } @Override public InputStream dumpDatabase(String applicationInstanceUriId, String paaSInstanceUriId, String dbStorageComponentUriId) throws SOAException { InputStream inputStream = null; logger.debug("received applicationInstanceUriId: " + applicationInstanceUriId); logger.debug("received paaSInstanceUriId: " + paaSInstanceUriId); logger.debug("received dbStorageComponentUriId: " + dbStorageComponentUriId); logger.debug("call applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId)"); ApplicationInstance applicationInstance; try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrieved applicationInstance: " + applicationInstance); PaaSInstance paaSInstance; try { paaSInstance = paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrived paaSInstance: " + paaSInstance); //check if the application is deployed (The application should be stopped or not deployed during the db initialization) if(applicationInstance.getPaaSOfferingDeploymentName()!=null){ if(applicationInstance.getStatus().compareTo(StatusType.Stopped)!=0) throw new SOAException(Response.Status.BAD_REQUEST, "The selected application is deployed and running."); } String dbUrl = null; String dbName = null; String dbUser = null; String dbPassword = null; String dbType = null; List<SoftwareComponentInstance> softwareComponents = applicationInstance.getSoftwareComponents(); for (SoftwareComponentInstance softwareComponentInstance : softwareComponents) { String uriId = softwareComponentInstance.getUriId(); if(softwareComponentInstance instanceof DBStorageComponentInstance && uriId.equals(dbStorageComponentUriId) ) { logger.debug("found DBStorageComponent having dbStorageComponentUriId: " + dbStorageComponentUriId); DBStorageComponentInstance dbStorageComponentInstance = (DBStorageComponentInstance) softwareComponentInstance; //check if the db is already created if(dbStorageComponentInstance.getDeploymentLocationUriId()==null){ throw new SOAException(Response.Status.BAD_REQUEST, "The selected db has to be created first."); } dbName = dbStorageComponentInstance.getDbname(); dbUser = dbStorageComponentInstance.getDbuser(); dbPassword = dbStorageComponentInstance.getDbpassword(); dbType = dbStorageComponentInstance.getRelatedhwcategoryInstance().getTitle(); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), paaSInstance.getUriId()); File dumpFile; try { dumpFile = File.createTempFile(dbName+"_"+"dump", ".sql"); } catch (IOException ex) { String error = "Impossible to dump database: " + dbName + " since the temp file cannot be created - cause: " + ex.getMessage(); logger.error(error); throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, "Error in dumping the DB: " + dbName); } try { executionManagementServiceModule.downloadDataBase(applicationInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), dbName, dbUser, dbPassword, dbType, dumpFile.getAbsolutePath()); inputStream = FileUtils.openInputStream(dumpFile); } catch (IOException ex) { String error = "Impossible to dump database: " + dbName + " since the temp file cannot be read - cause: " + ex.getMessage(); logger.error(error); throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, "Error in dumping the DB: " + dbName); } catch (Cloud4SoaException ex) { String error = "Impossible to dump database: " + dbName + " cause: " + ex.getMessage(); logger.error(error); throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, "Error in dumping the DB: " + dbName); } } } return inputStream; } private File getApplicationArchiveFile( ApplicationInstance appInstance, InputStream is ) throws SOAException { String fileName; String fileExtension; File file; file = null; fileName = appInstance.getArchiveFileName(); fileExtension = appInstance.getArchiveExtensionName(); logger.debug( "applicationInstance fileName: " + fileName + "." + fileExtension); if ( fileName==null) { fileName="unspecifiedArchiveName"; } if ( fileExtension==null ) { fileExtension="war"; } file = getTempFile( fileName, fileExtension, is ); return file; } private ApplicationInstance getApplicationInstance(String applicationInstanceUriId) throws SOAException { ApplicationInstance applicationInstance; try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } catch (IllegalArgumentException ex) { throw new SOAException(Response.Status.BAD_REQUEST, "Wrong parameter applicationInstanceUriId: "+ex.getMessage()); } logger.debug( "retrieved applicationInstance: " + applicationInstance ); return applicationInstance; } private PaaSInstance getPaaSInstance(String paaSInstanceUriId) throws SOAException { PaaSInstance paaSInstance = null; try { paaSInstance = paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } catch (IllegalArgumentException ex) { throw new SOAException(Response.Status.BAD_REQUEST, "Wrong parameter paaSInstanceUriId: "+ex.getMessage()); } logger.debug("retrived paaSInstance: " + paaSInstance); return paaSInstance; } private File getTempFile( String fileName, String fileExtension, InputStream is ) throws SOAException { File file; OutputStream out; file = null; try { file = File.createTempFile(fileName, fileExtension); out = new FileOutputStream(file); IOUtils.copy(is, out); out.close(); is.close(); logger.debug("File is created: " + file.getAbsolutePath()); } catch (FileNotFoundException ex) { logger.debug("Failed to process attachments", ex); throw new SOAException( Response.Status.BAD_REQUEST, "File " + fileName + "." + fileExtension + " not found." ); } catch (IOException ex) { logger.debug("Failed to process attachments", ex); throw new SOAException(Response.Status.BAD_REQUEST, "Failed to process attachments. Reason : " + ex.getMessage()); } return file; } private void checkArchiveSizeAndDigest( File fileToCheck, ApplicationInstance appInstance) throws SOAException { if ( fileToCheck.length() != appInstance.getSizeQuantity() ) { fileToCheck.delete(); throw new SOAException(Response.Status.BAD_REQUEST, "Failed to process attachments. Reason : different file size" + fileToCheck.length() + " != " + appInstance.getSizeQuantity() ); } if ( this.getFileDigest(fileToCheck).equals( appInstance.getDigest() ) ) { fileToCheck.delete(); throw new SOAException( Response.Status.BAD_REQUEST, "Failed to process attachments. Reason : different file digest" + this.getFileDigest(fileToCheck) + " != " + appInstance.getDigest() ); } } private String getFileDigest( File file) throws SOAException { InputStream fileStream; String digest; try { fileStream = new FileInputStream( file ); digest = DigestUtils.sha256Hex( fileStream ); } catch (IOException ie) { throw new SOAException(Response.Status.BAD_REQUEST, "Failed to process attachments. Reason : " + ie.getMessage()); } return digest; } protected void checkSlaValidity( ApplicationInstance appInstance, PaaSInstance paasInstance) throws SOAException { SlaContractValidity slaContractValidity; boolean isSlaValid; slaContractValidity = slaModule.checkContractValidity( appInstance, paasInstance); logger.debug("obtained SlaContractValidity: "+slaContractValidity); //check slaContractValidity: at the moment, always valid isSlaValid = true; if ( !isSlaValid ) { throw new SOAException( Response.Status.BAD_REQUEST, "SLA contract not valid"); } } protected void updateRepository( ApplicationInstance appInstance, PaaSInstance paasInstance, String deployedAppURL) throws SOAException { logger.debug("Going to update the repository after the deploy"); appInstance.setStatus( StatusType.Deployed ); appInstance.setPaaSOfferingDeployment(paasInstance); appInstance.setDeploymentIP(deployedAppURL); try { applicationProfilesRepository.updateApplicationInstance(appInstance); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } } private void ifConditionThrowsException(boolean condition, Response.Status responseStatus, String errorMessage) throws SOAException{ if(condition){ logger.debug(errorMessage); throw new SOAException(responseStatus, errorMessage); } } @Override public GitRepoInfo initializeGitProxy(String userInstanceUriId, String paaSInstanceUriId, String applicationInstanceUriId ) throws SOAException { GitRepoInfo gitRepoInfo = null; boolean exists = false; String message = "Received the request for creating a new app repo on the provider: " + paaSInstanceUriId + " for the application: " + applicationInstanceUriId; logger.info( message ); ApplicationInstance applicationInstance = getApplicationInstance(applicationInstanceUriId); PaaSInstance paaSInstance = getPaaSInstance(paaSInstanceUriId); try{ gitRepoInfo = getGitRepoInfos(userInstanceUriId, paaSInstanceUriId, applicationInstanceUriId); exists = true; } catch (SOAException ex){ //createGitRepo is the connection to ems gitRepoInfo = createGitRepo(userInstanceUriId, paaSInstance, applicationInstance); } String repositoryName = gitRepoInfo.getRepositoryName(); String gitUrl = gitRepoInfo.getUrl(); String userId = gitRepoInfo.getUserId(); String appUrl = gitRepoInfo.getApplicationUrl(); logger.info("Git repository created for application: " + applicationInstanceUriId +" on the provider: " + paaSInstanceUriId +" - application Url: "+appUrl); if(!exists) registerGitRepository(applicationInstanceUriId, userInstanceUriId, paaSInstanceUriId, repositoryName, gitUrl); String proxyName = "proxy" + userId + applicationInstance.getTitle().replaceAll(" ", "").trim().toLowerCase()+paaSInstanceUriId; if(!exists) registerGitProxy(userInstanceUriId, proxyName); //Obtain gitId and && proxyId required by the binding function String gitRepoId = gitServices.getRepoId(repositoryName, gitUrl); String proxyId = gitServices.getProxyId(proxyName); bindProxyToGit(userInstanceUriId, proxyId, gitRepoId); //Call deployment for CloudControl then store to database and start monitoring /* String message2 = "Updating the deployme(if CC) and storing into relational db->provider: " + paaSInstance.getUriId() + " for the application: " + applicationInstance.getUriId(); logger.info( message2 ); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), paaSInstance.getUriId()); logger.debug( "Going to deploy through git the application " + applicationInstance.getUriId() + " on PaaS " + paaSInstance.getUriId() ); try { gitRepoInfo = executionManagementServiceModule.deployThroughGitFinalStep(gitRepoInfo, applicationInstance, paaSInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), userCredentialsForPaaS.getAccountName()); } catch (Cloud4SoaException ex) { String error = "Impossible to create a git repository for the application: " + applicationInstance.getTitle() + " on the paas: "+paaSInstance.getTitle()+" cause: " + ex.getMessage(); logger.error(error); throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); }*/ return gitRepoInfo; } @Override public GitRepoInfo createGitRepo(String userInstanceUriId, String paaSInstanceUriId, String applicationInstanceUriId ) throws SOAException { ApplicationInstance applicationInstance = getApplicationInstance(applicationInstanceUriId); PaaSInstance paaSInstance = getPaaSInstance(paaSInstanceUriId); GitRepoInfo gitRepoInfo = createGitRepo(userInstanceUriId, paaSInstance, applicationInstance); return gitRepoInfo; } public GitRepoInfo createGitRepo(String userInstanceUriId, PaaSInstance paaSInstance, ApplicationInstance applicationInstance ) throws SOAException { String message = "Received the request for creating a new app repo on the provider: " + paaSInstance.getUriId() + " for the application: " + applicationInstance.getUriId(); logger.info( message ); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), paaSInstance.getUriId()); logger.debug( "Going to deploy through git the application " + applicationInstance.getUriId() + " on PaaS " + paaSInstance.getUriId() ); GitRepoInfo gitRepoInfo = null; try { gitRepoInfo = executionManagementServiceModule.deployThroughGit("", applicationInstance, paaSInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), userCredentialsForPaaS.getAccountName()); } catch (Cloud4SoaException ex) { String error = "Impossible to create a git repository for the application: " + applicationInstance.getTitle() + " on the paas: "+paaSInstance.getTitle()+" cause: " + ex.getMessage(); logger.error(error); throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } return gitRepoInfo; } public GitRepoInfo UpdateGitRepo(GitRepoInfo gitRepoInfo,String userInstanceUriId, PaaSInstance paaSInstance, ApplicationInstance applicationInstance ) throws SOAException { String message = "Received the request for creating a new app repo on the provider: " + paaSInstance.getUriId() + " for the application: " + applicationInstance.getUriId(); logger.info( message ); UserPaaSCredentials userCredentialsForPaaS = userManagementAndSecurityModule.readUserCredentialsForPaaS(applicationInstance.getOwnerUriId(), paaSInstance.getUriId()); logger.debug( "Going to deploy through git the application " + applicationInstance.getUriId() + " on PaaS " + paaSInstance.getUriId() ); GitRepoInfo retGitRepoInfo = null; try { retGitRepoInfo = executionManagementServiceModule.deployThroughGitFinalStep(gitRepoInfo, applicationInstance, paaSInstance, userCredentialsForPaaS.getPublicKey(), userCredentialsForPaaS.getSecretKey(), userCredentialsForPaaS.getAccountName()); } catch (Cloud4SoaException ex) { String error = "Impossible to create a git repository for the application: " + applicationInstance.getTitle() + " on the paas: "+paaSInstance.getTitle()+" cause: " + ex.getMessage(); logger.error(error); throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } return retGitRepoInfo; } @Override public Response commitGitDeploy(String userInstanceUriId, String paaSInstanceUriId, String applicationInstanceUriId) throws SOAException { ApplicationInstance applicationInstance; PaaSInstance paaSInstance; String responseMessage; Response.Status responseStatus; logger.debug("commitGitDeploy for applicationInstanceUriId: " + applicationInstanceUriId + ", paaSInstanceUriId: " + paaSInstanceUriId); try { applicationInstance = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrieved applicationInstance: " + applicationInstance); try { paaSInstance = paaSOfferingProfilesRepository.getPaaSInstance(paaSInstanceUriId); } catch (RepositoryException ex) { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } logger.debug("retrived paaSInstance: " + paaSInstance); //CC FIX: Call UpdateGitRepo GitRepoInfo gitRepoInfo = null; try { gitRepoInfo = getGitRepoInfos(userInstanceUriId, paaSInstanceUriId, applicationInstanceUriId); UpdateGitRepo(gitRepoInfo, userInstanceUriId, paaSInstance, applicationInstance); } catch (SOAException ex) { //createGitRepo is the connection to ems throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } ////END FIX try { logger.debug("Going to deploy application " + applicationInstanceUriId + " on PaaS " + paaSInstanceUriId); String deployedAppURL = gitServices.getApplicationUrl(applicationInstanceUriId,paaSInstanceUriId); this.updateRepository(applicationInstance, paaSInstance, deployedAppURL); responseStatus = Response.Status.ACCEPTED; responseMessage = "Application " + applicationInstance.getTitle() + " successfully deployed on PaaS " + paaSInstance.getProviderTitle() + "; URL: " + deployedAppURL; return Response.status(responseStatus).entity(responseMessage).type(MediaType.TEXT_PLAIN).build(); } catch (SOAException ex) { responseStatus = Response.Status.INTERNAL_SERVER_ERROR; responseMessage = "Failed to commit the git deploy: " + ex.getClass().getName() + " - " + ex.getMessage(); throw new SOAException(responseStatus, responseMessage); } } @Override public Response deleteRepo(String c4sUserId, String repoId) throws SOAException { throw new UnsupportedOperationException("Not supported yet. Received: " + " c4sUserId = " + c4sUserId + ", repoId = " + repoId); } @Override // < repoId, <gitUrl, repoName>> public Map<Long, Entry<String, String>> getGitRepos( String userInstanceUriId ) throws SOAException { Map<Long, Entry<String, String>> map = new HashMap<Long, Entry<String, String>>(); List<GitRepo> gitRepositories = gitServices.getGitRepositoriesForUser(userInstanceUriId); for (GitRepo gitRepo : gitRepositories) { Long id = gitRepo.getId(); String giturl = gitRepo.getGiturl(); String gitRepoName = gitRepo.getGitrepo(); map.put(id, new SimpleEntry<String, String>(giturl, gitRepoName)); } return map; } @Override // < proxyId, <repoName, repoId>> public Map<Long, Entry<String, Long>> getGitProxies(String userInstanceUriId) throws SOAException { Map<Long, Entry<String, Long>> map = new HashMap<Long, Entry<String, Long>>(); List<GitProxy> gitProxiesForUser = gitServices.getGitProxiesForUser(userInstanceUriId); for (GitProxy gitProxy : gitProxiesForUser) { Long proxyId = gitProxy.getId(); GitRepo bindrepo = gitProxy.getRepo(); Long binding = null; if (bindrepo != null) { binding = bindrepo.getId(); } String proxyName = gitProxy.getProxyname(); map.put(proxyId, new SimpleEntry<String, Long>(proxyName, binding)); } return map; } @Override public Response registerGitRepository(String applicationInstanceUriId, String userInstanceUriId, String paaSInstanceUriId, String repositoryName, String gitUrl) throws SOAException { logger.info("registerExistingGitRepo - userInstanceUriId = " + userInstanceUriId + ", paaSInstanceUriId = " + paaSInstanceUriId + ", repositoryName = " + repositoryName + ", gitUrl = " + gitUrl); String[] result = gitServices.registerGitRepository(applicationInstanceUriId, userInstanceUriId, gitUrl, repositoryName, paaSInstanceUriId); if ("0".equals(result[0])) { String message = "Received the request for register the repo: " + repositoryName + " having the url:" + gitUrl + " at the provider: " + paaSInstanceUriId + " by the user: " + userInstanceUriId; return this.getResponse(Status.OK, message); } else { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, result[1]); } } @Override public Response registerGitProxy(String userInstanceUriId, String proxyName) throws SOAException { logger.info("registerGitProxy - userInstanceUriId = " + userInstanceUriId + ", " + ", proxyName = " + proxyName); String[] result = gitServices.registerGitProxy(userInstanceUriId, proxyName); if ("0".equals(result[0])) { String message = "Received the request for register the proxy entry: " + proxyName + " by the user: " + userInstanceUriId; return this.getResponse(Status.OK, message); } else { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, result[1]); } } @Override public Response bindProxyToGit(String userInstanceUriId, String proxyId, String gitRepoId ) throws SOAException { logger.info("registerGitProxy - userInstanceUriId = " + userInstanceUriId + ", " + ", proxyid = " + proxyId + ", gitid = " + gitRepoId); String[] result = gitServices.bindProxyToGit(userInstanceUriId, proxyId, gitRepoId); if ("0".equals(result[0])) { String message = "Received the request for binding proxyid = " + proxyId + ", gitid = " + gitRepoId; return this.getResponse(Status.OK, message); } else { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, result[1]); } } @Override public Response relocateRepo(String c4sUserId, String newPaasUriId) throws SOAException { throw new UnsupportedOperationException("Not supported yet. Received: " + " c4sUserId = " + c4sUserId + ", paasUriId = " + newPaasUriId ); } @Override public GitRepoInfo getGitRepoInfos(String userInstanceUriId, String paaSInstanceUriId, String applicationInstanceUriId) throws SOAException{ GitRepoInfo gitRepoInfo = gitServices.getGitProxyInfos(userInstanceUriId, paaSInstanceUriId, applicationInstanceUriId); return gitRepoInfo; } protected Response getResponse( Response.Status status, String message ) { return Response.status( status).entity( message).type( MediaType.TEXT_PLAIN).build(); } // Git keys management - CRUD operations ----------------------------/ @Override public String getC4SOAPublicKey() { String[] c4SOAPublicKey = gitServices.getC4SOAPublicKey(); return c4SOAPublicKey[1]; } @Override public Response registerPublicKeyForUser(String userInstanceUriId, String publicKey) throws SOAException { String[] result = gitServices.registerPublicKeyForUser(userInstanceUriId, publicKey); if("0".equals(result[0])){ Response.Status responseStatus = Response.Status.OK; return Response.status( responseStatus ).entity( "Public key succesfully registered" ).type(MediaType.TEXT_PLAIN).build(); } else throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, result[1]); } @Override public StringList getPublicKeysForUser(String userInstanceUriId) throws SOAException { List<String> ret = new ArrayList<String>(); List<PubKey> pubkeys = gitServices.getPublicKeysForUser(userInstanceUriId); for (int i = 0; i < pubkeys.size(); i++) { PubKey pubKey = pubkeys.get(i); ret.add(pubKey.getPubkey()); } StringList stringList = new StringList(); stringList.setList(ret); return stringList; } @Override public Response deletePublicKeyFromUser(String userInstanceUriId, String publicKey) throws SOAException { String[] result = gitServices.deletePublicKeyFromUser(userInstanceUriId, publicKey); if ("0".equals(result[0])) { Response.Status responseStatus = Response.Status.OK; return Response.status(responseStatus).entity("Public key succesfully deleted").type(MediaType.TEXT_PLAIN).build(); } else { throw new SOAException(Response.Status.INTERNAL_SERVER_ERROR, result[1]); } } @Override public SlaContract getSLAContract(String applicationInstanceUriId) throws SOAException { ApplicationInstance application; eu.cloud4soa.api.datamodel.semantic.app.ApplicationDeployment applicationDeployment; SlaContract slaContract; slaContract = null; try { application = applicationProfilesRepository.getApplicationInstance(applicationInstanceUriId); applicationDeployment = application.getApplication().getDeployment(); if ( applicationDeployment == null ) { throw new SOAException(Status.PRECONDITION_FAILED, "The application doesn't look to be deployed on any paas; the sla contract cannot be retrieved"); } else if ( applicationDeployment.getSLAcontractID() == null ) { throw new SOAException(Status.PRECONDITION_FAILED, "No slaContract ID associated to the deployed application"); } else { slaModule.getSLAContract( applicationDeployment.getSLAcontractID() ); } } catch (RepositoryException ex) { throw new SOAException(Status.INTERNAL_SERVER_ERROR, ex.getMessage()); } return slaContract; } //-------------------------------------------------------------------/ /* * To Be removed! //------------------------------------------------------------------/ */ @Deprecated @Override public Response deployApplication(String applicationInstanceUriId, String paaSInstanceUriId, String publicKey, String secretKey, InputStream is) throws SOAException { return this.deployApplication(applicationInstanceUriId, paaSInstanceUriId, null, is); } @Deprecated @Override public Response startStopApplication(String applicationInstanceUriId, String startStopCommand, String publicKey, String secretKey) throws SOAException { return this.startStopApplication(applicationInstanceUriId, startStopCommand); } @Deprecated @Override public Response removeApplication(String applicationInstanceUriId, String publicKey, String secretKey) throws SOAException { return this.removeApplication(applicationInstanceUriId); } @Deprecated @Override public Response createDatabase(String applicationInstanceUriId, String paaSInstanceUriId, String dbStorageComponentUriId, String publicKey, String secretKey) throws SOAException { return this.createDatabase(applicationInstanceUriId, paaSInstanceUriId, dbStorageComponentUriId); } //------------------------------------------------------------------/ }