package org.ow2.choreos.ee.services.update; import java.util.Set; 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.datamodel.DeployableService; import org.ow2.choreos.services.datamodel.DeployableServiceSpec; public class IncreaseNumberOfReplicas extends BaseAction { private static final String NAME = "Increase number of replicas"; private DeployableService currentService; private DeployableServiceSpec newSpec; public IncreaseNumberOfReplicas(DeployableService currentService, DeployableServiceSpec newSpec) { this.currentService = currentService; this.newSpec = newSpec; } @Override public void applyUpdate() throws UpdateActionFailedException { int increaseAmount = newSpec.getNumberOfInstances() - currentService.getSpec().getNumberOfInstances(); DeployableServiceSpec deltaSpec = newSpec.clone(); deltaSpec.setNumberOfInstances(increaseAmount); ServiceDeploymentPreparer deploymentPreparer = ServiceDeploymentPreparerFactory.getNewInstance(deltaSpec, currentService); try { Set<CloudNode> nodes = deploymentPreparer.prepareDeployment(); currentService.setSpec(newSpec); for (CloudNode node : nodes) currentService.addSelectedNode(node); } catch (PrepareDeploymentFailedException e) { throw new UpdateActionFailedException(); } } @Override public String getName() { return NAME; } }