juergen 2003/02/06 01:59:00
Modified:
testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor
XMLOutput.java TProcessors.java
Log:
fix an I18N bug in writing the protocol file. XMLOutput is now jdom based.
Revision Changes Path
1.6 +132 -66
jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/XMLOutput.java
Index: XMLOutput.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/XMLOutput.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XMLOutput.java 27 Nov 2002 13:47:02 -0000 1.5
+++ XMLOutput.java 6 Feb 2003 09:59:00 -0000 1.6
@@ -68,7 +68,9 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Hashtable;
-
+import java.util.Stack;
+import org.jdom.*;
+import org.jdom.output.XMLOutputter;
/**
@@ -80,13 +82,12 @@
public class XMLOutput {
- private Hashtable knownXMLStringsByThread = new Hashtable();
- private Hashtable level = new Hashtable();
- private static int LINE_FIT = 100;
+ private OutputElements elements = null;
private PrintStream xmlResult;
public XMLOutput(PrintStream out) {
xmlResult = out;
+ elements = new OutputElements();
}
public void writeException(Exception e) {
@@ -101,100 +102,165 @@
}
public void writeElementStart(String elementName, String attrName, String
attrValue) {
- putStringByThread(
- getStringByThread() +
- getIndend() + "<" + elementName + getAttribute(attrName,
attrValue) + ">");
- incrementLevelByThread();
+ Element element = new Element(elementName);
+ element.getAttributes().add(getAttribute(attrName, attrValue));
+ elements.push(element);
}
public void writeElementStart(String elementName) {
- writeElementStart(elementName, null, null);
+ elements.push(new Element(elementName));
}
public void writeElementEnd(String elementName) {
- decrementLevelByThread();
- putStringByThread(
- getStringByThread() +
- getIndend() + "</" + elementName + ">");
+ elements.pop();
}
public void writeElement(String elementName, String value) {
- value = TProcessors.replace(value, "<", "<"); // some specific XML
adoptions
- value = TProcessors.replace(value, ">", ">");
- writeElement(elementName, null, null, value);
+ elements.addElement(new Element(elementName).addContent(value));
}
public void writeElement(String elementName, String attrName, String attrValue,
String value) {
- putStringByThread(
- getStringByThread() +
- getIndend() + "<" + elementName + getAttribute(attrName, attrValue)
+ ">" +
- getIndend(value) + value +
- getIndend(value) + "</" + elementName + ">" );
+ Element element = new Element(elementName).addContent(value);
+ element.getAttributes().add(getAttribute(attrName, attrValue));
+ elements.addElement(element);
}
public void flush() {
- synchronized (xmlResult) {
- xmlResult.println();
- xmlResult.println(getStringByThread());
- xmlResult.println();
- }
- putStringByThread("");
+ try {
+ synchronized (xmlResult) {
+ xmlResult.println();
+ xmlResult.write(elements.getElementString().getBytes("UTF-8"));
+ xmlResult.println();
+ xmlResult.println();
+ }
+ } catch (java.io.IOException e) {e.printStackTrace();}
+
+ elements.delete();
}
- private String getStringByThread() {
- String result =
(String)knownXMLStringsByThread.get(Thread.currentThread().getName());
- if (result == null) {
- result = "";
- }
- return result;
+
+
+
+
+
+ private Attribute getAttribute(String attrName, String attrValue) {
+ return new Attribute(attrName, attrValue);
}
- private int getLevelByThread() {
- Integer result = (Integer)level.get(Thread.currentThread().getName());
- if (result == null) {
- result = new Integer(1);
+ /**************************************************************/
+ /* Inner class describe the Ouput element */
+ /**************************************************************/
+ private class OutputElement extends Stack {
+
+ private Element rootElement = null;
+
+ public OutputElement(Element rootElement) {
+ this.rootElement = rootElement;
+ push(rootElement);
+ }
+
+ public Element getRootElement() {
+ return rootElement;
}
- return result.intValue();
- }
- private void incrementLevelByThread() {
- level.put(Thread.currentThread().getName(), new
Integer(getLevelByThread()+1));
- }
- private void decrementLevelByThread() {
- level.put(Thread.currentThread().getName(), new
Integer(getLevelByThread()-1));
}
+ /****************************************************************/
+ /* Inner class describe the Ouput elements seperated by threads */
+ /****************************************************************/
+ private class OutputElements {
- private void putStringByThread(String result) {
- knownXMLStringsByThread.put(Thread.currentThread().getName(), result);
- }
+ private Hashtable elements = null;
+ public OutputElements() {
+ this.elements = new Hashtable();
+ }
- private String getIndend() {
- String result = "\n";
- for (int i = 0; i < getLevelByThread(); i++){
- result += " ";
+ public String getElementString() {
+ String result = "";
+ Element element = getRootElement();
+ if (element != null) {
+ result = getElementString(element);
+ }
+ return result;
}
- return result;
- }
- private String getIndend(String value) {
- String result = (value.length()>LINE_FIT?getIndend():"");
- return result;
- }
+ public void push(Element e) {
+ if (getElement() == null) {
+ elements.put(Thread.currentThread().getName(), new
OutputElement(e));
+ } else {
+ getElement().getChildren().add(e);
+
((OutputElement)elements.get(Thread.currentThread().getName())).push(e);
+ }
+ }
+
+
+ public void pop() {
+ if (getElement() != null && getElement() != getRootElement()) {
+
((OutputElement)elements.get(Thread.currentThread().getName())).pop();
+ }
+ }
+
+
+ public void addElement(Element e) {
+ if (getElement() == null) {
+ elements.put(Thread.currentThread().getName(), new
OutputElement(e));
+ } else {
+ getElement().getChildren().add(e);
+ }
+ }
+
+
+ public Element getElement() {
+ Element result = null;
+ OutputElement outElement =
(OutputElement)elements.get(Thread.currentThread().getName());
+ if (outElement == null) {
+ result = null;
+ } else {
+ result = (Element)outElement.peek();
+ }
+ return result;
+ }
+
+ public Element getRootElement() {
+ Element result = null;
+ OutputElement outElement =
(OutputElement)elements.get(Thread.currentThread().getName());
+ if (outElement == null) {
+ result = null;
+ } else {
+ result = outElement.getRootElement();
+ }
+ return result;
+ }
- private String getAttribute(String attrName, String attrValue) {
- String result = "";
- if (attrName != null) {
- result = " " + attrName + "=\"" + attrValue +"\"";
+
+ public void delete() {
+ if (getElement() != null) {
+ elements.remove(Thread.currentThread().getName());
+ }
}
- return result;
+
+ private String getElementString (Element e) {
+ XMLOutputter out = new XMLOutputter("\t", true, "UTF-8");
+ String result = null;
+
+ if (e == null) return "null";
+
+ try {
+ result = out.outputString (e);
+ }
+ catch (Exception ex) {ex.printStackTrace();}
+
+ return result;
+ }
+
+
}
1.45 +4 -6
jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/TProcessors.java
Index: TProcessors.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/testsuite/testsuite/junit/src/org/apache/slide/testsuite/testtools/tprocessor/TProcessors.java,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -r1.44 -r1.45
--- TProcessors.java 20 Jan 2003 11:34:22 -0000 1.44
+++ TProcessors.java 6 Feb 2003 09:59:00 -0000 1.45
@@ -436,7 +436,6 @@
xmlresult.writeElementStart("testCase");
xmlresult.writeElement("fileName", testfile.getAbsolutePath());
- xmlresult.flush();
try{
globalAbsolutePath = testfile.getAbsolutePath();
@@ -660,7 +659,6 @@
xmlresult.writeElement("result", (!result?"ERROR":"Success"));
xmlresult.writeElement("time", ((System.currentTimeMillis() - time)));
xmlresult.writeElementEnd("exceuteStep");
- xmlresult.flush();
return result;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]