Home | History | Annotate | Download | only in report
      1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
      2  *
      3  * This program and the accompanying materials are made available under
      4  * the terms of the Common Public License v1.0 which accompanies this distribution,
      5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
      6  *
      7  * $Id: reportTask.java,v 1.1.1.1.2.1 2004/07/08 10:52:11 vlad_r Exp $
      8  */
      9 package com.vladium.emma.report;
     10 
     11 import org.apache.tools.ant.BuildException;
     12 import org.apache.tools.ant.types.Path;
     13 import org.apache.tools.ant.types.Reference;
     14 
     15 import com.vladium.util.IProperties;
     16 import com.vladium.emma.ant.FileTask;
     17 import com.vladium.emma.ant.SuppressableTask;
     18 import com.vladium.emma.report.ReportCfg.Element_HTML;
     19 import com.vladium.emma.report.ReportCfg.Element_LCOV;
     20 import com.vladium.emma.report.ReportCfg.Element_TXT;
     21 import com.vladium.emma.report.ReportCfg.Element_XML;
     22 
     23 // ----------------------------------------------------------------------------
     24 /**
     25  * @author Vlad Roubtsov, (C) 2003
     26  */
     27 public
     28 final class reportTask extends FileTask implements IReportProperties, IReportEnums
     29 {
     30     public reportTask (final SuppressableTask parent)
     31     {
     32         super (parent);
     33     }
     34 
     35     public void init () throws BuildException
     36     {
     37         super.init ();
     38 
     39         m_reportCfg = new ReportCfg (getProject (), this);
     40     }
     41 
     42 
     43     public void execute () throws BuildException
     44     {
     45         if (isEnabled ())
     46         {
     47             final String [] reportTypes = m_reportCfg.getReportTypes ();
     48 
     49             if ((reportTypes == null) || (reportTypes.length == 0)) // no "txt" default for report processor
     50                 throw (BuildException) newBuildException (getTaskName ()
     51                     + ": no report types specified: provide at least one of <txt>, <html>, <lcov>, <xml> nested elements", location).fillInStackTrace ();
     52 
     53             String [] files = getDataPath (true);
     54             if ((files == null) || (files.length == 0))
     55                 throw (BuildException) newBuildException (getTaskName ()
     56                     + ": no valid input data files have been specified", location).fillInStackTrace ();
     57 
     58             final Path srcpath = m_reportCfg.getSourcepath ();
     59 
     60             // combine report and all generic settings:
     61             final IProperties settings;
     62             {
     63                 final IProperties taskSettings = getTaskSettings ();
     64                 final IProperties reportSettings = m_reportCfg.getReportSettings ();
     65 
     66                 // named report settings override generic named settings and file
     67                 // settings have lower priority than any explicitly named overrides:
     68                 settings = IProperties.Factory.combine (reportSettings, taskSettings);
     69             }
     70 
     71             final ReportProcessor processor = ReportProcessor.create ();
     72 
     73             processor.setDataPath (files); files = null;
     74             processor.setSourcePath (srcpath != null ? srcpath.list () : null);
     75             processor.setReportTypes (reportTypes);
     76             processor.setPropertyOverrides (settings);
     77 
     78             processor.run ();
     79         }
     80     }
     81 
     82 
     83     // sourcepath attribute/element:
     84 
     85     public void setSourcepath (final Path path)
     86     {
     87         m_reportCfg.setSourcepath (path);
     88     }
     89 
     90     public void setSourcepathRef (final Reference ref)
     91     {
     92         m_reportCfg.setSourcepathRef (ref);
     93     }
     94 
     95     public Path createSourcepath ()
     96     {
     97         return m_reportCfg.createSourcepath ();
     98     }
     99 
    100 
    101     // generator elements:
    102 
    103     public Element_TXT createTxt ()
    104     {
    105         return m_reportCfg.createTxt ();
    106     }
    107 
    108     public Element_LCOV createLcov ()
    109     {
    110         return m_reportCfg.createLcov ();
    111     }
    112 
    113     public Element_HTML createHtml ()
    114     {
    115         return m_reportCfg.createHtml ();
    116     }
    117 
    118     public Element_XML createXml ()
    119     {
    120         return m_reportCfg.createXml ();
    121     }
    122 
    123 
    124     // report properties [defaults for all report types]:
    125 
    126     public void setUnits (final UnitsTypeAttribute units)
    127     {
    128         m_reportCfg.setUnits (units);
    129     }
    130 
    131     public void setDepth (final DepthAttribute depth)
    132     {
    133         m_reportCfg.setDepth (depth);
    134     }
    135 
    136     public void setColumns (final String columns)
    137     {
    138         m_reportCfg.setColumns (columns);
    139     }
    140 
    141     public void setSort (final String sort)
    142     {
    143         m_reportCfg.setSort (sort);
    144     }
    145 
    146     public void setMetrics (final String metrics)
    147     {
    148         m_reportCfg.setMetrics (metrics);
    149     }
    150 
    151     // not supported anymore:
    152 
    153 //    public void setOutdir (final File dir)
    154 //    {
    155 //        m_reportCfg.setOutdir (dir);
    156 //    }
    157 //
    158 //    public void setDestdir (final File dir)
    159 //    {
    160 //        m_reportCfg.setDestdir (dir);
    161 //    }
    162 
    163     // should not be set at the global level:
    164 
    165 //    public void setOutfile (final String fileName)
    166 //    {
    167 //        m_reportCfg.setOutfile (fileName);
    168 //    }
    169 
    170     public void setEncoding (final String encoding)
    171     {
    172         m_reportCfg.setEncoding (encoding);
    173     }
    174 
    175     // protected: .............................................................
    176 
    177     // package: ...............................................................
    178 
    179     // private: ...............................................................
    180 
    181 
    182     private ReportCfg m_reportCfg;
    183 
    184 } // end of class
    185 // ----------------------------------------------------------------------------
    186