EMMA Coverage Report (generated Wed Dec 16 17:19:59 CET 2009)
[all classes][org.sourceforge.xradar.statics]

COVERAGE SUMMARY FOR SOURCE FILE [Statics.java]

nameclass, %method, %block, %line, %
Statics.java100% (1/1)64%  (7/11)68%  (374/547)66%  (57/86)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class Statics100% (1/1)64%  (7/11)68%  (374/547)66%  (57/86)
closeProducts (MergeProduct): void 0%   (0/1)0%   (0/12)0%   (0/5)
copyStaticResourcesToWebSite (String, String): void 0%   (0/1)0%   (0/12)0%   (0/4)
copyXmlDataToWebsite (String): void 0%   (0/1)0%   (0/70)0%   (0/13)
getNormalizedReport (): String 0%   (0/1)0%   (0/3)0%   (0/1)
executePostProcessing (String, ReleaseData, Param): MergeProduct 100% (1/1)74%  (125/168)86%  (18/21)
processStep (InputSource, String, Preambule, String): InputStream 100% (1/1)75%  (43/57)82%  (9/11)
createPostProcessPreambule (ReleaseData, Param): Preambule 100% (1/1)76%  (59/78)89%  (8/9)
<static initializer> 100% (1/1)100% (14/14)100% (4/4)
Statics (): void 100% (1/1)100% (8/8)100% (4/4)
createDirectory (): void 100% (1/1)100% (36/36)100% (4/4)
setDocsHome (String): void 100% (1/1)100% (89/89)100% (10/10)

