1 package csdl.jblanket.report; 2 3 import csdl.jblanket.JBlanketException; 4 import csdl.jblanket.report.element.ElementContentHandler; 5 import csdl.jblanket.report.element.ElementErrorHandler; 6 import csdl.jblanket.report.element.MethodSetsElement; 7 8 import java.io.ByteArrayOutputStream ; 9 import java.io.File ; 10 import java.io.FileInputStream ; 11 import java.io.FileOutputStream ; 12 import java.io.IOException ; 13 import java.io.OutputStream ; 14 import java.io.PrintWriter ; 15 import java.net.URL ; 16 import java.util.Iterator ; 17 import java.util.Map ; 18 19 import javax.xml.parsers.DocumentBuilder ; 20 import javax.xml.parsers.DocumentBuilderFactory ; 21 import javax.xml.transform.Result ; 24 import javax.xml.transform.Source ; 25 import javax.xml.transform.Transformer ; 26 import javax.xml.transform.TransformerFactory ; 27 import javax.xml.transform.dom.DOMSource ; 28 import javax.xml.transform.stream.StreamResult ; 29 import javax.xml.transform.stream.StreamSource ; 30 31 import org.apache.tools.ant.types.EnumeratedAttribute; 32 import org.apache.xerces.parsers.SAXParser; 33 import org.w3c.dom.Document ; 34 import org.xml.sax.InputSource ; 35 import org.xml.sax.SAXException ; 36 import org.xml.sax.XMLReader ; 37 38 62 public class AggregateTransformer { 63 64 65 private Map reportCategories; 66 67 private String jblanketDir; 68 69 private File toDir; 70 71 private String format; 72 73 74 public static final String FRAMES = "frames"; 75 76 public static final String NOFRAMES = "noframes"; 77 78 79 private MethodSetsElement methodSets = new MethodSetsElement(); 80 81 87 public static class Format extends EnumeratedAttribute { 88 89 94 public String [] getValues() { 95 return new String []{FRAMES, NOFRAMES}; 96 } 97 } 98 99 107 public AggregateTransformer(Map reportCategories, String reportFormat, 108 String jblanketDir, File toDir) { 109 super(); 110 111 this.reportCategories = reportCategories; 112 113 Format newFormat = new Format(); 115 newFormat.setValue(reportFormat); 116 this.format = newFormat.getValue(); 117 118 this.jblanketDir = jblanketDir; 120 121 this.toDir = toDir; 123 } 124 125 135 protected void createAggregateFile(File outFile) throws JBlanketException { 136 137 Iterator i = this.reportCategories.keySet().iterator(); 139 while (i.hasNext()) { 140 String key = (String ) i.next(); 141 File nextFile = new File ((String ) this.reportCategories.get(key)); 142 if (!(key.equals("excludedIndividual") && !nextFile.exists())) { 144 parseXmlFile(nextFile, key); 145 } 146 } 147 148 writeXmlFile(); 149 } 150 151 158 private void parseXmlFile(File file, String methodCategory) throws JBlanketException { 159 160 XMLReader reader = new SAXParser(); 162 172 reader.setContentHandler(new ElementContentHandler(this.methodSets, methodCategory)); 174 reader.setErrorHandler(new ElementErrorHandler()); 176 178 InputSource inputSource = null; 179 try { 180 inputSource = new InputSource (new FileInputStream (file)); 181 } 182 catch (IOException e) { 183 throw new JBlanketException("Unable to open file " + file); 184 } 185 186 inputSource.setSystemId(file.getAbsolutePath()); 187 try { 188 reader.parse(inputSource); 189 } 190 catch (SAXException e) { 191 throw new JBlanketException("Unable to parse file " + file, e); 192 } 193 catch (IOException e) { 194 throw new JBlanketException("Unable to read file " + file, e); 195 } 196 } 197 198 203 private void writeXmlFile() throws JBlanketException { 204 205 PrintWriter writer = null; 206 File file = new File (jblanketDir, "COVER-MethodSets.xml"); 207 try { 208 writer = new PrintWriter (new FileOutputStream (file)); 209 } 210 catch (IOException e) { 211 throw new JBlanketException("Unable to write to file " + file.getAbsoluteFile(), e); 212 } 213 214 this.methodSets.write(writer); 215 216 writer.close(); 217 } 218 219 225 protected void transformXmlToHtml(String xmlFileName) throws JBlanketException { 226 227 OutputStream ostream = null; 228 229 String xslFileName = "jblanket-frames.xsl"; 231 if (NOFRAMES.equals(this.format)) { 232 xslFileName = "jblanket-noframes.xsl"; 233 } 234 235 URL xslUrl = getClass().getResource(xslFileName); 236 if (xslUrl == null) { 237 String message = "Could not find jar resource " + xslFileName + ";\n" 238 + "Add jblanket.jar to classpath"; 239 throw new JBlanketException(message); 240 } 241 242 try { 244 245 TransformerFactory tfactory = TransformerFactory.newInstance(); 246 Source xslSource = new StreamSource (xslUrl.toExternalForm()); 247 Transformer tformer = tfactory.newTransformer(xslSource); 249 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 250 DocumentBuilder builder = factory.newDocumentBuilder(); 252 Document doc = builder.parse(new File (xmlFileName)); 254 Source xmlSource = new DOMSource (doc); 255 256 if (FRAMES.equals(this.format)) { 257 ostream = new ByteArrayOutputStream (); 258 } 259 else { 260 ostream = new FileOutputStream (new File (toDir.getAbsolutePath(), 261 "jblanket-noframes.html")); 262 } 263 264 tformer.setParameter("output.dir", toDir.getAbsolutePath()); 265 Result result = new StreamResult (ostream); 266 tformer.transform(xmlSource, result); 268 } 269 catch (Exception e) { 270 throw new JBlanketException("Unable to transform XML to HTML", e); 271 } 272 finally { 273 try { 274 if (ostream != null) { 275 ostream.close(); 276 } 277 } 278 catch (IOException e) { 279 throw new JBlanketException("Could not close OutputStream for " + xmlFileName, e); 280 } 281 } 282 } 283 } 284 | Popular Tags |