package org.ow2.choreos.ee.services.preparer;
import org.ow2.choreos.ee.nodes.cm.NodeNotPreparedException;
import org.ow2.choreos.ee.nodes.cm.NodePreparer;
import org.ow2.choreos.ee.nodes.cm.NodePreparers;
import org.ow2.choreos.ee.nodes.cm.NodeUpdater;
import org.ow2.choreos.ee.nodes.cm.NodeUpdaters;
import org.ow2.choreos.nodes.datamodel.CloudNode;
import org.ow2.choreos.services.datamodel.DeployableService;
import org.ow2.choreos.services.datamodel.ServiceInstance;
public class InstanceUndeploymentPreparer {
private ServiceInstance instance;
private CloudNode node;
private DeployableService service;
public InstanceUndeploymentPreparer(DeployableService service, ServiceInstance serviceInstance) {
this.service = service;
this.instance = serviceInstance;
this.node = instance.getNode();
}
public void prepareUndeployment() throws PrepareUndeploymentFailedException {
runUndeploymentPrepare();
scheduleHandler();
}
private void runUndeploymentPrepare() throws PrepareUndeploymentFailedException {
NodePreparer nodePreparer = NodePreparers.getPreparerFor(node);
try {
nodePreparer.prepareNodeForUndeployment(instance.getInstanceId());
} catch (NodeNotPreparedException e1) {
throw new PrepareUndeploymentFailedException();
}
}
private void scheduleHandler() {
InstanceRemoverUpdateHandler handler = new InstanceRemoverUpdateHandler(service, instance);
NodeUpdater nodeUpdater = NodeUpdaters.getUpdaterFor(node);
nodeUpdater.addHandler(handler);
}
}