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, "<", "&lt;");  // some specific XML 
adoptions
  -        value = TProcessors.replace(value, ">", "&gt;");
  -        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]

Reply via email to