package org.ow2.choreos.ee.reconfiguration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map.Entry;
import org.ow2.choreos.chors.ChoreographyDeployer;
import org.ow2.choreos.chors.ChoreographyNotFoundException;
import org.ow2.choreos.chors.client.ChorDeployerClient;
import org.ow2.choreos.chors.datamodel.Choreography;
import org.ow2.choreos.ee.ChorRegistry;
import org.ow2.choreos.nodes.datamodel.CloudNode;
import org.ow2.choreos.services.datamodel.DeployableService;
import org.ow2.choreos.services.datamodel.DeployableServiceSpec;
public class ChoreographyRegistryHelper {
private static final String CHOR_DEPLOYER_URI = "http://localhost:9102/choreographydeployer/";
private ChorRegistry registry = ChorRegistry.getInstance();
private ChoreographyDeployer chorClient;
public ChoreographyRegistryHelper() {
setClients();
}
private void setClients() {
this.chorClient = new ChorDeployerClient(CHOR_DEPLOYER_URI);
}
public List<DeployableService> getServicesHostedOn(String ipAddress) {
Choreography chor = getChor(ipAddress);
List<DeployableService> result = new ArrayList<DeployableService>();
for (DeployableService service : chor.getDeployableServices()) {
for (CloudNode node : service.getSelectedNodes())
if (node.getIp().equals(ipAddress)) {
result.add(service);
break;
}
}
return result;
}
public List<DeployableServiceSpec> getServiceSpecsForServices(List<DeployableService> services) {
List<DeployableServiceSpec> specs = new ArrayList<DeployableServiceSpec>();
for (DeployableService service : services) {
specs.add(service.getSpec());
}
return specs;
}
public Choreography getChor(String ipAddress) {
String chorId = searchForChor(ipAddress);
if (chorId.isEmpty())
return null;
Choreography chor = null;
try {
chor = chorClient.getChoreography(chorId);
} catch (ChoreographyNotFoundException e) {
e.printStackTrace();
}
return chor;
}
public ChoreographyDeployer getChorClient() {
return chorClient;
}
private String searchForChor(String ipAddress) {
for (Entry<String, Choreography> chor : registry.getAll().entrySet()) {
for (DeployableService service : chor.getValue().getDeployableServices()) {
for (CloudNode node : service.getSelectedNodes()) {
if (node.getIp().equals(ipAddress)) {
return chor.getKey();
}
}
}
}
return "";
}
public Choreography getChoreography(String node, String service) {
for (Entry<String, Choreography> chor : registry.getAll().entrySet()) {
for (DeployableService s : chor.getValue().getDeployableServices()) {
if (s.getSpec().getName().equals(service)) {
for (CloudNode n : s.getSelectedNodes()) {
if (n.getIp().equals(node)) {
return chor.getValue();
}
}
}
}
}
return null;
}
}