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