package test.appProfConverter; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; public class SoftwareProfile { public SoftwareProfile(String fileName) { this.LoadFromXml(fileName); } public SoftwareProfile() { this.TaskId = null; this.Phases = null; } public String ToString() { String str = ""; str += "Task Id: " + this.TaskId + "\n"; for (SoftwarePhase phase : Phases) { str += phase.ToString(); } return str; } public void StoreToXml(String fileName) { try { DocumentBuilderFactory docFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); // root elements Document doc = docBuilder.newDocument(); Element rootElement = doc.createElement("job"); doc.appendChild(rootElement); rootElement.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); rootElement.setAttribute("xsi:noNamespaceSchemaLocation", "../QCGJobDescriptionSchemaNew.xsd"); // staff elements Element task = doc.createElement("task"); rootElement.appendChild(task); // set attribute to staff element task.setAttribute("id", this.TaskId); Element execution = doc.createElement("execution"); task.appendChild(execution); Element resourceConsumptionProfile = doc .createElement("resourceConsumptionProfile"); execution.appendChild(resourceConsumptionProfile); for (int i = 0; i < this.Phases.length; i++) { Element resourceConsumption = doc .createElement("resourceConsumption"); resourceConsumptionProfile.appendChild(resourceConsumption); Element referenceHardware = doc .createElement("referenceHardware"); resourceConsumption.appendChild(referenceHardware); Element referenceNode = doc.createElement("reference"); referenceNode.setAttribute("name", "node"); referenceNode.appendChild(doc .createTextNode(this.Phases[i].RefNode)); referenceHardware.appendChild(referenceNode); Element referenceCores = doc.createElement("reference"); referenceCores.setAttribute("name", "cpu_cores"); referenceCores.appendChild(doc.createTextNode(Integer .toString(this.Phases[i].RefCores))); referenceHardware.appendChild(referenceCores); Element referenceFreq = doc.createElement("reference"); referenceFreq.setAttribute("name", "cpu_maxfreq"); referenceFreq.appendChild(doc.createTextNode(Double .toString(this.Phases[i].RefFreq))); referenceHardware.appendChild(referenceFreq); Element duration = doc.createElement("duration"); resourceConsumption.appendChild(duration); duration.appendChild(doc.createTextNode("PT" + Integer.toString(this.Phases[i].Duration) + "S")); Element behaviour, value; behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_Power"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Double .toString(this.Phases[i].PM_Power))); behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_Disk_IO"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Double .toString(this.Phases[i].PM_Disk_IO))); behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_Memory_RSS"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Double .toString(this.Phases[i].PM_Memory_RSS))); behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_Memory_Usage"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Double .toString(this.Phases[i].PM_Memory_Usage))); behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_CPU_Usage"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Double .toString(this.Phases[i].PM_CPU_Usage))); behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_Threads"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Integer .toString(this.Phases[i].PM_Threads))); behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_Download"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Double .toString(this.Phases[i].PM_Download))); behaviour = doc.createElement("behaviour"); resourceConsumption.appendChild(behaviour); behaviour.setAttribute("name", "PM_Upload"); value = doc.createElement("value"); behaviour.appendChild(value); value.appendChild(doc.createTextNode(Double .toString(this.Phases[i].PM_Upload))); } // write the content into xml file TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(doc); StreamResult result = new StreamResult(new File(fileName)); // Output to console for testing // StreamResult result = new StreamResult(System.out); transformer.transform(source, result); } catch (ParserConfigurationException pce) { pce.printStackTrace(); } catch (TransformerException tfe) { tfe.printStackTrace(); } } public void LoadFromXml(String fileName) { try { DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory .newInstance(); DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder(); Document doc = docBuilder.parse(new File(fileName)); NodeList nl; // task id="wget" Element e = (Element) doc.getElementsByTagName("task").item(0) .getChildNodes(); this.TaskId = e.getAttributes().getNamedItem("id").getNodeValue() .trim(); NodeList listOfAppPhases = doc .getElementsByTagName("resourceConsumption"); int nPhases = listOfAppPhases.getLength(); Phases = new SoftwarePhase[nPhases]; for (int p = 0; p < nPhases; p++) { Node phaseNode = listOfAppPhases.item(p); SoftwarePhase swPhase = new SoftwarePhase(); if (phaseNode.getNodeType() == Node.ELEMENT_NODE) { Element phaseElement = (Element) phaseNode; // Phase Duration nl = phaseElement.getElementsByTagName("duration"); NodeList textList = nl.item(0).getChildNodes(); if (textList.item(0).getNodeValue().trim().startsWith("PT")) { String str = textList.item(0).getNodeValue().trim(); swPhase.Duration = Integer.parseInt(str.substring(2, str.length() - 1)); if (str.endsWith("S")) { ; } else if (str.endsWith("M")) { swPhase.Duration *= 60; } else if (str.endsWith("H")) { swPhase.Duration *= 3600; } else { throw new Exception( "Invalid software phase duration."); } } // Reference Hardware nl = phaseElement.getElementsByTagName("reference"); for (int r = 0; r < nl.getLength(); r++) { String name = nl.item(r).getAttributes() .getNamedItem("name").getNodeValue(); if (name.equals("node")) { swPhase.RefNode = nl.item(r).getChildNodes() .item(0).getNodeValue().trim(); } if (name.equals("cpu_cores")) { swPhase.RefCores = Integer.parseInt(nl .item(r).getChildNodes().item(0) .getNodeValue().trim()); } if (name.equals("cpu_maxfreq")) { swPhase.RefFreq = Double.parseDouble(nl .item(r).getChildNodes().item(0) .getNodeValue().trim()); } } // Application Behavior nl = phaseElement.getElementsByTagName("behaviour"); for (int b = 0; b < nl.getLength(); b++) { String name = nl.item(b).getAttributes() .getNamedItem("name").getNodeValue(); if (name.equals("PM_Power")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_Power = Double.parseDouble(textList .item(0).getNodeValue().trim()); } if (name.equals("PM_Disk_IO")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_Disk_IO = Double.parseDouble(textList .item(0).getNodeValue().trim()); } if (name.equals("PM_Memory_RSS")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_Memory_RSS = Double.parseDouble(textList .item(0).getNodeValue().trim()); } if (name.equals("PM_Memory_Usage")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_Memory_Usage = Double .parseDouble(textList.item(0) .getNodeValue().trim()); } if (name.equals("PM_CPU_Usage")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_CPU_Usage = Double.parseDouble(textList .item(0).getNodeValue().trim()); } if (name.equals("PM_Threads")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_Threads = Integer.parseInt(textList .item(0).getNodeValue().trim()); } if (name.equals("PM_Download")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_Download = Double.parseDouble(textList .item(0).getNodeValue().trim()); } if (name.equals("PM_Upload")) { NodeList nl2 = nl.item(b).getChildNodes(); Element e2 = (Element) nl.item(b); nl2 = e2.getElementsByTagName("value"); textList = nl2.item(0).getChildNodes(); swPhase.PM_Upload = Double.parseDouble(textList .item(0).getNodeValue().trim()); } } Phases[p] = swPhase; }// end of if clause }// end of for loop with s var } catch (SAXParseException err) { System.out.println("** Parsing error" + ", line " + err.getLineNumber() + ", uri " + err.getSystemId()); System.out.println(" " + err.getMessage()); } catch (SAXException e) { Exception x = e.getException(); ((x == null) ? e : x).printStackTrace(); } catch (Throwable t) { t.printStackTrace(); } } public String TaskId; public SoftwarePhase[] Phases; }