• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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: emmaTask.java,v 1.1.1.1.2.2 2004/07/10 03:34:52 vlad_r Exp $
8  */
9 package com.vladium.emma;
10 
11 import com.vladium.emma.IAppConstants;
12 import java.util.ArrayList;
13 import java.util.List;
14 
15 import org.apache.tools.ant.BuildException;
16 import org.apache.tools.ant.Project;
17 
18 import com.vladium.emma.ant.NestedTask;
19 import com.vladium.emma.ant.SuppressableTask;
20 import com.vladium.emma.data.mergeTask;
21 import com.vladium.emma.instr.instrTask;
22 import com.vladium.emma.report.reportTask;
23 
24 // ----------------------------------------------------------------------------
25 /**
26  * @author Vlad Roubtsov, (C) 2003
27  */
28 public
29 final class emmaTask extends SuppressableTask
30 {
31     // public: ................................................................
32 
33     // TODO: this and related tasks should be designed for external extensibility
34     // [make non final and use virtual prop getters]
35 
emmaTask()36     public emmaTask ()
37     {
38         m_tasks = new ArrayList ();
39     }
40 
41 
execute()42     public synchronized void execute () throws BuildException
43     {
44         log (IAppConstants.APP_VERBOSE_BUILD_ID, Project.MSG_VERBOSE);
45 
46         if (isEnabled ())
47         {
48             while (! m_tasks.isEmpty ())
49             {
50                 final NestedTask task = (NestedTask) m_tasks.remove (0);
51 
52                 final String name = getTaskName ();
53                 try
54                 {
55                     setTaskName (task.getTaskName ());
56 
57                     task.execute ();
58                 }
59                 finally
60                 {
61                     setTaskName (name);
62                 }
63             }
64         }
65     }
66 
67 
createInstr()68     public NestedTask createInstr ()
69     {
70         return addTask (new instrTask (this), getNestedTaskName ("instr"));
71     }
72 
createMerge()73     public NestedTask createMerge ()
74     {
75         return addTask (new mergeTask (this), getNestedTaskName ("merge"));
76     }
77 
createReport()78     public NestedTask createReport ()
79     {
80         return addTask (new reportTask (this), getNestedTaskName ("report"));
81     }
82 
83     // protected: .............................................................
84 
85 
addTask(final NestedTask task, final String pseudoName)86     protected NestedTask addTask (final NestedTask task, final String pseudoName)
87     {
88         initTask (task, pseudoName);
89 
90         m_tasks.add (task);
91         return task;
92     }
93 
initTask(final NestedTask task, final String pseudoName)94     protected void initTask (final NestedTask task, final String pseudoName)
95     {
96         task.setTaskName (pseudoName);
97         task.setProject (getProject ());
98         task.setLocation (getLocation ());
99         task.setOwningTarget (getOwningTarget ());
100 
101         task.init ();
102     }
103 
getNestedTaskName(final String subname)104     protected String getNestedTaskName (final String subname)
105     {
106         return getTaskName ().concat (".").concat (subname);
107     }
108 
109     // package: ...............................................................
110 
111     // private: ...............................................................
112 
113 
114     private final List /* NestedTask */ m_tasks;
115 
116 } // end of class
117 // ----------------------------------------------------------------------------