/* * 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.annotations.RDF; import com.viceversatech.rdfbeans.annotations.RDFBean; import com.viceversatech.rdfbeans.annotations.RDFSubject; import com.viceversatech.rdfbeans.exceptions.RDFBeanException; import eu.cloud4soa.api.datamodel.core.ApplicationInstance; import eu.cloud4soa.api.datamodel.core.PaaSInstance; import eu.cloud4soa.api.datamodel.frontend.PaaSRating; import eu.cloud4soa.api.datamodel.semantic.ent.PaaSProvider; import eu.cloud4soa.api.datamodel.semantic.inf.HardwareComponent; import eu.cloud4soa.api.datamodel.semantic.inf.SoftwareComponent; import eu.cloud4soa.api.datamodel.semantic.paas.Channel; import eu.cloud4soa.api.datamodel.semantic.paas.Exception; import eu.cloud4soa.api.datamodel.semantic.paas.Operation; import eu.cloud4soa.api.datamodel.semantic.paas.PaaSOffering; import eu.cloud4soa.api.datamodel.semantic.paas.Parameter; import eu.cloud4soa.api.datamodel.semantic.user.PaaSUser; 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.QueryRow; import org.ontoware.rdf2go.model.node.Resource; import org.ontoware.rdf2go.model.node.URI; import org.ontoware.rdf2go.model.node.impl.URIImpl; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author vincenzo */ public class PaaSOfferingProfilesRepository implements eu.cloud4soa.api.repository.PaaSOfferingProfilesRepository{ final Logger logger = LoggerFactory.getLogger(PaaSOfferingProfilesRepository.class); // private RepositoryManager repositoryManager = RepositoryManager.getInstance(); private RepositoryManager repositoryManager = null; public void setRepositoryManager(RepositoryManager repositoryManager) { this.repositoryManager = repositoryManager; } @Override public List<PaaSInstance> getPaaSInstances(ApplicationInstance applicationInstance) { throw new UnsupportedOperationException("Not supported yet."); // List<PaaSInstance> retrievedUserInstances = new ArrayList<PaaSInstance>(); // if(applicationInstanceUriId!=null && !applicationInstanceUriId.isEmpty()){ // try { // // Set<PaaSOffering> results = new HashSet<PaaSOffering>(); // // URI predicate = model.createURI("http://xmlns.com/foaf/0.1/workplaceHomepage"); // URI object = model.createURI("http://google.com"); // ClosableIterator<Statement> ci = model.findStatements(Variable.ANY, predicate, object); // while (ci.hasNext()) { // Resource r = ci.next().getSubject(); // results.add((Person)manager.get(r)); // } // ci.close(); // // Developer developer = repositoryManager.getManager().get(userInstanceUriId, Developer.class); // if(developer != null) // retrievedUserInstance = new DeveloperInstance(developer); // // logger.debug("retrieved userInstance: "+retrievedUserInstance); // } catch (RDFBeanException ex) { // logger.error("RDFBeanException: "+ex); // } // } // else{ // //Query by-example exploiting information obtained from the Model... // logger.error("Query by-example Not supported yet."); // } // return retrievedUserInstance; } @Override public PaaSInstance getPaaSInstance(String paaSInstanceUriId) throws RepositoryException, IllegalArgumentException{ // throw new UnsupportedOperationException("Not supported yet."); PaaSInstance retrievedPaaSInstance = null; if(paaSInstanceUriId!=null && !paaSInstanceUriId.isEmpty()){ try { PaaSOffering paaSOffering = repositoryManager.getManager().get(paaSInstanceUriId, PaaSOffering.class); if(paaSOffering != null) retrievedPaaSInstance = new PaaSInstance(paaSOffering); else throw new IllegalArgumentException("The requested resource does not exists."); logger.debug("retrieved paaSInstance: "+retrievedPaaSInstance); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } } else{ //Query by-example exploiting information obtained from the Model... logger.error("Query by-example Not supported yet."); throw new RepositoryException("Query by-example Not supported yet."); } return retrievedPaaSInstance; } @Override public void updatePaaSInstance(PaaSInstance paaSInstance, PaaSRating paaSRating) throws RepositoryException { // throw new UnsupportedOperationException("Not supported yet."); logger.debug("updatePaaSInstance(PaaSInstance paaSInstance, PaaSRating paaSRating)"); Resource existingResource = null; PaaSOffering paaSOffering = (PaaSOffering)((PaaSInstance)paaSInstance).getPaaSOffering(); try { //check if the specific resource exists existingResource = repositoryManager.getManager().getResource(paaSOffering.getUriId(), PaaSOffering.class); if(existingResource!=null){ setUriIds(paaSOffering); repositoryManager.getManager().update(paaSOffering); // repositoryManager.getManager().delete(paaSOffering.getUriId(), PaaSOffering.class); // setUriIds(paaSOffering); // repositoryManager.getManager().add(paaSOffering); } else throw new IllegalArgumentException("The specific resource does not exists"); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } } @Override public String storePaaSInstance(PaaSInstance paaSInstance) throws RepositoryException{ // throw new UnsupportedOperationException("Not supported yet."); logger.debug("storePaaSInstance(PaaSInstance paaSInstance)"); if(paaSInstance.getUriId()==null){ try { //Obtain the main RDFBean Class from the wrapper PaaSOffering paaSOffering = (PaaSOffering)((PaaSInstance)paaSInstance).getPaaSOffering(); paaSOffering.setUriId(getUUID()); setUriIds(paaSOffering); repositoryManager.getManager().add(paaSOffering); return paaSOffering.getUriId(); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } } return null; } @Override public List<PaaSInstance> getAllAvailablePaaSInstances() throws RepositoryException { // throw new UnsupportedOperationException("Not supported yet."); logger.debug("getAllAvailablePaaSInstances()"); List<PaaSInstance> retrievedPaaSInstances = new ArrayList<PaaSInstance>(); try { ClosableIterator<PaaSOffering> retrievedPaaSOfferings = repositoryManager.getManager().getAll(PaaSOffering.class); while (retrievedPaaSOfferings.hasNext()) { PaaSOffering paaSOffering = retrievedPaaSOfferings.next(); logger.debug("retrieved paaSOffering: "+paaSOffering); PaaSInstance paaSInstance = new PaaSInstance(paaSOffering); logger.debug("created paaSInstance: "+paaSInstance); retrievedPaaSInstances.add(paaSInstance); } } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } logger.debug("retrievedPaaSInstances: "+retrievedPaaSInstances); return retrievedPaaSInstances; } @Override public void removePaaSInstance(String paasInstanceUriId) throws RepositoryException { // throw new UnsupportedOperationException("Not supported yet."); try { PaaSOffering retrievedPaaSOffering = getPaaSOffering(paasInstanceUriId); if(retrievedPaaSOffering!=null) repositoryManager.getManager().delete(paasInstanceUriId, PaaSOffering.class); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } } @Override public List<PaaSInstance> retrieveAllPaaSInstances(String userInstanceUriId) throws RepositoryException { // throw new UnsupportedOperationException("Not supported yet."); logger.debug("retrieveAllPaaSInstances(String userInstanceUriId)"); List<PaaSInstance> retrievedPaaSInstances = new ArrayList<PaaSInstance>(); try { List<PaaSOffering> retrievedPaaSOffering = new ArrayList<PaaSOffering>(); String paaSOfferingString = PaaSOffering.class.getAnnotation(RDFBean.class).value(); URI paaSOfferingUri= new URIImpl(paaSOfferingString, true); String providedByPaaSProviderString = PaaSOffering.class.getMethod("getPaaSProvider", new Class[0]).getAnnotation(RDF.class).value(); URI providedByPaaSProviderUri= new URIImpl(providedByPaaSProviderString, true); String hasUserString = PaaSProvider.class.getMethod("getUser", new Class[0]).getAnnotation(RDF.class).value(); URI hasUserUri= new URIImpl(hasUserString, true); String prefix = PaaSUser.class.getMethod("getUriId", new Class[0]).getAnnotation(RDFSubject.class).prefix(); URI paaSUserUriId = new URIImpl(prefix+userInstanceUriId, true); URI type = new URIImpl("http://www.w3.org/1999/02/22-rdf-syntax-ns#type", true); ClosableIterator<QueryRow> ci = repositoryManager.getManager().getModel().sparqlSelect( "SELECT ?r WHERE { " + "?r "+type.toSPARQL()+" "+paaSOfferingUri.toSPARQL()+" . " + "?r "+providedByPaaSProviderUri.toSPARQL()+" ?y . " + "?y "+hasUserUri.toSPARQL()+" "+paaSUserUriId.toSPARQL()+" . }" ).iterator(); while (ci.hasNext()) { Resource r = ci.next().getValue("r").asResource(); retrievedPaaSOffering.add((PaaSOffering)repositoryManager.getManager().get(r)); } for (PaaSOffering paaSOffering : retrievedPaaSOffering) { logger.debug("retrieved paaSOffering: "+paaSOffering); PaaSInstance paaSInstance = new PaaSInstance(paaSOffering); logger.debug("created paaSInstance: "+paaSInstance); retrievedPaaSInstances.add(paaSInstance); } } catch (NoSuchMethodException ex) { // java.util.logging.Logger.getLogger(PaaSOfferingProfilesRepository.class.getName()).log(Level.SEVERE, null, ex); logger.warn( "Exception while executing method retrieveAllPaaSInstances.", ex); logger.error("NoSuchMethodException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } catch (SecurityException ex) { logger.warn( "Exception while executing method retrieveAllPaaSInstances.", ex); logger.error("SecurityException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } catch (RDFBeanException ex) { logger.warn( "Exception while executing method retrieveAllPaaSInstances.", ex); logger.error("RDFBeanException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } logger.debug("retrievedPaaSInstances: "+retrievedPaaSInstances); return retrievedPaaSInstances; } /* private methods */ private PaaSOffering getPaaSOffering(String paaSOfferingUriId) throws RepositoryException{ PaaSOffering retrievedPaaSOffering = null; if(paaSOfferingUriId!=null && !paaSOfferingUriId.isEmpty()){ try { retrievedPaaSOffering = repositoryManager.getManager().get(paaSOfferingUriId, PaaSOffering.class); } catch (RDFBeanException ex) { logger.error("RDFBeanException: "+ex); throw new RepositoryException("PaaSOfferingProfilesRepository", ex); } } return retrievedPaaSOffering; } private void setUriIds(PaaSOffering paaSOffering){ List<HardwareComponent> offeredResource = paaSOffering.getOfferedHardwareComponents(); for (HardwareComponent hardwareComponent : offeredResource) { if(hardwareComponent.getUriId()==null || hardwareComponent.getUriId().isEmpty()) hardwareComponent.setUriId(getUUID()); if(hardwareComponent.getRelatedhwcategory()!=null && hardwareComponent.getRelatedhwcategory().getUriId()==null || hardwareComponent.getRelatedhwcategory().getUriId().isEmpty()) hardwareComponent.getRelatedhwcategory().setUriId(getUUID()); } List<SoftwareComponent> offeredSoftwareComponent = paaSOffering.getOfferedSoftware(); for (SoftwareComponent softwareComponent : offeredSoftwareComponent) { if(softwareComponent.getUriId()==null || softwareComponent.getUriId().isEmpty()) softwareComponent.setUriId(getUUID()); if(softwareComponent.getRelatedswcategory()!=null && softwareComponent.getRelatedswcategory().getUriId()==null || softwareComponent.getRelatedswcategory().getUriId().isEmpty()) softwareComponent.getRelatedswcategory().setUriId(getUUID()); } List<Channel> communicationChannels = paaSOffering.getCommunicationChannels(); for (Channel channel : communicationChannels) { if(channel.getUriId()==null || channel.getUriId().isEmpty()) channel.setUriId(getUUID()); List<Operation> supportedOperations = channel.getSupportedOperations(); for (Operation operation : supportedOperations) { if(operation.getUriId()==null || operation.getUriId().isEmpty()) operation.setUriId(getUUID()); if(operation.getOperationType()!=null && operation.getOperationType().getUriId()==null || operation.getOperationType().getUriId().isEmpty()) operation.getOperationType().setUriId(getUUID()); List<Parameter> requiredParameters = operation.getRequiredParameters(); for (Parameter parameter : requiredParameters) { if(parameter.getUriId()==null || parameter.getUriId().isEmpty()) parameter.setUriId(getUUID()); } List<Exception> thrownException = operation.getThrownException(); for (Exception exception : thrownException) { if(exception.getUriId()==null || exception.getUriId().isEmpty()) exception.setUriId(getUUID()); } } } if(paaSOffering.getSupportedLanguage()!=null && (paaSOffering.getSupportedLanguage().getUriId()==null || paaSOffering.getSupportedLanguage().getUriId().isEmpty())) paaSOffering.getSupportedLanguage().setUriId(getUUID()); } private String getUUID(){ // Creating a random UUID (Universally unique identifier) UUID uuid = UUID.randomUUID(); return uuid.toString(); } }