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