package org.ow2.choreos.ee.context;
import java.util.Collections;
import java.util.concurrent.atomic.AtomicInteger;
import org.ow2.choreos.chors.datamodel.Choreography;
import org.ow2.choreos.chors.datamodel.ChoreographySpec;
import org.ow2.choreos.nodes.datamodel.CloudNode;
import org.ow2.choreos.nodes.datamodel.ResourceImpact;
import org.ow2.choreos.services.datamodel.DeployableService;
import org.ow2.choreos.services.datamodel.DeployableServiceSpec;
import org.ow2.choreos.services.datamodel.PackageType;
import org.ow2.choreos.services.datamodel.ServiceDependency;
import org.ow2.choreos.services.datamodel.ServiceInstance;
import org.ow2.choreos.services.datamodel.ServiceType;
/**
* To be used on ContextCasterTest
*
* @author leonardo
*
*/
public class SampleChoreography {
private static final int PORT = 9345;
private static final String ROLE = "track";
private static final String PACKAGE_URL = "http://wahatever/pack.tar.gz";
private static final String VERSION = "1.0";
private Choreography chor;
private ChoreographySpec chorSpec;
private CloudNode node;
private AtomicInteger counter = new AtomicInteger();
public SampleChoreography() {
initSpec();
initChor();
}
public Choreography getChoreography() {
return chor;
}
public String getUri(String name) {
return "http://" + node.getIp() + ":" + PORT + "/" + name;
}
public String getRole() {
return ROLE;
}
private void initSpec() {
chorSpec = new ChoreographySpec();
initSpec1();
initSpec2();
initSpec3();
initSpec4();
initSpec5();
initSpec6();
initSpec7();
initSpec8();
}
private DeployableServiceSpec initSpec(String name) {
DeployableServiceSpec spec = new DeployableServiceSpec(name, ServiceType.SOAP, PackageType.COMMAND_LINE,
new ResourceImpact(), VERSION, PACKAGE_URL, PORT, name, 1);
spec.setRoles(Collections.singletonList(ROLE));
return spec;
}
private void initSpec1() {
DeployableServiceSpec spec = initSpec("spec1");
ServiceDependency dep1 = new ServiceDependency("spec2", ROLE);
ServiceDependency dep2 = new ServiceDependency("spec3", ROLE);
ServiceDependency dep3 = new ServiceDependency("spec5", ROLE);
spec.addDependency(dep1);
spec.addDependency(dep2);
spec.addDependency(dep3);
chorSpec.addServiceSpec(spec);
}
private void initSpec2() {
DeployableServiceSpec spec = initSpec("spec2");
ServiceDependency dep = new ServiceDependency("spec4", ROLE);
spec.addDependency(dep);
chorSpec.addServiceSpec(spec);
}
private void initSpec3() {
DeployableServiceSpec spec = initSpec("spec3");
ServiceDependency dep = new ServiceDependency("spec4", ROLE);
spec.addDependency(dep);
chorSpec.addServiceSpec(spec);
}
private void initSpec4() {
DeployableServiceSpec spec = initSpec("spec4");
chorSpec.addServiceSpec(spec);
}
private void initSpec5() {
DeployableServiceSpec spec = initSpec("spec5");
ServiceDependency dep1 = new ServiceDependency("spec6", ROLE);
ServiceDependency dep2 = new ServiceDependency("spec7", ROLE);
spec.addDependency(dep1);
spec.addDependency(dep2);
chorSpec.addServiceSpec(spec);
}
private void initSpec6() {
DeployableServiceSpec spec = initSpec("spec6");
ServiceDependency dep = new ServiceDependency("spec8", ROLE);
spec.addDependency(dep);
chorSpec.addServiceSpec(spec);
}
private void initSpec7() {
DeployableServiceSpec spec = initSpec("spec7");
ServiceDependency dep = new ServiceDependency("spec8", ROLE);
spec.addDependency(dep);
chorSpec.addServiceSpec(spec);
}
private void initSpec8() {
DeployableServiceSpec spec = initSpec("spec8");
chorSpec.addServiceSpec(spec);
}
private void initChor() {
chor = new Choreography();
chor.setId("1");
chor.setChoreographySpec(chorSpec);
initNode();
initServices();
}
private void initNode() {
node = new CloudNode();
node.setIp("192.168.56.101");
}
private void initServices() {
for (DeployableServiceSpec spec: chorSpec.getDeployableServiceSpecs()) {
DeployableService svc = new DeployableService(spec);
svc.setUUID(Integer.toString(counter.getAndIncrement()));
svc.setSelectedNodes(Collections.singleton(node));
ServiceInstance instance = new ServiceInstance(node);
instance.setInstanceId(Integer.toString(counter.getAndIncrement()));
instance.setNativeUri(getUri(spec.getName()));
instance.setServiceSpec(spec);
svc.addInstance(instance);
chor.addService(svc);
}
}
}