Clover coverage report - XStream - 0.1
Coverage timestamp: Fri Oct 24 2003 13:50:04 BST
file stats: LOC: 103   Methods: 11
NCLOC: 87   Classes: 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
PrettyPrintXMLWriter.java 100% 100% 100% 100%
coverage
 1   
 package com.thoughtworks.xstream.xml.text;
 2   
 
 3   
 import com.thoughtworks.xstream.xml.XMLWriter;
 4   
 
 5   
 import java.io.PrintWriter;
 6   
 import java.io.Writer;
 7   
 import java.util.LinkedList;
 8   
 
 9   
 public class PrettyPrintXMLWriter implements XMLWriter {
 10   
 
 11   
     private PrintWriter writer;
 12   
     private LinkedList elementStack = new LinkedList();
 13   
     private boolean tagInProgress;
 14   
     private int depth;
 15   
     private String lineIndenter;
 16   
     private boolean readyForNewLine;
 17   
     private boolean tagIsEmpty;
 18   
 
 19  46
     public PrettyPrintXMLWriter(PrintWriter writer, String lineIndenter) {
 20  46
         this.writer = writer;
 21  46
         this.lineIndenter = lineIndenter;
 22   
     }
 23   
 
 24  1
     public PrettyPrintXMLWriter(Writer writer, String lineIndenter) {
 25  1
         this(new PrintWriter(writer), lineIndenter);
 26   
     }
 27   
 
 28  45
     public PrettyPrintXMLWriter(PrintWriter writer) {
 29  45
         this(writer, "  ");
 30   
     }
 31   
 
 32  45
     public PrettyPrintXMLWriter(Writer writer) {
 33  45
         this(new PrintWriter(writer));
 34   
     }
 35   
 
 36  159
     public void startElement(String name) {
 37  159
         tagIsEmpty = false;
 38  159
         finishTag();
 39  159
         write("<");
 40  159
         write(name);
 41  159
         elementStack.addLast(name);
 42  159
         tagInProgress = true;
 43  159
         depth++;
 44  159
         readyForNewLine = true;
 45  159
         tagIsEmpty = true;
 46   
     }
 47   
 
 48  97
     public void writeText(String text) {
 49  97
         readyForNewLine = false;
 50  97
         tagIsEmpty = false;
 51  97
         finishTag();
 52  97
         text = text.replaceAll("&", "&amp;");
 53  97
         text = text.replaceAll("<", "&lt;");
 54  97
         text = text.replaceAll(">", "&gt;");
 55  97
         write(text);
 56   
     }
 57   
 
 58  10
     public void addAttribute(String key, String value) {
 59  10
         write(" ");
 60  10
         write(key);
 61  10
         write("=\"");
 62  10
         write(value);
 63  10
         write("\"");
 64   
     }
 65   
 
 66  159
     public void endElement() {
 67  159
         depth--;
 68  159
         if (tagIsEmpty) {
 69  8
             write("/");
 70  8
             readyForNewLine = false;
 71  8
             finishTag();
 72  8
             elementStack.removeLast();
 73   
         } else {
 74  151
             finishTag();
 75  151
             write("</" + elementStack.removeLast() + ">");
 76   
         }
 77  159
         readyForNewLine = true;
 78   
     }
 79   
 
 80  1148
     private void write(String str) {
 81  1148
         writer.write(str);
 82   
     }
 83   
 
 84  415
     private void finishTag() {
 85  415
         if (tagInProgress) {
 86  159
             write(">");
 87   
         }
 88  415
         tagInProgress = false;
 89  415
         if (readyForNewLine) {
 90  167
             endOfLine();
 91   
         }
 92  415
         readyForNewLine = false;
 93  415
         tagIsEmpty = false;
 94   
     }
 95   
 
 96  160
     protected void endOfLine() {
 97  160
         write("\n");
 98  160
         for (int i = 0; i < depth; i++) {
 99  205
             write(lineIndenter);
 100   
         }
 101   
     }
 102   
 }
 103