buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java
--- a/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java Wed Jun 16 16:51:40 2010 +0300
+++ b/buildframework/helium/sf/java/diamonds/src/com/nokia/helium/diamonds/XMLMerger.java Fri Aug 13 14:59:05 2010 +0300
@@ -19,12 +19,13 @@
package com.nokia.helium.diamonds;
import java.io.File;
+import java.io.InputStream;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
import java.util.Iterator;
import java.util.List;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
import org.apache.log4j.Logger;
import org.dom4j.Attribute;
@@ -41,9 +42,10 @@
*/
public class XMLMerger {
private Logger log = Logger.getLogger(getClass());
- private File merge;
+ private InputStream mergeStream;
private Document doc;
private Element root;
+ private File outputFile;
/**
* Create an XMLMerger, the merge file will be used as input and output.
@@ -51,18 +53,40 @@
* @param merge
* @throws XMLMergerException
*/
- public XMLMerger(File merge) throws XMLMergerException {
- log.debug("Merging into: " + merge.getAbsolutePath());
+ public XMLMerger(InputStream stream, File file) throws XMLMergerException {
try {
- this.merge = merge;
+ outputFile = file;
+ mergeStream = stream;
SAXReader reader = new SAXReader();
- doc = reader.read(merge);
+ doc = reader.read(mergeStream);
root = doc.getRootElement();
} catch (DocumentException e) {
throw new XMLMergerException(e.getMessage());
}
}
+
+ public void merge(InputStream stream) throws XMLMergerException {
+ try {
+ SAXReader reader = new SAXReader();
+ Document dataDoc = reader.read(stream);
+ merge(dataDoc);
+ } catch (DocumentException e) {
+ throw new XMLMergerException(e.getMessage());
+ }
+ }
+ private void merge(Document dataDoc) throws XMLMergerException {
+ Element dataRoot = dataDoc.getRootElement();
+ if (!root.getName().equals(dataRoot.getName())) {
+ throw new XMLMergerException(
+ "Trying to merge incompatible xml format ('"
+ + root.getName() + "'!='" + dataRoot.getName()
+ + "')");
+ }
+ mergeNode(root, dataRoot);
+ write();
+
+ }
/**
* Add all sub element of data file into the merged file. If the root
* element name is different for the merged file an XMLMergerException is
@@ -78,14 +102,7 @@
SAXReader reader = new SAXReader();
Document dataDoc = reader.read(data);
Element dataRoot = dataDoc.getRootElement();
- if (!root.getName().equals(dataRoot.getName())) {
- throw new XMLMergerException(
- "Trying to merge incompatible xml format ('"
- + root.getName() + "'!='" + dataRoot.getName()
- + "')");
- }
- mergeNode(root, dataRoot);
- write();
+ merge(dataDoc);
} catch (DocumentException e) {
throw new XMLMergerException(e.getMessage());
}
@@ -131,20 +148,24 @@
@SuppressWarnings("unchecked")
protected boolean areSame(Element a, Element b) {
log.debug("areSame:" + a + " <=> " + b);
- if (!a.getName().equals(b.getName()))
+ if (!a.getName().equals(b.getName())) {
return false;
+ }
log.debug("same attribute list size?");
- if (a.attributes().size() != b.attributes().size())
+ if (a.attributes().size() != b.attributes().size()) {
return false;
+ }
log.debug("same attribute list?");
for (Iterator<Attribute> at = a.attributes().iterator(); at.hasNext();) {
Attribute attra = at.next();
Attribute attrb = b.attribute(attra.getName());
- if (attrb == null || !attra.getValue().equals(attrb.getValue()))
+ if (attrb == null || !attra.getValue().equals(attrb.getValue())) {
return false;
+ }
}
- if (!a.getTextTrim().equals(b.getTextTrim()))
+ if (!a.getTextTrim().equals(b.getTextTrim())) {
return false;
+ }
return true;
}
@@ -153,9 +174,8 @@
* @throws XMLMergerException
*/
protected void write() throws XMLMergerException {
- log.debug("Writing " + merge.getAbsolutePath());
try {
- FileOutputStream fos = new FileOutputStream(merge);
+ FileOutputStream fos = new FileOutputStream(outputFile);
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(fos, format);
writer.write(doc);