package controller.merge.xmi.xclass; import java.io.File; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; 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; public class XmiMergeClassDiProcessor { // fields for DOM private DocumentBuilderFactory docFactory = DocumentBuilderFactory .newInstance(); private DocumentBuilder docBuilder; private Document umlDoc; private Element umlRootElement; // Add nodes to these two Element availablePage; Element children; public XmiMergeClassDiProcessor() { try { Initialize(); } catch (ParserConfigurationException e) { e.printStackTrace(); } } public void addEmfPageIdentifier(String fileName, String Id) { String href = fileName + ".notation#" + Id; Element emfPageIdentifier = umlDoc.createElement("emfPageIdentifier"); emfPageIdentifier.setAttribute("href", href); availablePage.appendChild(emfPageIdentifier); // Create another element emfPageIdentifier = umlDoc.createElement("emfPageIdentifier"); emfPageIdentifier.setAttribute("href", href); children.appendChild(emfPageIdentifier); } private void Initialize() throws ParserConfigurationException { docBuilder = docFactory.newDocumentBuilder(); // UML Header umlDoc = docBuilder.newDocument(); umlRootElement = umlDoc.createElement("di:SashWindowsMngr"); umlRootElement.setAttribute("xmi:version", "2.0"); umlRootElement.setAttribute("xmlns:xmi", "http://www.omg.org/XMI"); umlRootElement.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); umlRootElement.setAttribute("xmlns:di", "http://www.eclipse.org/papyrus/0.7.0/sashdi"); umlDoc.appendChild(umlRootElement); Element pageList = umlDoc.createElement("pageList"); umlRootElement.appendChild(pageList); // Hook nodes to this element availablePage = umlDoc.createElement("availablePage"); pageList.appendChild(availablePage); Element sashModel = umlDoc.createElement("sashModel"); sashModel.setAttribute("currentSelection", "//@sashModel/@windows.0/@children.0"); umlRootElement.appendChild(sashModel); Element windows = umlDoc.createElement("windows"); sashModel.appendChild(windows); Element childrenxsi = umlDoc.createElement("children"); childrenxsi.setAttribute("xsi:type", "di:TabFolder"); windows.appendChild(childrenxsi); // Hook nodes to this element children = umlDoc.createElement("children"); childrenxsi.appendChild(children); } public File GenerateFile(String fileName) { // write the content into xml file TransformerFactory transformerFactory = TransformerFactory .newInstance(); Transformer transformer; try { transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(umlDoc); File file = new File("C:\\temp\\" + fileName + ".di"); StreamResult result = new StreamResult(file); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(source, result); System.out.println("Di file created!"); return file; } catch (TransformerException e) { System.out.println("Failed Di file"); e.printStackTrace(); } return null; } }