package test.model;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import jdepend.framework.exception.JDependException;
import jdepend.framework.util.FileUtil;
import jdepend.model.Component;
import jdepend.model.component.modelconf.ComponentConf;
import jdepend.model.component.modelconf.JavaPackageComponentModelConf;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer;
public class ComponentModelsFormatConvert {
/**
* @param args
* @throws JDependException
*/
public static void main(String[] args) throws JDependException {
String dirName = "C:/Users/user/ks/cooper/workspace/conf/componentconf/";
File dir = new File(dirName);
for (String directoryFile : dir.list()) {
if (directoryFile.endsWith(".xml")) {
save(loadComponentModelConfs(dirName + directoryFile), dirName + directoryFile);
}
}
}
private static Map<String, JavaPackageComponentModelConf> loadComponentModelConfs(String fileName) throws JDependException {
Map<String, JavaPackageComponentModelConf> componentModelConfs = new LinkedHashMap<String, JavaPackageComponentModelConf>();
JavaPackageComponentModelConf componentModelConf;
Properties componentsInfo = new Properties();
FileUtil.readFileContentXML(fileName, componentsInfo);
String[] packageNames;
ArrayList<String> packageInfo;
String keyInfo;
String componentModelName;
String componentName;
int layer;
int componentModelNamePos;
int componentNamePos;
for (Object key : componentsInfo.keySet()) {
keyInfo = (String) key;
componentModelNamePos = keyInfo.indexOf(',');
componentModelName = keyInfo.substring(0, componentModelNamePos);
componentNamePos = keyInfo.indexOf(',', componentModelNamePos + 1);
if (componentNamePos != -1) {
componentName = keyInfo.substring(componentModelNamePos + 1, componentNamePos);
layer = Integer.parseInt(keyInfo.substring(componentNamePos + 1));
} else {
componentName = keyInfo.substring(componentModelNamePos + 1);
layer = Component.UndefinedComponentLevel;
}
packageNames = ((String) componentsInfo.get(key)).split(",");
packageInfo = new ArrayList<String>(packageNames.length);
for (int i = 0; i < packageNames.length; i++) {
packageInfo.add(packageNames[i]);
}
if (!componentModelConfs.containsKey(componentModelName)) {
componentModelConf = new JavaPackageComponentModelConf(componentModelName);
componentModelConf.addComponentConf(componentName, layer, packageInfo);
componentModelConfs.put(componentModelName, componentModelConf);
} else {
componentModelConfs.get(componentModelName).addComponentConf(componentName, layer, packageInfo);
}
}
return componentModelConfs;
}
public static void save(Map<String, JavaPackageComponentModelConf> componentModelConfs, String fileName)
throws JDependException {
if (componentModelConfs != null && componentModelConfs.size() > 0) {
String group = fileName.substring(fileName.indexOf('_') + 1, fileName.indexOf('.'));
try {
// Document-->Node
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
Element root = document.createElement("componentModels");
root.setAttribute("group", group);// 添加group属性
for (String componentModelName : componentModelConfs.keySet()) {
Element nelement = document.createElement("componentModel");// 元素节点
nelement.setAttribute("name", componentModelName);// 添加group属性
// 添加组件信息
for (ComponentConf componentConf : componentModelConfs.get(componentModelName).getComponentConfs()) {
Element selement = document.createElement("component");// 组件节点
selement.setAttribute("name", componentConf.getName());
selement.setAttribute("layer", String.valueOf(componentConf.getLayer()));
for (String packageName : componentConf.getItemIds()) {
Element eelement = document.createElement("package");
eelement.setTextContent(packageName);
selement.appendChild(eelement);
}
nelement.appendChild(selement);
}
// 添加未包含的packages
List<String> ignorePackages = componentModelConfs.get(componentModelName).getIgnoreItems();
if (ignorePackages != null && ignorePackages.size() > 0) {
Element ielements = document.createElement("ignorePackages");
for (String ignorePackage : ignorePackages) {
Element ielement = document.createElement("package");
ielement.setTextContent(ignorePackage);
ielements.appendChild(ielement);
}
nelement.appendChild(ielements);
}
root.appendChild(nelement);
}
output(root, fileName);
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
} else {
FileUtil.deleteFile(fileName);
}
}
private static void output(Node node, String filename) {
try {
PrintWriter pWriter = new PrintWriter(new java.io.FileOutputStream(filename));
XMLSerializer serl = new XMLSerializer(pWriter, new OutputFormat("xml", "UTF-8", true));// 这里的参数(TRUE)表示格式化为自动换行
serl.serialize(node);
pWriter.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}