| 1 | /** |
| 2 | * BSD-style license; for more info see http://xradar.sourceforge.net/license.html |
| 3 | */ |
| 4 | package org.sourceforge.xradar.ant; |
| 5 | |
| 6 | import java.util.ArrayList; |
| 7 | import java.util.HashMap; |
| 8 | import java.util.List; |
| 9 | import java.util.Map; |
| 10 | |
| 11 | import org.apache.tools.ant.BuildException; |
| 12 | import org.apache.tools.ant.Project; |
| 13 | import org.sourceforge.xradar.XRadarException; |
| 14 | import org.sourceforge.xradar.config.ReleaseData; |
| 15 | import org.sourceforge.xradar.config.ReleaseDataLoader; |
| 16 | import org.sourceforge.xradar.statics.MergeProduct; |
| 17 | import org.sourceforge.xradar.statics.Param; |
| 18 | import org.sourceforge.xradar.statics.Report; |
| 19 | import org.sourceforge.xradar.statics.Statics; |
| 20 | import org.sourceforge.xradar.statics.renderers.XslHtmlWebsite; |
| 21 | |
| 22 | /** |
| 23 | * This classe is a simple wrapper for Statics merge for Ant. |
| 24 | * Xml configuration will be : |
| 25 | * |
| 26 | <xradar-statics debug="false" |
| 27 | properties="${basedir}/etc/release1.properties" |
| 28 | config="etc/radar-config.xml" |
| 29 | target="${basedir}/release1/docs/" |
| 30 | javadocEnabled="true" |
| 31 | javadocRoot="${basedir}/release1/docs/api" |
| 32 | java2htmlRoot="${basedir}/release1/docs/xml/htmlcode"> |
| 33 | <report file="${jdepend.report.file}" type="jdepend"/> |
| 34 | <report file="${cpd.report.file}" type="cpd"/> |
| 35 | <report file="${javancss.report.file}" type="javancss"/> |
| 36 | <report file="${ckjm.report.file}" type="ckjm"/> |
| 37 | <report file="${depfind.report.file}" type="depfind"/> |
| 38 | <report file="${docs.home}/xml/test_depfind_report.xml" type="test_depfind"/> |
| 39 | <report file="${checkstyle.report.file}" type="checkstyle"/> |
| 40 | <!-- |
| 41 | TODO: |
| 42 | <report file="" type="bcc"/> |
| 43 | <report file="" type="junit"/> |
| 44 | <report file="" type="cobertura"/> |
| 45 | --> |
| 46 | </xradar-statics> |
| 47 | * |
| 48 | * Order id as xslt fields, if not set ( most likely) will be defines using the type of the tools. |
| 49 | * |
| 50 | * |
| 51 | * @author Romain PELISSE, belaran@gmail.com |
| 52 | * |
| 53 | */ |
| 54 | public class StaticsTask extends AbstractXRadarAntTask |
| 55 | { |
| 56 | |
| 57 | /* |
| 58 | * Fields accessible through getter/setters |
| 59 | */ |
| 60 | private List<Report> reports; |
| 61 | private boolean debug; |
| 62 | private String properties; |
| 63 | private String target; |
| 64 | private String config; |
| 65 | private String javadocEnabled = "false"; |
| 66 | private String javadocRoot; |
| 67 | private String java2htmlRoot; |
| 68 | |
| 69 | /* |
| 70 | * Internal fields |
| 71 | */ |
| 72 | private XslHtmlWebsite staticEngine; |
| 73 | |
| 74 | public void addReport(Report report) |
| 75 | { |
| 76 | if ( this.reports == null ) |
| 77 | this.reports = new ArrayList<Report>(); |
| 78 | this.reports.add(report); |
| 79 | } |
| 80 | |
| 81 | /** |
| 82 | * Execute the merges of the reports |
| 83 | */ |
| 84 | @Override |
| 85 | public void execute() throws BuildException |
| 86 | { |
| 87 | validate(); |
| 88 | try |
| 89 | { |
| 90 | // Merging the report |
| 91 | String mergedReport = this.staticEngine.executeMerge(); |
| 92 | log("XML merging result is :\n" + mergedReport,Project.MSG_VERBOSE); |
| 93 | log("Merging data from tool's reports.", Project.MSG_INFO); |
| 94 | // Preparing the post processing |
| 95 | Param radarConfig = new Param(Statics.XRADAR_CONFIG_FILE,config); |
| 96 | ReleaseData releaseData = new ReleaseDataLoader(properties).load(); |
| 97 | // Post processing |
| 98 | log("Post processing merged files.", Project.MSG_INFO); |
| 99 | MergeProduct products = this.staticEngine.executePostProcessing(mergedReport, releaseData, radarConfig); |
| 100 | // Generating the website |
| 101 | Map<String,Param> params = new HashMap<String,Param>(); |
| 102 | params.put(Statics.JAVADOC_ENABLED,new Param(Statics.JAVADOC_ENABLED,this.getJavadocEnabled())); |
| 103 | params.put(Statics.JAVADOC_ROOT,new Param(Statics.JAVADOC_ROOT,this.getJavadocRoot())); |
| 104 | params.put(Statics.JAVA2HTML_ROOT,new Param(Statics.JAVA2HTML_ROOT,this.getJava2htmlRoot())); |
| 105 | params.put(Statics.XRADAR_CONFIG_FILE,radarConfig); |
| 106 | params.put(Statics.LOG,new Param(Statics.LOG,String.valueOf(this.debug))); |
| 107 | log("Generating static analysis website.", Project.MSG_INFO); |
| 108 | // Still buggy, only works for images generation ! |
| 109 | this.staticEngine.generateHtmlReport(products, params); |
| 110 | // Copying required resources |
| 111 | this.staticEngine.copyStaticResourcesToWebSite(this.getTarget(),this.getTarget() + "/xml/api"); // FIXME: externalize this xml/api? |
| 112 | } |
| 113 | catch (XRadarException e) |
| 114 | { |
| 115 | throw new BuildException(e); |
| 116 | } |
| 117 | } |
| 118 | |
| 119 | |
| 120 | /** |
| 121 | * Checks if settings are proper, such as: |
| 122 | * <ul> |
| 123 | * <li>set docs home directory based on target attribute ( TODO: check if exist)</li> |
| 124 | * <li>set debug level based on debug attribute</li> |
| 125 | * <li>TODO:Report file exists and can be read</li> |
| 126 | * <li>If not defined load default value for order-id and xslt file</li> |
| 127 | * <li>TODO:Xslt file and can be accessed through</li> |
| 128 | * <li>... more ?</li> |
| 129 | * </ul> |
| 130 | * @throws BuildException |
| 131 | * |
| 132 | */ |
| 133 | private void validate() throws BuildException |
| 134 | { |
| 135 | // attribute validation |
| 136 | if ( "".equals(this.getTarget()) ) |
| 137 | throw new BuildException("Target field is not optionnal."); |
| 138 | if ( "".equals(this.getProperties()) ) |
| 139 | throw new BuildException("Properties field is not optionnal."); |
| 140 | if ( "".equals(this.getConfig()) ) |
| 141 | throw new BuildException("Config field is not optionnal."); |
| 142 | if ( "".equals(this.getJava2htmlRoot()) ) |
| 143 | throw new BuildException("Java2htmlRoot field is not optionnal."); |
| 144 | if ( "".equals(this.getJavadocRoot()) && Boolean.valueOf(this.javadocEnabled) ) |
| 145 | throw new BuildException("JavadocRoot field is not optionnal, if javadocEnabled is set to true."); |
| 146 | |
| 147 | // Logging settings |
| 148 | log("Debug:"+ this.debug, Project.MSG_VERBOSE); |
| 149 | log("Target:"+ this.target, Project.MSG_VERBOSE); |
| 150 | log("Properties:"+ this.properties, Project.MSG_VERBOSE); |
| 151 | log("Config:"+ this.config, Project.MSG_VERBOSE); |
| 152 | // Setting the engine |
| 153 | this.staticEngine = new XslHtmlWebsite(); |
| 154 | this.staticEngine.initializedXmlCatalog(super.isOffline()); |
| 155 | this.staticEngine.setDebug(this.debug); |
| 156 | this.staticEngine.setConfig(this.config); |
| 157 | // Setting (and creating docs-home) |
| 158 | try |
| 159 | { |
| 160 | this.staticEngine.setDocsHome(this.getTarget()); |
| 161 | } |
| 162 | catch (XRadarException e) |
| 163 | { |
| 164 | throw new BuildException(e); |
| 165 | } |
| 166 | // Adding and validating the reports ( validation delegated to the engine) |
| 167 | for ( Report report : reports ) |
| 168 | { |
| 169 | // Logging the added report data |
| 170 | log("Report:"+ report.getType(), Project.MSG_VERBOSE); |
| 171 | log("->Input file:" + report.getFile(), Project.MSG_VERBOSE); |
| 172 | // Adding the report |
| 173 | try |
| 174 | { |
| 175 | if ( ! this.staticEngine.addReport(report) ) |
| 176 | log("Report " + report.getType() + " was not added, because " + report.getFile() + " does not exist or is not readable.",Project.MSG_WARN); |
| 177 | } |
| 178 | catch (XRadarException e) |
| 179 | { |
| 180 | throw new BuildException(e); |
| 181 | } |
| 182 | } |
| 183 | } |
| 184 | |
| 185 | |
| 186 | |
| 187 | /** |
| 188 | * @return the reports |
| 189 | */ |
| 190 | public List<Report> getReports() { |
| 191 | return reports; |
| 192 | } |
| 193 | |
| 194 | /** |
| 195 | * @param reports the reports to set |
| 196 | */ |
| 197 | public void setReports(List<Report> reports) { |
| 198 | this.reports = reports; |
| 199 | } |
| 200 | |
| 201 | /** |
| 202 | * @return the debug |
| 203 | */ |
| 204 | public boolean isDebug() { |
| 205 | return debug; |
| 206 | } |
| 207 | |
| 208 | /** |
| 209 | * @param debug the debug to set |
| 210 | */ |
| 211 | public void setDebug(boolean debug) { |
| 212 | this.debug = debug; |
| 213 | } |
| 214 | |
| 215 | /** |
| 216 | * @return the properties |
| 217 | */ |
| 218 | public String getProperties() { |
| 219 | return properties; |
| 220 | } |
| 221 | |
| 222 | /** |
| 223 | * @param properties the properties to set |
| 224 | */ |
| 225 | public void setProperties(String properties) { |
| 226 | this.properties = properties; |
| 227 | } |
| 228 | |
| 229 | /** |
| 230 | * @return the target |
| 231 | */ |
| 232 | public String getTarget() { |
| 233 | return target; |
| 234 | } |
| 235 | |
| 236 | /** |
| 237 | * @param target the target to set |
| 238 | */ |
| 239 | public void setTarget(String target) { |
| 240 | this.target = target; |
| 241 | } |
| 242 | |
| 243 | /** |
| 244 | * @return the config |
| 245 | */ |
| 246 | public String getConfig() { |
| 247 | return config; |
| 248 | } |
| 249 | |
| 250 | /** |
| 251 | * @param config the config to set |
| 252 | */ |
| 253 | public void setConfig(String config) { |
| 254 | this.config = config; |
| 255 | } |
| 256 | |
| 257 | /** |
| 258 | * @return the java2htmlRoot |
| 259 | */ |
| 260 | public String getJava2htmlRoot() { |
| 261 | return java2htmlRoot; |
| 262 | } |
| 263 | |
| 264 | /** |
| 265 | * @param java2htmlRoot the java2htmlRoot to set |
| 266 | */ |
| 267 | public void setJava2htmlRoot(String java2htmlRoot) { |
| 268 | this.java2htmlRoot = java2htmlRoot; |
| 269 | } |
| 270 | |
| 271 | /** |
| 272 | * @return the javadocEnabled |
| 273 | */ |
| 274 | public String getJavadocEnabled() { |
| 275 | return javadocEnabled; |
| 276 | } |
| 277 | |
| 278 | /** |
| 279 | * @param javadocEnabled the javadocEnabled to set |
| 280 | */ |
| 281 | public void setJavadocEnabled(String javadocEnabled) { |
| 282 | this.javadocEnabled = javadocEnabled; |
| 283 | } |
| 284 | |
| 285 | /** |
| 286 | * @return the javadocRoot |
| 287 | */ |
| 288 | public String getJavadocRoot() { |
| 289 | return javadocRoot; |
| 290 | } |
| 291 | |
| 292 | /** |
| 293 | * @param javadocRoot the javadocRoot to set |
| 294 | */ |
| 295 | public void setJavadocRoot(String javadocRoot) { |
| 296 | this.javadocRoot = javadocRoot; |
| 297 | } |
| 298 | } |