/* * 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.repository; import com.viceversatech.rdfbeans.RDFBeanManager; import com.viceversatech.rdfbeans.exceptions.RDFBeanException; import eu.cloud4soa.api.datamodel.core.ApplicationInstance; import eu.cloud4soa.api.datamodel.core.utilBeans.DeveloperInstance; import eu.cloud4soa.api.datamodel.semantic.app.Application; import eu.cloud4soa.api.datamodel.semantic.inf.HardwareComponent; import eu.cloud4soa.api.datamodel.semantic.inf.SoftwareComponent; import eu.cloud4soa.api.util.exception.repository.RepositoryException; import eu.cloud4soa.repository.utils.RepositoryManager; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.ontoware.aifbcommons.collection.ClosableIterator; import org.ontoware.rdf2go.model.Model; import org.ontoware.rdf2go.model.QueryRow; import org.ontoware.rdf2go.model.node.Resource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Required; /** * * @author vincenzo */ public class ApplicationProfilesRepository implements eu.cloud4soa.api.repository.ApplicationProfilesRepository{ final Logger logger = LoggerFactory.getLogger(ApplicationProfilesRepository.class); // private RepositoryManager repositoryManager = RepositoryManager.getInstance(); private RepositoryManager repositoryManager = null; private UserProfilesRepository userProfilesRepository; @Required public void setRepositoryManager(RepositoryManager repositoryManager) { this.repositoryManager = repositoryManager; } @Required public void setUserProfilesRepository(UserProfilesRepository userProfilesRepository) { this.userProfilesRepository = userProfilesRepository; } @Override public synchronized ApplicationInstance getApplicationInstance(String applicationInstanceUriId) throws RepositoryException, IllegalArgumentException{ logger.debug("getApplicationInstance(String applicationInstanceUriId)"); // throw new UnsupportedOperationException("Not supported yet."); ApplicationInstance retrievedApplicationInstance = null; boolean exception = false; if(applicationInstanceUriId!=null && !applicationInstanceUriId.isEmpty()){ // do{ try { //Obtain the main RDFBean Class from the ontology Application application = repositoryManager.getManager().get(applicationInstanceUriId, Application.class); //Wrap the RDFBean cluster object if(application==null) throw new IllegalArgumentException("The requested resource does not exists."); retrievedApplicationInstance = new ApplicationInstance(application); logger.debug("retrieved applicationInstance: "+retrievedApplicationInstance); // if(exception){ // logger.error("Now Ok!"); // logger.error("DeploymentName: "+retrievedApplicationInstance.getPaaSOfferingDeploymentName()); // exception = false; // } } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("ApplicationProfilesRepository", ex); } // } while (exception); } else{ //Query by-example exploiting information obtained from the Model... } return retrievedApplicationInstance; } @Override public synchronized void storeApplicationInstance(ApplicationInstance applicationInstance) throws RepositoryException{ // logger.error("UnsupportedOperationException("+"Not supported yet."+")"); // throw new UnsupportedOperationException("Not supported yet."); logger.debug("storeApplicationInstance(ApplicationInstance applicationInstance)"); //store applicationInstance // if(applicationInstance.getUriId()==null){ try { //Obtain the main RDFBean Class from the wrapper Application application = applicationInstance.getApplication(); if(applicationInstance.getUriId()==null) application.setUriId(getUUID()); setUriIds(application); repositoryManager.getManager().add(application); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("ApplicationProfilesRepository", ex); } logger.debug("ApplicationInstance stored"); // } } @Override public synchronized void updateApplicationInstance(ApplicationInstance applicationInstance) throws RepositoryException{ // throw new UnsupportedOperationException("Not supported yet."); logger.debug("updateApplicationInstance(ApplicationInstance applicationInstance)"); //update applicationInstance try { //Obtain the main RDFBean Class from the wrapper Application application = applicationInstance.getApplication(); setUriIds(application); repositoryManager.getManager().update(application); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("ApplicationProfilesRepository", ex); } logger.debug("ApplicationInstance updated"); } @Override public List<ApplicationInstance> retrieveAllApplicationProfile(String userInstanceUserId) throws RepositoryException{ // throw new UnsupportedOperationException("Not supported yet."); // List<ApplicationInstance> applicationInstanceList = new ArrayList<ApplicationInstance>(); DeveloperInstance userInstance = (DeveloperInstance) userProfilesRepository.getUserInstance(userInstanceUserId); // List<ApplicationInstance> retrievedApplicationInstance = userInstance.getApplications(); ClosableIterator<Application> all = null; try { all = repositoryManager.getManager().getAll(Application.class); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("ApplicationProfilesRepository", ex); } List<ApplicationInstance> retrievedApplicationInstance = new ArrayList<ApplicationInstance>(); while (all.hasNext()) { Application application = all.next(); if (application.getOwner() != null && application.getOwner().getUriId()!=null) { logger.debug("application.getOwner().getUriId() ? userInstanceUserId:"+ application.getOwner().getUriId() + " " +userInstanceUserId); if(application.getOwner().getUriId().equals(userInstanceUserId)) retrievedApplicationInstance.add(new ApplicationInstance(application)); } } // if(applicationInstanceUriId!=null && !applicationInstanceUriId.isEmpty()){ // try { // //Obtain the main RDFBean Class from the ontology // Application application = repositoryManager.getManager().get(applicationInstanceUriId, Application.class); // //Wrap the RDFBean cluster object // retrievedApplicationInstance = new ApplicationInstance(application); // logger.debug("retrieved applicationInstance: "+retrievedApplicationInstance); // } catch (RDFBeanException ex) { // logger.error("RDFBeanException: "+ex); // } // } // else{ // //Query by-example exploiting information obtained from the Model... // } return retrievedApplicationInstance; } @Override public List<ApplicationInstance> retrieveAllApplicationProfileDeployedOnPaaS(String paasInstanceUserId) throws RepositoryException{ List<ApplicationInstance> applicationInstanceList; String appsDeployedOnAPaaSQuery; ClosableIterator<QueryRow> uriIdsIterator; RDFBeanManager manager; applicationInstanceList = new ArrayList<ApplicationInstance>(); appsDeployedOnAPaaSQuery = "PREFIX essential-metamodel:<http://www.enterprise-architecture.org/essential-metamodel.owl#> " + "PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#> " + "PREFIX c4s-app-m:<http://www.cloud4soa.eu/v0.1/application-domain#> " + "PREFIX paas-m: <http://www.cloud4soa.eu/v0.1/paas-model#> " + "SELECT DISTINCT ?app " + "WHERE { " + " ?app rdf:type essential-metamodel:Application . " + " ?app c4s-app-m:hasDeployment ?ad . " + " ?ad c4s-app-m:deploying_location paas-m:" + paasInstanceUserId + "." + "}"; try { manager = repositoryManager.getManager(); uriIdsIterator = manager.getModel().sparqlSelect( appsDeployedOnAPaaSQuery ).iterator(); while (uriIdsIterator.hasNext()) { Resource resource; resource = uriIdsIterator.next().getValue("app").asResource(); applicationInstanceList.add( new ApplicationInstance((Application)manager.get( resource )) ); } } catch(RDFBeanException rdfbe) { throw new RepositoryException("ApplicationProfilesRepository", rdfbe); } catch(Exception e) { throw new RepositoryException("ApplicationProfilesRepository", e); } return applicationInstanceList; } @Override public void removeApplicationProfile(String applicationInstanceUriId) throws RepositoryException{ logger.debug("removeApplicationProfile(String applicationInstanceUriId)"); //remove applicationInstance try { repositoryManager.getManager().delete(applicationInstanceUriId, Application.class); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("ApplicationProfilesRepository", ex); } logger.debug("ApplicationInstance removed"); } private void setUriIds(Application application){ List<HardwareComponent> requiresResource = application.getRequiresResource(); for (HardwareComponent hardwareComponent : requiresResource) { if(hardwareComponent.getUriId()==null || hardwareComponent.getUriId().isEmpty()) hardwareComponent.setUriId(getUUID()); } List<SoftwareComponent> requiresSoftwareComponent = application.getRequiresSoftwareComponent(); for (SoftwareComponent softwareComponent : requiresSoftwareComponent) { if(softwareComponent.getUriId()==null || softwareComponent.getUriId().isEmpty()) softwareComponent.setUriId(getUUID()); } if(application.getDeployment()!=null && (application.getDeployment().getUriId()==null || application.getDeployment().getUriId().isEmpty())) application.getDeployment().setUriId(getUUID()); } private String getUUID(){ // Creating a random UUID (Universally unique identifier) UUID uuid = UUID.randomUUID(); return uuid.toString(); } }