package net.ms.designer.editors.component.tools;
import java.io.File;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import net.ms.designer.core.MsElement;
import net.ms.designer.core.MsProject;
import net.ms.designer.editors.component.models.BizComponent;
import net.ms.designer.editors.component.models.CompDiagram;
import net.ms.designer.editors.component.models.Component;
import net.ms.designer.editors.component.models.EnumComponent;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
public class WriteToProjectXML
{
Object type;
MsProject project;
MsElement element;
public WriteToProjectXML()
{
}
public WriteToProjectXML(MsProject project,Object type)
{
this.project = project;
this.type = ((MsElement)type).getContainer();
this.element = (MsElement)type;
}
public void accessXMLFile(String file)throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
db = dbf.newDocumentBuilder();
Document doc = null;
File f = new File(file);
if(f.exists())
{
doc = db.parse(file);
doc.normalize();
}
CompDiagram diagram = (CompDiagram)type;
List nodes = diagram.getNodes();
NodeList list = doc.getElementsByTagName("package");
for(int k = 0; k < nodes.size(); k++)
{
if(nodes.get(k) instanceof BizComponent)
{
Element component = doc.createElement("component");
Component node = (Component)nodes.get(k);
// name�����
Element compname = doc.createElement("name");
Text compname_model = doc.createTextNode(node.getName());
compname.appendChild(compname_model);
component.appendChild(compname);
// iname����ʻ�����
if(!node.getIname().equals(""))
{
Element compiname = doc.createElement("iname");
CDATASection compiname_model = doc.createCDATASection(node.getIname());
compiname.appendChild(compiname_model);
component.appendChild(compiname);
}
// desc��������
if(!node.getDesc().equals(""))
{
Element compdesc = doc.createElement("desc");
CDATASection compdesc_model = doc.createCDATASection(node.getDesc());
compdesc.appendChild(compdesc_model);
component.appendChild(compdesc);
}
StringBuffer sb = new StringBuffer(project.getProjectName());
sb.append(".");
sb.append(((MsElement)element).getNodeName());
sb.append(".");
sb.append(node.getName());
// path�·��(xml�ļ���)
Element comppath = doc.createElement("path");
// CDATASection comppath_model = doc.createCDATASection(sb.toString());
CDATASection comppath_model = doc.createCDATASection(node.getComponentID());
comppath.appendChild(comppath_model);
component.appendChild(comppath);
for(int i = 0 ; i < list.getLength(); i++)
{
//select which package to insert by checking the package name
if(((Element)((Element)list.item(i)).getElementsByTagName("name").item(0))
.getFirstChild().getNodeValue().equals(((MsElement)element).getNodeName()))
{
NodeList comps = ((Element)list.item(i)).getElementsByTagName("component");
boolean flag = true;
for(int j = 0; j < comps.getLength() ; j++ )
{
boolean canDo = ((Element)(comps.item(j))).getElementsByTagName("name").item(0).getFirstChild()
.getNodeValue().equals(node.getName());
if(canDo)
{
flag = false;
break;
}
else
{
flag = true;
}
}
if(flag)
{
((Element)list.item(i)).appendChild(component);
}
}
}
}
else if(nodes.get(k) instanceof EnumComponent)
{
Element component = doc.createElement("enumeration");
Component node = (Component)nodes.get(k);
// name�����
Element compname = doc.createElement("name");
Text compname_model = doc.createTextNode(node.getName());
compname.appendChild(compname_model);
component.appendChild(compname);
// iname����ʻ�����
if(!node.getIname().equals(""))
{
Element compiname = doc.createElement("iname");
CDATASection compiname_model = doc.createCDATASection(node.getIname());
compiname.appendChild(compiname_model);
component.appendChild(compiname);
}
// desc��������
if(!node.getDesc().equals(""))
{
Element compdesc = doc.createElement("desc");
CDATASection compdesc_model = doc.createCDATASection(node.getDesc());
compdesc.appendChild(compdesc_model);
component.appendChild(compdesc);
}
StringBuffer sb = new StringBuffer(project.getProjectName());
sb.append(".");
sb.append(((MsElement)element).getNodeName());
sb.append(".");
sb.append(node.getName());
// path�·��(xml�ļ���)
Element comppath = doc.createElement("path");
// CDATASection comppath_model = doc.createCDATASection(sb.toString());
CDATASection comppath_model = doc.createCDATASection(node.getComponentID());
comppath.appendChild(comppath_model);
component.appendChild(comppath);
for(int i = 0 ; i < list.getLength(); i++)
{
//select which package to insert by checking the package name
if(((Element)((Element)list.item(i)).getElementsByTagName("name").item(0))
.getFirstChild().getNodeValue().equals(((MsElement)element).getNodeName()))
{
NodeList enums = ((Element)list.item(i)).getElementsByTagName("enumeration");
boolean flag = true;
for(int j = 0; j < enums.getLength() ; j++ )
{
boolean canDo = ((Element)(enums.item(j))).getElementsByTagName("name").item(0).getFirstChild()
.getNodeValue().equals(node.getName());
if(canDo)
{
flag = false;
break;
}
else
{
flag = true;
}
}
if(flag)
{
((Element)list.item(i)).appendChild(component);
}
}
}
}
}
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new java.io.File(file));
transformer.transform(source, result);
}
/**
*
* @param file
* @param type
* @param name
* @throws Exception
*/
public void doDelete(String file , String type , String name , String packageName) throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
db = dbf.newDocumentBuilder();
Document doc = null;
File f = new File(file);
if(f.exists())
{
doc = db.parse(file);
doc.normalize();
}
NodeList list = doc.getElementsByTagName(type);
for(int i = 0 ; i < list.getLength() ; i++)
{
if(((Element)list.item(i)).getElementsByTagName("name").item(0)
.getFirstChild().getNodeValue().equals(name))
{
NodeList packs = doc.getElementsByTagName("package");
for(int j = 0 ; j < packs.getLength() ; j++)
{
if(((Element)packs.item(j)).getElementsByTagName("name").item(0)
.getFirstChild().getNodeValue().equals(packageName))
{
packs.item(j).removeChild(list.item(i));
}
}
}
}
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new java.io.File(file));
transformer.transform(source, result);
}
/**
*
* @param file
* @param type
* @param tag
* @param oldText
* @param newText
* @throws Exception
*/
public void changeText(String file , String type , String tag , String oldText , String newText) throws Exception
{
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = null;
db = dbf.newDocumentBuilder();
Document doc = null;
File f = new File(file);
if(f.exists())
{
doc = db.parse(file);
doc.normalize();
}
NodeList list = doc.getElementsByTagName(type);
for(int i = 0 ; i < list.getLength() ; i++)
{
if(((Element)list.item(i)).getElementsByTagName(tag).item(0)
.getFirstChild().getNodeValue().equals(oldText))
{
((Element)list.item(i)).getElementsByTagName(tag).item(0)
.getFirstChild().setNodeValue(newText);
}
}
TransformerFactory tFactory =TransformerFactory.newInstance();
Transformer transformer = tFactory.newTransformer();
DOMSource source = new DOMSource(doc);
StreamResult result = new StreamResult(new java.io.File(file));
transformer.transform(source, result);
}
}