/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.ow2.choreos.ee.services; import java.util.Set; import org.apache.log4j.Logger; import org.ow2.choreos.ee.services.preparer.PrepareDeploymentFailedException; import org.ow2.choreos.ee.services.preparer.ServiceDeploymentPreparer; import org.ow2.choreos.ee.services.preparer.ServiceDeploymentPreparerFactory; import org.ow2.choreos.nodes.datamodel.CloudNode; import org.ow2.choreos.services.ServiceNotCreatedException; import org.ow2.choreos.services.datamodel.DeployableService; import org.ow2.choreos.services.datamodel.DeployableServiceSpec; public class ServiceCreator { private static Logger logger = Logger.getLogger(ServiceCreator.class); private DeployableService service = null; ServiceCreator() { } public DeployableService createService(DeployableServiceSpec serviceSpec) throws ServiceNotCreatedException { try { service = new DeployableService(serviceSpec); service.generateUUID(); } catch (IllegalArgumentException e1) { logger.error("Could not create service " + serviceSpec.getName()); throw new ServiceNotCreatedException(serviceSpec.getName()); } Set<CloudNode> selectedNodes = prepareDeployment(); service.setSelectedNodes(selectedNodes); logger.info("Created service " + service); return service; } private Set<CloudNode> prepareDeployment() throws ServiceNotCreatedException { ServiceDeploymentPreparer deploymentPreparer = ServiceDeploymentPreparerFactory.getNewInstance( service.getSpec(), service); try { return deploymentPreparer.prepareDeployment(); } catch (PrepareDeploymentFailedException e1) { logger.error("Could not prepare the deployment of the service " + service.getUUID() + " (" + service.getSpec().getName() + ")"); throw new ServiceNotCreatedException(service.getSpec().getName()); } } }