@@ -31,8 +26,8 @@
*
* The XXX must be integer format, which is Tool version number.
*
- * For more detail, in wiki.
+ * For more detail, in
+ * wiki.
*
* @author Dapeng.Ni
*
@@ -52,36 +47,36 @@
}
// container class for removed class
- class RemovedField {
- public Class ownerClass;
- public String fieldname;
+ private class RemovedField {
+ private Class ownerClass;
+ private String fieldname;
- public RemovedField(Class ownerClass, String fieldname) {
+ private RemovedField(Class ownerClass, String fieldname) {
this.ownerClass = ownerClass;
this.fieldname = fieldname;
}
}
// container class for added class
- class AddedField {
- public Class ownerClass;
- public String fieldname;
- public Object defaultValue;
+ private class AddedField {
+ private Class ownerClass;
+ private String fieldname;
+ private String defaultValue;
- public AddedField(Class ownerClass2, String fieldname2, Object defaultValue2) {
- ownerClass = ownerClass2;
- fieldname = fieldname2;
- defaultValue = defaultValue2;
+ private AddedField(Class ownerClass, String fieldname, String defaultValue) {
+ this.ownerClass = ownerClass;
+ this.fieldname = fieldname;
+ this.defaultValue = defaultValue;
}
}
-
+
// container class for renamed class
- class RenamedField {
- public Class ownerClass;
- public String oldFieldname;
- public String newFieldname;
+ private class RenamedField {
+ private Class ownerClass;
+ private String oldFieldname;
+ private String newFieldname;
- public RenamedField(Class ownerClass2, String oldFieldname2, String newFieldname2) {
+ private RenamedField(Class ownerClass2, String oldFieldname2, String newFieldname2) {
ownerClass = ownerClass2;
oldFieldname = oldFieldname2;
newFieldname = newFieldname2;
@@ -106,10 +101,10 @@
* @param ownerClass
* @param fieldname
*/
- public void addField(Class ownerClass, String fieldname, Object defaultValue) {
+ public void addField(Class ownerClass, String fieldname, String defaultValue) {
addedFieldList.add(new AddedField(ownerClass, fieldname, defaultValue));
}
-
+
/**
* When a field is renamed in tool Hibernate POJO class, this method must be call in upXXXToYYY()/downXXXToYYY()
* methods.
@@ -128,91 +123,78 @@
* @throws JDOMException
* @throws IOException
*/
- public void transformXML(String toolFilePath) throws JDOMException, IOException {
+ public void transformXML(String toolFilePath) throws IOException {
File toolFile = new File(toolFilePath);
- SAXBuilder sax = new SAXBuilder();
- Document doc = sax.build(new FileInputStream(toolFile));
- Element root = doc.getRootElement();
- retrieveXML(root);
+ try {
+ DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+ Document doc = docBuilder.parse(new FileInputStream(toolFile));
+ Element root = doc.getDocumentElement();
+ retrieveXML(root);
- toolFile.renameTo(new File(toolFilePath + "_oldver"));
-
- File newToolFile = new File(toolFilePath);
- XMLOutputter output = new XMLOutputter();
- output.output(doc, new FileOutputStream(newToolFile));
+ toolFile.renameTo(new File(toolFilePath + "_oldver"));
+ File newToolFile = new File(toolFilePath);
+ FileUtil.writeXMLtoFile(doc, newToolFile);
+ } catch (Exception e) {
+ throw new IOException("Error while transforming XML", e);
+ }
}
- private void retrieveXML(Element root) throws JDOMException, IOException {
- // collect all removed fields in this class
- List clzRemoveFlds = new ArrayList();
+ private void retrieveXML(Element root) throws IOException {
for (RemovedField remove : removedFieldList) {
- if (StringUtils.equals(root.getName(), remove.ownerClass.getName())
- || StringUtils.equals(root.getAttributeValue("class"), remove.ownerClass.getName())) {
- clzRemoveFlds.add(remove.fieldname);
- ToolContentVersionFilter.log.debug("Field " + remove.fieldname + " in class "
- + remove.ownerClass.getName() + " is going to leave.");
+ if (StringUtils.equals(root.getNodeName(), remove.ownerClass.getName())
+ || StringUtils.equals(root.getAttribute("class"), remove.ownerClass.getName())) {
+
+ Node node = root.getFirstChild();
+ while (node != null) {
+ Node oldNode = node;
+ node = node.getNextSibling();
+ if (oldNode.getNodeName().equals(remove.fieldname)) {
+ root.removeChild(oldNode);
+ ToolContentVersionFilter.log.debug("Field " + remove.fieldname + " in class "
+ + remove.ownerClass.getName() + " was removed.");
+ }
+ }
}
}
+
// add all new fields for this class
for (AddedField added : addedFieldList) {
- if (StringUtils.equals(root.getName(), added.ownerClass.getName())) {
- Writer eleWriter = new StringWriter();
- XStream eleX = new XStream(new SunUnsafeReflectionProvider());
- eleX.addPermission(AnyTypePermission.ANY);
- eleX.toXML(added.defaultValue, eleWriter);
+ if (StringUtils.equals(root.getNodeName(), added.ownerClass.getName())) {
+ Element element = root.getOwnerDocument().createElement(added.fieldname);
+ element.setTextContent(added.defaultValue);
+ root.appendChild(element);
- SAXBuilder eleBuilder = new SAXBuilder();
- Document eledoc = eleBuilder.build(new StringReader(eleWriter.toString()));
- Element eleRoot = eledoc.getRootElement();
- eleRoot.setName(added.fieldname);
- eleRoot.detach();
- root.addContent(eleRoot);
-
ToolContentVersionFilter.log.debug("Field " + added.fieldname + " in class "
- + added.ownerClass.getName() + " is add by value " + added.defaultValue);
+ + added.ownerClass.getName() + " was added by value " + added.defaultValue);
}
}
-
+
// rename all marked fields for this class
for (RenamedField renamed : renamedFieldList) {
- if (StringUtils.equals(root.getName(), renamed.ownerClass.getName())) {
- for (Object child : root.getChildren()) {
- if (child instanceof Element) {
- Element ele = (Element) child;
-
- if (StringUtils.equals(ele.getName(), renamed.oldFieldname)) {
- ele.setName(renamed.newFieldname);
- ToolContentVersionFilter.log.debug("Field " + renamed.oldFieldname + " in class "
- + renamed.ownerClass.getName() + " is renamed to " + renamed.newFieldname);
- }
+ if (StringUtils.equals(root.getNodeName(), renamed.ownerClass.getName())) {
+ Node node = root.getFirstChild();
+ while (node != null) {
+ Node oldNode = node;
+ node = node.getNextSibling();
+ if (oldNode.getNodeName().equals(renamed.oldFieldname)) {
+ Element newElement = root.getOwnerDocument().createElement(renamed.newFieldname);
+ newElement.setTextContent(oldNode.getTextContent());
+ root.replaceChild(newElement, oldNode);
+ ToolContentVersionFilter.log.debug("Field " + renamed.oldFieldname + " in class "
+ + renamed.ownerClass.getName() + " was renamed to " + renamed.newFieldname);
}
}
-
}
}
// remove fields
- List