package com.telefonica.claudia.paastests;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.log4j.Logger;
import org.w3c.dom.DOMImplementation;
import org.w3c.dom.Document;
import org.w3c.dom.ls.DOMImplementationLS;
import org.w3c.dom.ls.LSOutput;
import org.w3c.dom.ls.LSSerializer;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
import com.telefonica.claudia.slm.common.SMConfiguration;
import com.telefonica.claudia.slm.deployment.Customer;
import com.telefonica.claudia.slm.deployment.ServiceApplication;
import com.telefonica.claudia.slm.deployment.VEE;
import com.telefonica.claudia.slm.deployment.VEEReplica;
import com.telefonica.claudia.slm.deployment.hwItems.DiskConf;
import com.telefonica.claudia.slm.deployment.hwItems.NICConf;
import com.telefonica.claudia.slm.deployment.hwItems.Network;
import com.telefonica.claudia.slm.deployment.paas.Product;
import com.telefonica.claudia.slm.lifecyclemanager.FSM;
import com.telefonica.claudia.slm.lifecyclemanager.LifecycleController;
import com.telefonica.claudia.slm.maniParser.Parser;
import com.telefonica.claudia.slm.paas.PaasUtils;
import com.telefonica.claudia.slm.rulesEngine.RulesEngine;
import com.telefonica.claudia.slm.vmiHandler.TCloudClient;
public class Statarupsection {
public static void main (String [] args)
{
Statarupsection p = new Statarupsection();
p.testPaaS();
Logger logger = Logger.getLogger(Statarupsection.class);
}
public void testPaaS ()
{
ServiceApplication sa = null;
String xmlFileName = "./src/test/resources/rubisguille2.xml";
try {
SMConfiguration.loadProperties();
System.out.println("------------------------------------------------------------------------------------");
System.out.println("procesing " + xmlFileName);
Parser p = new Parser(xmlFileName, new Customer("cc1"), "m2");
p.parse();
ServiceApplication sap = p.getServiceApplication();
int caux =0;
VEE [] veeArray = new VEE[sap.getVEEs().size()];
for (VEE aux: sap.getVEEs())
{
for (int g=0; g<sap.getVEEs().size(); g++) {
System.out.println (aux.getVEEName()+ " " + g + " " + aux.getDeploymentOrder());
if (aux.getDeploymentOrder()==-1&& caux==g)
{
System.out.println ("adding to position " + g+ " node " + aux.getVEEName());
veeArray[g] = aux;
caux++;
continue;
}
else if (aux.getDeploymentOrder()==g)
{
System.out.println ("adding to position " + g+ " node " + aux.getVEEName());
veeArray[g] = aux;
continue;
}
}
}
// Manually populate the replicas to continue the test
sa = p.getServiceApplication();
completeService (sa);
PaasUtils paas = new PaasUtils();
LifecycleController lcc = new LifecycleController ();
FSM fsm = new FSM(lcc, "hola");
fsm.sap=sa;
fsm.parser = p;
TCloudClient vmi = new TCloudClient("http://localhost:8182");
fsm.vmi = vmi;
RulesEngine rle=new RulesEngine(lcc);
// "load" the rule engine into the FSM
fsm.loadRuleEngine(rle);
for (VEE vee: sa.getVEEs())
{
for (VEEReplica replica: vee.getVEEReplicas())
{
boolean bPaaSAware = paas.isPaaSAware(vee);
if (!fsm.startService ())
return ;
if (bPaaSAware)
{
String xml = paas.getVEE(replica);
String ip = paas.getVeePaaSIpFromXML (xml);
System.out.println ("IP " + ip);
String [] result = paas.getVeePaaSUserNamePaaswordFromXML(xml);
System.out.println ("username " + result[0] + " pass " + result[1]);
for (Product product: vee.getProducts())
{
paas.installProduct("http://109.231.82.11:8080/sdc/",product, ip);
}
}
}
}
} catch (Exception e)
{
e.printStackTrace();
}
}
public void completeService (ServiceApplication sa)
{
Iterator<VEE> vees = sa.getVEEs().iterator();
VEE master = vees.next();
VEEReplica vee1 = new VEEReplica(master);
master.registerVEEReplica(vee1);
for (VEE vee: sa.getVEEs())
{
for (NICConf nic: vee.getNICsConf())
{
Network net = nic.getNetwork();
net.setNetworkAddresses( new String [] {"10.76.56.54", "245.456.456.456"});
}
}
Document doc = sa.toXML();
DocumentBuilderFactory dbf = DocumentBuilderFactory
.newInstance();
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DOMImplementation domImpl = db.getDOMImplementation();
DOMImplementationLS ls = (DOMImplementationLS) domImpl;
LSSerializer lss = ls.createLSSerializer();
LSOutput lso = ls.createLSOutput();
lso.setByteStream(System.out);
lss.write(doc, lso);
}
}