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: ReportCfg.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 java.util.ArrayList;
12f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Iterator;
13f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.List;
14f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport java.util.Properties;
15f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
16f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.IConstants;
17f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.util.IProperties;
18f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.EMMAProperties;
19f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.ant.PropertyElement;
20f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.ant.SuppressableTask;
21f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.report.IReportEnums.DepthAttribute;
22f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport com.vladium.emma.report.IReportEnums.UnitsTypeAttribute;
23f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
24f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport org.apache.tools.ant.BuildException;
25f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport org.apache.tools.ant.Project;
26f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport org.apache.tools.ant.Task;
27f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport org.apache.tools.ant.types.Path;
28f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectimport org.apache.tools.ant.types.Reference;
29f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
30f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project// ----------------------------------------------------------------------------
31f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project/**
32f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * ReportCfg is a container for report type {@link ReportCfg.Element}s that are
33f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * in turn containers for all properties that could be set on a <report>
34f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * report type configurator (<txt>, <html>, etc). The elements provide
35f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * the ability for report properties to be set either via the generic <property>
36f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * nested elements or dedicated attributes. Potential conflicts between the same
37f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * conceptual property being set via an attribute and a nested element are resolved
38f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * by making dedicated attributes higher priority.<P>
39f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
40f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * Note that ReportCfg does not handle any non-report related properties.
41f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * This can be done via {@link com.vladium.emma.ant.GenericCfg}. It is also the
42f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * parent's responsibility to merge any inherited report properties with
43f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * ReportCfg settings.
44f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project *
45f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project * @author Vlad Roubtsov, (C) 2003
46f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project */
47f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectpublic
48f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Projectclass ReportCfg implements IReportProperties
49f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project{
50f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // public: ................................................................
51f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
52f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
53f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static abstract class Element implements IReportEnums, IReportProperties
54f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
55f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public void setUnits (final UnitsTypeAttribute units)
56f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
57f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setProperty (m_prefix.concat (UNITS_TYPE), units.getValue ());
58f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
59f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
60f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public void setDepth (final DepthAttribute depth)
61f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
62f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setProperty (m_prefix.concat (DEPTH), depth.getValue ());
63f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
64f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
65f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public void setColumns (final String columns)
66f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
67f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setProperty (m_prefix.concat (COLUMNS), columns);
68f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
69f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
70f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public void setSort (final String sort)
71f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
72f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setProperty (m_prefix.concat (SORT), sort);
73f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
74f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
75f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public void setMetrics (final String metrics)
76f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
77f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setProperty (m_prefix.concat (METRICS), metrics);
78f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
79f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
80f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // not supported anymore:
81f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
82f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//        public void setOutdir (final File dir)
83f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//        {
84f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//            // TODO: does ANT resolve files relative to current JVM dir or ${basedir}?
85f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//            m_settings.setProperty (m_prefix.concat (OUT_DIR), dir.getAbsolutePath ());
86f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//        }
87f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
88f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public void setOutfile (final String fileName)
89f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
90f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setProperty (m_prefix.concat (OUT_FILE), fileName);
91f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
92f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
93f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public void setEncoding (final String encoding)
94f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
95f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings.setProperty (m_prefix.concat (OUT_ENCODING), encoding);
96f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
97f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
98f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        // generic property element [don't doc this publicly]:
99f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
100f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        public PropertyElement createProperty ()
101f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
102f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            // TODO: error out on conficting duplicate settings
103f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
104f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            final PropertyElement property = new PropertyElement ();
105f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_genericSettings.add (property);
106f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
107f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return property;
108f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
109f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
110f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected abstract String getType ();
111f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
112f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
113f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        Element (final Task task, final IProperties settings)
114f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
115f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            if (task == null)
116f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                throw new IllegalArgumentException ("null input: task");
117f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            if (settings == null)
118f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                throw new IllegalArgumentException ("null input: settings");
119f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
120f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_task = task;
121f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_settings = settings;
122f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
123f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_prefix = PREFIX.concat (getType ()).concat (".");
124f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
125f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_genericSettings = new ArrayList ();
126f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
127f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
128f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
129f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        void processGenericSettings ()
130f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
131f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            for (Iterator i = m_genericSettings.iterator (); i.hasNext (); )
132f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
133f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final PropertyElement property = (PropertyElement) i.next ();
134f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
135f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final String name = property.getName ();
136f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final String value = property.getValue () != null ? property.getValue () : "";
137f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
138f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                if (name != null)
139f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                {
140f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    final String prefixedName = m_prefix.concat (name);
141f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
142f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    // generically named settings don't override report named settings:
143f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
144f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    if (! m_settings.isOverridden (prefixedName))
145f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                        m_settings.setProperty (prefixedName, value);
146f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                }
147f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
148f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
149f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
150f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
151f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected final Task m_task; // never null
152f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected final String m_prefix; // never null
153f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected final IProperties m_settings; // never null
154f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected final List /* PropertyElement */ m_genericSettings; // never null
155f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
156f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    } // end of nested class
157f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
158f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
159f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
160f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static class Element_HTML extends Element
161f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
162f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected final String getType ()
163f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
164f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return TYPE;
165f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
166f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
167f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        Element_HTML (final Task task, final IProperties settings)
168f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
169f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            super (task, settings);
170f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
171f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
172f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
173f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        static final String TYPE = "html";
174f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
175f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    } // end of nested class
176f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
177f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
178f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
179f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static class Element_TXT extends Element
180f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
181f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected final String getType ()
182f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
183f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return TYPE;
184f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
185f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
186f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        Element_TXT (final Task task, final IProperties settings)
187f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
188f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            super (task, settings);
189f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
190f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
191f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
192f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        static final String TYPE = "txt";
193f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
194f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    } // end of nested class
195f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
196f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
197f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
1980b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock    public static class Element_LCOV extends Element
1990b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock    {
2000b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        protected final String getType ()
2010b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        {
2020b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock            return TYPE;
2030b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        }
2040b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock
2050b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        Element_LCOV (final Task task, final IProperties settings)
2060b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        {
2070b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock            super (task, settings);
2080b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        }
2090b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock
2100b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        static final String TYPE = "lcov";
2110b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock
2120b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock    } // end of nested class
2130b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock
2140b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2150b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock
216f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public static class Element_XML extends Element
217f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
218f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        protected final String getType ()
219f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
220f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return TYPE;
221f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
222f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
223f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        Element_XML (final Task task, final IProperties settings)
224f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
225f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            super (task, settings);
226f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
227f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
228f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
229f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        static final String TYPE = "xml";
230f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
231f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    } // end of nested class
232f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
233f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
234f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
235f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
236f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public ReportCfg (final Project project, final Task task)
237f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
238f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_project = project;
239f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_task = task;
240f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
241f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_reportTypes = new ArrayList (4);
242f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_cfgList = new ArrayList (4);
243f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings = EMMAProperties.wrap (new Properties ());
244f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
245f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
246f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public Path getSourcepath ()
247f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
248f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return m_srcpath;
249f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
250f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
251f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public String [] getReportTypes ()
252f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
253f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final BuildException failure = getFailure ();
254f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
255f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (failure != null)
256f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            throw failure;
257f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
258f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
259f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            if (m_reportTypes.isEmpty ())
260f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                return IConstants.EMPTY_STRING_ARRAY;
261f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            else
262f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
263f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                final String [] result = new String [m_reportTypes.size ()];
264f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                m_reportTypes.toArray (result);
265f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
266f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                return result;
267f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
268f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
269f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
270f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
271f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public IProperties getReportSettings ()
272f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
273f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        final BuildException failure = getFailure ();
274f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
275f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (failure != null)
276f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            throw failure;
277f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
278f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
279f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            if (! m_processed)
280f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            {
281f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                // collect all nested elements' generic settins into m_settings:
282f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
283f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                for (Iterator i = m_cfgList.iterator (); i.hasNext (); )
284f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                {
285f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    final Element cfg = (Element) i.next ();
286f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                    cfg.processGenericSettings ();
287f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                }
288f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
289f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                m_processed = true;
290f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            }
291f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
292f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            return m_settings; // no clone
293f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
294f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
295f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
296f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
297f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // sourcepath attribute/element:
298f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
299f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setSourcepath (final Path path)
300f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
301f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (m_srcpath == null)
302f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_srcpath = path;
303f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
304f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_srcpath.append (path);
305f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
306f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
307f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setSourcepathRef (final Reference ref)
308f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
309f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        createSourcepath ().setRefid (ref);
310f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
311f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
312f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public Path createSourcepath ()
313f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
314f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (m_srcpath == null)
315f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_srcpath = new Path (m_project);
316f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
317f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return m_srcpath.createPath ();
318f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
319f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
320f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
321f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // generator elements:
322f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
323f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public Element_TXT createTxt ()
324f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
325f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return (Element_TXT) addCfgElement (Element_TXT.TYPE,
326f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                                     new Element_TXT (m_task, m_settings));
327f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
328f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
3290b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock    public Element_LCOV createLcov ()
3300b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock    {
3310b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock        return (Element_LCOV) addCfgElement (Element_LCOV.TYPE,
3320b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock                                                     new Element_LCOV (m_task, m_settings));
3330b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock    }
3340b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock
335f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public Element_HTML createHtml ()
336f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
337f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return (Element_HTML) addCfgElement (Element_HTML.TYPE,
338f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                                      new Element_HTML (m_task, m_settings));
339f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
340f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
341f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public Element_XML createXml ()
342f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
343f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return (Element_XML) addCfgElement (Element_XML.TYPE,
344f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                                                     new Element_XML (m_task, m_settings));
345f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
346f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
347f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
348f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // report properties [defaults for all report types]:
349f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
350f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setUnits (final UnitsTypeAttribute units)
351f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
352f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings.setProperty (PREFIX.concat (UNITS_TYPE), units.getValue ());
353f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
354f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
355f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setDepth (final DepthAttribute depth)
356f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
357f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings.setProperty (PREFIX.concat (DEPTH), depth.getValue ());
358f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
359f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
360f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setColumns (final String columns)
361f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
362f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings.setProperty (PREFIX.concat (COLUMNS), columns);
363f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
364f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
365f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setSort (final String sort)
366f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
367f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings.setProperty (PREFIX.concat (SORT), sort);
368f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
369f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
370f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setMetrics (final String metrics)
371f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
372f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings.setProperty (PREFIX.concat (METRICS), metrics);
373f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
374f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
375f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // not supported anymore:
376f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
377f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//    public void setOutdir (final File dir)
378f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//    {
379f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//        // TODO: does ANT resolve files relative to current JVM dir or ${basedir}?
380f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//        m_settings.setProperty (PREFIX.concat (OUT_DIR), dir.getAbsolutePath ());
381f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//    }
382f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//
383f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//    public void setDestdir (final File dir)
384f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//    {
385f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//        // TODO: does ANT resolve files relative to current JVM dir or ${basedir}?
386f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//        m_settings.setProperty (PREFIX.concat (OUT_DIR), dir.getAbsolutePath ());
387f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project//    }
388f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
389f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setOutfile (final String fileName)
390f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
391f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings.setProperty (PREFIX.concat (OUT_FILE), fileName);
392f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
393f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
394f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    public void setEncoding (final String encoding)
395f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
396f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        m_settings.setProperty (PREFIX.concat (OUT_ENCODING), encoding);
397f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
398f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
399f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // protected: .............................................................
400f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
401f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
402f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    protected Element addCfgElement (final String type, final Element cfg)
403f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
404f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (m_reportTypes.contains (type))
405f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
406f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            setFailure ((BuildException) SuppressableTask.newBuildException (m_task.getTaskName ()
407f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                + ": duplicate configuration for report type [" + type + "]" ,
408f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project                m_task.getLocation ()).fillInStackTrace ());
409f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
410f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        else
411f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        {
412f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_reportTypes.add (type);
413f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project            m_cfgList.add (cfg);
414f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        }
415f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
416f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return cfg;
417f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
418f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
419f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // package: ...............................................................
420f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
421f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    // private: ...............................................................
422f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
423f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
424f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private void setFailure (final BuildException failure)
425f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
426f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        if (m_settingsFailure == null) m_settingsFailure = failure; // record the first one only
427f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
428f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
429f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private BuildException getFailure ()
430f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    {
431f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project        return m_settingsFailure;
432f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    }
433f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
434f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
435f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private final Project m_project;
436f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private final Task m_task;
437f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
438f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private final List /* report type:String */ m_reportTypes; // using a list to keep the generation order same as configuration
439f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private final List /* Element */ m_cfgList;
440f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private final IProperties m_settings; // never null
441f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
442f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private Path m_srcpath;
443f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
444f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private transient BuildException m_settingsFailure; // can be null
445f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project    private transient boolean m_processed;
446f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project
447f6fe897e173f4e4bda72a7dddb091b667066764aThe Android Open Source Project} // end of class
4480b5519af3cd5ac3a90a29d110fea49345e8e286bTim Baverstock// ----------------------------------------------------------------------------
449