View Javadoc
1 package net.sourceforge.pmd; 2 3 import java.io.OutputStream; 4 import java.io.PrintStream; 5 import java.util.Enumeration; 6 import java.util.Iterator; 7 8 /*** 9 * Writes an XML file containing information about rule set and each rule within the rule set. 10 * 11 * @author Donald A. Leckie 12 * @since August 30, 2002 13 * @version $Revision: 1.9 $, $Date: 2003/03/14 19:03:45 $ 14 */ 15 public class RuleSetWriter { 16 17 private PrintStream m_outputStream; 18 private StringBuffer m_line = new StringBuffer(500); 19 private int m_indent; 20 21 /*** 22 ******************************************************************************* 23 * 24 * @param outputStream 25 */ 26 public RuleSetWriter(OutputStream outputStream) { 27 m_outputStream = new PrintStream(outputStream); 28 29 m_line.append("<?xml version=\"1.0\" ?>"); 30 outputLine(); 31 } 32 33 /*** 34 ******************************************************************************* 35 * 36 * @param ruleSet 37 */ 38 public void write(RuleSet ruleSet) { 39 // <ruleset name="xxxxxx" 40 indent(); 41 setupNewLine(); 42 m_line.append("<ruleset name=\""); 43 m_line.append(ruleSet.getName()); 44 m_line.append('"'); 45 46 // 47 // include="true"> 48 // 49 m_line.append(" include=\""); 50 m_line.append(ruleSet.include() ? "true" : "false"); 51 m_line.append("\">"); 52 outputLine(); 53 54 // <description> 55 // xxxxxxxxx 56 // </description> 57 indent(); 58 writeDescription(ruleSet.getDescription()); 59 outdent(); 60 61 // 62 // Write each rule. 63 // 64 Iterator rules = ruleSet.getRules().iterator(); 65 66 while (rules.hasNext()) { 67 write((Rule) rules.next()); 68 } 69 70 // </ruleset> 71 setupNewLine(); 72 m_line.append("</ruleset>"); 73 outputLine(); 74 outdent(); 75 } 76 77 /*** 78 ******************************************************************************* 79 * 80 * @param rule 81 */ 82 private void write(Rule rule) { 83 // Write a blank line to separate rules for easier reading. 84 m_outputStream.println(""); 85 86 // <rule name="xxxxxx" 87 indent(); 88 setupNewLine(); 89 m_line.append("<rule name=\""); 90 m_line.append(rule.getName()); 91 m_line.append('"'); 92 outputLine(); 93 94 // message="xxxxxx" 95 m_indent += 6; 96 setupNewLine(); 97 m_line.append("message=\""); 98 m_line.append(rule.getMessage()); 99 m_line.append('"'); 100 outputLine(); 101 102 // class="xxxx" 103 setupNewLine(); 104 m_line.append("class=\""); 105 m_line.append(rule.getClass().getName()); 106 m_line.append('"'); 107 outputLine(); 108 109 // include="true"> 110 setupNewLine(); 111 m_line.append("include=\""); 112 m_line.append(rule.include() ? "true" : "false"); 113 m_line.append("\">"); 114 outputLine(); 115 m_indent -= 6; 116 117 // <description> 118 // xxxxxxxxx 119 // </description> 120 indent(); 121 writeDescription(rule.getDescription()); 122 outdent(); 123 124 // <example> 125 // xxxxxxxxxxx 126 // </example> 127 indent(); 128 writeExample(rule.getExample()); 129 outdent(); 130 131 // <priority> 132 // xxx 133 // </priority> 134 indent(); 135 writePriority(rule.getPriority()); 136 outdent(); 137 138 // <properties> 139 // <property name="xxxx" value="yyyyy" /> 140 // </properties> 141 indent(); 142 writeProperties(rule); 143 outdent(); 144 145 // </ruleset> 146 setupNewLine(); 147 m_line.append("</rule>"); 148 outputLine(); 149 outdent(); 150 } 151 152 /*** 153 ******************************************************************************* 154 * 155 * @param description 156 */ 157 private void writeDescription(String description) { 158 // <description> 159 setupNewLine(); 160 m_line.append("<description>"); 161 outputLine(); 162 163 { 164 // xxxxxxxx 165 indent(); 166 setupNewLine(); 167 m_line.append(description); 168 outputLine(); 169 outdent(); 170 } 171 172 // </description> 173 setupNewLine(); 174 m_line.append("</description>"); 175 outputLine(); 176 } 177 178 /*** 179 ******************************************************************************* 180 * 181 * @param example 182 */ 183 private void writeExample(String example) { 184 // <example> 185 setupNewLine(); 186 m_line.append("<example>"); 187 outputLine(); 188 189 { 190 // xxxxxxxx 191 indent(); 192 setupNewLineWithoutIndent(); 193 m_line.append("<![CDATA["); 194 outputLine(); 195 setupNewLineWithoutIndent(); 196 m_line.append(example); 197 outputLine(); 198 setupNewLineWithoutIndent(); 199 m_line.append("]]>"); 200 outputLine(); 201 outdent(); 202 } 203 204 // </description> 205 setupNewLine(); 206 m_line.append("</example>"); 207 outputLine(); 208 } 209 210 /*** 211 ******************************************************************************* 212 * 213 * @param priority 214 */ 215 private void writePriority(int priority) { 216 // <priority> 217 setupNewLine(); 218 m_line.append("<priority>"); 219 outputLine(); 220 221 { 222 // xx 223 indent(); 224 setupNewLine(); 225 m_line.append(String.valueOf(priority)); 226 outputLine(); 227 outdent(); 228 } 229 230 // </priority> 231 setupNewLine(); 232 m_line.append("</priority>"); 233 outputLine(); 234 } 235 236 /*** 237 ******************************************************************************* 238 * 239 * @param rule 240 */ 241 private void writeProperties(Rule rule) { 242 // <properties> 243 setupNewLine(); 244 m_line.append("<properties>"); 245 outputLine(); 246 indent(); 247 248 RuleProperties properties = rule.getProperties(); 249 Enumeration keys = properties.keys(); 250 251 while (keys.hasMoreElements()) { 252 String name = (String) keys.nextElement(); 253 String value = properties.getValue(name); 254 String valueType = properties.getValueType(name); 255 256 // <property name="xxxxx" value="yyyyy" /> 257 setupNewLine(); 258 m_line.append("<property name=\""); 259 m_line.append(name); 260 m_line.append("\" value=\""); 261 m_line.append(value); 262 m_line.append("\" type=\""); 263 m_line.append(valueType); 264 m_line.append("\"/>"); 265 outputLine(); 266 } 267 268 outdent(); 269 setupNewLine(); 270 m_line.append("</properties>"); 271 outputLine(); 272 } 273 274 /*** 275 ******************************************************************************* 276 * 277 */ 278 private void indent() { 279 m_indent += 3; 280 } 281 282 283 /*** 284 ******************************************************************************* 285 * 286 */ 287 private void outdent() { 288 m_indent -= 3; 289 } 290 291 /*** 292 ******************************************************************************* 293 * 294 */ 295 private void setupNewLine() { 296 m_line.setLength(0); 297 298 for (int n = 0; n < m_indent; n++) { 299 m_line.append(' '); 300 } 301 } 302 303 /*** 304 ******************************************************************************* 305 * 306 */ 307 private void setupNewLineWithoutIndent() { 308 m_line.setLength(0); 309 } 310 311 /*** 312 ******************************************************************************* 313 * 314 */ 315 private void outputLine() { 316 m_outputStream.println(m_line.toString()); 317 } 318 }

This page was automatically generated by Maven