1/**
2 * BSD-style license; for more info see http://xradar.sourceforge.net/license.html
3 */
4package org.sourceforge.xradar.statics;
5 
6import java.io.File;
7import java.io.FileInputStream;
8import java.io.FileNotFoundException;
9import java.io.FileOutputStream;
10import java.io.IOException;
11import java.io.InputStream;
12import java.io.StringReader;
13import java.net.MalformedURLException;
14import java.net.URL;
15import java.util.logging.Logger;
16 
17import javax.xml.transform.stream.StreamResult;
18 
19import org.sourceforge.xradar.DefaultReportValues;
20import org.sourceforge.xradar.XRadarException;
21import org.sourceforge.xradar.config.ReleaseData;
22import org.sourceforge.xradar.util.FileUtils;
23import org.sourceforge.xradar.util.StreamUtils;
24import org.sourceforge.xradar.util.XRadarUtils;
25import org.xml.sax.InputSource;
26 
27/**
28 * This classes is "launcher" to execute every merging needed to synthesize the radar-normalized report.
29 * Then, it lanches the proper xslt transformation to generate the statics report's website.
30 *
31 * @author rpelisse, belaran@gmail.com
32 *
33 */
34public class Statics extends MergeReportEngine
35{
36        private static final Logger logger = Logger.getLogger(Statics.class.getSimpleName());
37        // Parameters name for XSLT stylesheets
38        public static final        String TEST_ENABLED = "test-enabled";
39        public static final String XML_REPORT_DIRECTORY = "target-directory";
40        public static final String         JAVADOC_ENABLED = "java-doc-configured";
41        public static final String         JAVADOC_ROOT = "java-doc-root";
42        public static final String         JAVA2HTML_ROOT = "java2html-root";
43 
44        // Internal XSLT stylesheet definition
45        private static final String POSTPROCESS = DefaultReportValues.getString("radar.internal.postprocessor");
46        private static final String NORMALIZE = DefaultReportValues.getString("radar.internal.normalize.report");
47        private static final String QUALITY = DefaultReportValues.getString("radar.internal.finalization");
48        private static final String XML_DIRECTORY = "xml";
49 
50        private static final String QUALITY_DIRECTORY = "reports";
51 
52        private String systemQuality;
53        private String normalizedReport;
54        private String masterReport;
55 
56        /** 
57         * <p>Default constructor:
58         *                 <ol>
59         *                                 <li>create logger ;</li>
60         *              <li>initialized XML Catalog ; </li>
61         *                                 <li>load supported tools list.</li>
62         *     </ol>
63         * </p>
64         */
65        public Statics()
66        {
67                super.initializedXmlCatalog(true);
68                loadSupportedToolsList();
69        }
70 
71        @Override
72        public void setDocsHome(String docsHome) throws XRadarException
73        {
74                super.setDocsHome(docsHome);
75                systemQuality = this.getDocsHome() + SYSTEM_FILE_SEPARATOR + XML_DIRECTORY + SYSTEM_FILE_SEPARATOR + QUALITY_DIRECTORY + SYSTEM_FILE_SEPARATOR + SYSTEM_QUALITY_REPORT;
76                normalizedReport = this.getDocsHome() + SYSTEM_FILE_SEPARATOR + XML_DIRECTORY + SYSTEM_FILE_SEPARATOR + NORMALIZED_REPORT_NAME;
77                masterReport = this.getDocsHome() + SYSTEM_FILE_SEPARATOR + XML_DIRECTORY + SYSTEM_FILE_SEPARATOR + MASTER_REPORT_NAME;
78                if ( this.isDebug() )
79                {
80                        logger.fine("Target files:");
81                        logger.fine("\tQuality System:"         + systemQuality);
82                        logger.fine("\tNormalized report:"  + normalizedReport);
83                }
84                createDirectory();
85        }
86 
87        private void createDirectory() throws XRadarException
88        {
89                FileUtils.createDir(this.getDocsHome());
90                FileUtils.createDir(this.getDocsHome() + SYSTEM_FILE_SEPARATOR + "xml" + SYSTEM_FILE_SEPARATOR);
91                FileUtils.createDir(this.getDocsHome() + SYSTEM_FILE_SEPARATOR + "xml" + SYSTEM_FILE_SEPARATOR + "reports" + SYSTEM_FILE_SEPARATOR);
92        }
93 
94        /*
95         * Create the appropriate XSL Preambule representation based on data extracted
96         * from both ReleaseData object and the RadarConfig one.
97         *
98         * @param releaseData
99         * @param radarConfig
100         * @return
101         */
102        private Preambule createPostProcessPreambule(ReleaseData releaseData, Param radarConfig)
103        {
104                Preambule preambule = new Preambule();
105                preambule.getParams().put(radarConfig.getName(),radarConfig);
106                preambule.getParams().put(RELEASE_DATE,new Param(RELEASE_DATE,releaseData.getDate()));
107                preambule.getParams().put(RELEASE_SYSTEM,new Param(RELEASE_SYSTEM,releaseData.getSystem()));
108                preambule.getParams().put(RELEASE_VERSION,new Param(RELEASE_VERSION,releaseData.getVersion()));
109                if (XRadarUtils.isRunningOnWindowsOS()) 
110                        preambule.getParams().put(DOCS_HOME,new Param(DOCS_HOME,SYSTEM_FILE_SEPARATOR + this.getDocsHome()));
111                else
112                        preambule.getParams().put(DOCS_HOME,new Param(DOCS_HOME,this.getDocsHome()));        
113                return preambule;
114        }
115 
116        /**
117         *        Do the xradar post processing and generate the 3 files xradar requires to build the website
118         *        <ol>
119         *                <li>masterreport</li>
120         *                <li>system-quality</li>
121         *                <li>radar-normalized</li>
122         *        </ol>
123         * @param inputXml
124         * @param releaseData
125         * @param radarConfig
126         * @return
127         * @throws XRadarException
128         */
129        public MergeProduct executePostProcessing(String inputXml,ReleaseData releaseData, Param radarConfig) throws XRadarException
130        {
131                String currentTargetFile = masterReport;
132                try
133                {
134                        MergeProduct products = new MergeProduct();
135                        // post processmaster
136                        products.setMasterReport(processStep(                new InputSource( new StringReader (inputXml)),
137                                        POSTPROCESS,
138                                        createPostProcessPreambule(releaseData,radarConfig),
139                                        masterReport));
140                        products.setMasterReportFilename(masterReport);
141                        FileUtils.checkFileNotEmpty(masterReport);
142                        // Normalize XML file
143                        products.setRadarNormalized(processStep(        new InputSource(new FileInputStream(masterReport)),
144                                        NORMALIZE,
145                                        createPostProcessPreambule(releaseData,radarConfig),
146                                        normalizedReport));
147                        products.setRadarNormalizedFilename(normalizedReport);
148                        currentTargetFile = normalizedReport;
149                        FileUtils.checkFileNotEmpty(normalizedReport);
150                        Preambule preambule = createPostProcessPreambule(releaseData,radarConfig);
151                        // TODO: I don't really remember why this next part is necessary... 
152                        // May be it no longer required as we fix stuff about win32 path at some other place
153                        if (XRadarUtils.isRunningOnWindowsOS()) 
154                                preambule.getParams().put(XML_REPORT_DIRECTORY,new Param(XML_REPORT_DIRECTORY,SYSTEM_FILE_SEPARATOR + getDocsHome() + SYSTEM_FILE_SEPARATOR + XML_DIRECTORY + SYSTEM_FILE_SEPARATOR + QUALITY_DIRECTORY));
155                        else
156                                preambule.getParams().put(XML_REPORT_DIRECTORY,new Param(XML_REPORT_DIRECTORY,getDocsHome() + SYSTEM_FILE_SEPARATOR + XML_DIRECTORY + SYSTEM_FILE_SEPARATOR + QUALITY_DIRECTORY));
157                        // ... maybe it has become useless ?
158                        // Generate system quality
159                        products.setSystemQuality(        processStep(new InputSource(new FileInputStream(normalizedReport)),
160                                        QUALITY,
161                                        preambule,
162                                        systemQuality));
163                        products.setSystemQuality(StreamUtils.fromFilenameToInputStream(systemQuality));
164                        products.setSystemQualityFilename(systemQuality);
165                        currentTargetFile = systemQuality;
166                        FileUtils.checkFileNotEmpty(systemQuality);
167                        return products;
168                }
169                catch ( FileNotFoundException e ) {
170                        throw new XRadarException("Post merge treatement ended up with file" + currentTargetFile +  " not created.",e);
171                }
172        }
173 
174        /**
175         * <p>This method copy all the statics resources needed by xradar website from the xradar package distribution
176         *                 to the website folder. Statics resources includes stuff like xradar logos,...</p>
177         * TODO: Regroup those two parameter in a dedicated POJO to get a better signature
178         * @param imagesTargetPrefix, indicate in which directory to copy the images resources.
179         * @param xmlDataPrefix, indicate where to copy xml date file.
180         * @throws XRadarException 
181         */
182        public void copyStaticResourcesToWebSite(String imagesTargetPrefix,String xmlDataPrefix) throws XRadarException
183        {
184                logger.info("Copying statics resources to websites");
185                this.copyImagesToWebsite(XRadarUtils.normalizeFileName(imagesTargetPrefix));
186                this.copyXmlDataToWebsite(XRadarUtils.normalizeFileName(xmlDataPrefix));
187        }
188 
189        private void copyXmlDataToWebsite(String xmlDataPrefix) throws XRadarException
190        {
191                logger.fine("Loading xml data");
192                String resourcePath = DefaultReportValues.getString("radar.internal.static.data.static");
193                String targetPath = DefaultReportValues.getString("radar.internal.static.data.static.target");
194                logger.fine("Copying " + resourcePath + " to " + xmlDataPrefix + SYSTEM_FILE_SEPARATOR + targetPath );
195                try
196                {
197                        StreamUtils.copy(new URL(resourcePath).openStream(),new FileOutputStream(new File(xmlDataPrefix + targetPath)));
198                }
199                catch (MalformedURLException e)
200                {
201                        throw new XRadarException("Copy of XML Data to Website failed",e);
202                }
203                catch (IOException e)
204                {
205                        throw new XRadarException("Copy of XML Data to Website failed",e);
206                }
207                catch (Exception e)
208                {
209                        throw new XRadarException("Copy of XML Data to Website failed",e);
210                }
211        }
212 
213 
214 
215        public void closeProducts(MergeProduct product) throws XRadarException {
216                if (product != null ) {
217                        StreamUtils.closeStream(product.getMasterReport());
218                        StreamUtils.closeStream(product.getSystemQuality());
219                        StreamUtils.closeStream(product.getRadarNormalized());
220                }
221        }
222 
223 
224        /*
225         * Commodity method that regroup a generic version of all the preparation works
226         * to do before executing one of post process task.
227         */
228        protected InputStream processStep(InputSource input,String step,Preambule preambule,String targetFile) throws XRadarException
229        {
230                InputStream out = null;
231                logger.fine("Processing input with xsl:" + step);
232                File target = new File(targetFile);
233                merger.setXmlResult(new StreamResult(target));
234                merger.setPreambule(preambule);
235                merger.merge(input,StreamUtils.retrieveFileContentAsStream(step));                
236                try 
237                {
238                        out = new FileInputStream(target);
239                }
240                catch (FileNotFoundException e) 
241                {
242                        throw new XRadarException("Can't read file" + targetFile,e);
243                }
244                return out;
245        }
246 
247        /**
248         * @return the normalizedReport
249         */
250        public String getNormalizedReport() {
251                return normalizedReport;
252        }
253}

[all classes][org.sourceforge.xradar.statics]
EMMA 2.0.5312 (C) Vladimir Roubtsov