| /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved. |
| * |
| * This program and the accompanying materials are made available under |
| * the terms of the Common Public License v1.0 which accompanies this distribution, |
| * and is available at http://www.eclipse.org/legal/cpl-v10.html |
| * |
| * $Id: emmaTask.java,v 1.1.1.1.2.2 2004/07/10 03:34:52 vlad_r Exp $ |
| */ |
| package com.vladium.emma; |
| |
| import com.vladium.emma.IAppConstants; |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.apache.tools.ant.BuildException; |
| import org.apache.tools.ant.Project; |
| |
| import com.vladium.emma.ant.NestedTask; |
| import com.vladium.emma.ant.SuppressableTask; |
| import com.vladium.emma.data.mergeTask; |
| import com.vladium.emma.instr.instrTask; |
| import com.vladium.emma.report.reportTask; |
| |
| // ---------------------------------------------------------------------------- |
| /** |
| * @author Vlad Roubtsov, (C) 2003 |
| */ |
| public |
| final class emmaTask extends SuppressableTask |
| { |
| // public: ................................................................ |
| |
| // TODO: this and related tasks should be designed for external extensibility |
| // [make non final and use virtual prop getters] |
| |
| public emmaTask () |
| { |
| m_tasks = new ArrayList (); |
| } |
| |
| |
| public synchronized void execute () throws BuildException |
| { |
| log (IAppConstants.APP_VERBOSE_BUILD_ID, Project.MSG_VERBOSE); |
| |
| if (isEnabled ()) |
| { |
| while (! m_tasks.isEmpty ()) |
| { |
| final NestedTask task = (NestedTask) m_tasks.remove (0); |
| |
| final String name = getTaskName (); |
| try |
| { |
| setTaskName (task.getTaskName ()); |
| |
| task.execute (); |
| } |
| finally |
| { |
| setTaskName (name); |
| } |
| } |
| } |
| } |
| |
| |
| public NestedTask createInstr () |
| { |
| return addTask (new instrTask (this), getNestedTaskName ("instr")); |
| } |
| |
| public NestedTask createMerge () |
| { |
| return addTask (new mergeTask (this), getNestedTaskName ("merge")); |
| } |
| |
| public NestedTask createReport () |
| { |
| return addTask (new reportTask (this), getNestedTaskName ("report")); |
| } |
| |
| // protected: ............................................................. |
| |
| |
| protected NestedTask addTask (final NestedTask task, final String pseudoName) |
| { |
| initTask (task, pseudoName); |
| |
| m_tasks.add (task); |
| return task; |
| } |
| |
| protected void initTask (final NestedTask task, final String pseudoName) |
| { |
| task.setTaskName (pseudoName); |
| task.setProject (getProject ()); |
| task.setLocation (getLocation ()); |
| task.setOwningTarget (getOwningTarget ()); |
| |
| task.init (); |
| } |
| |
| protected String getNestedTaskName (final String subname) |
| { |
| return getTaskName ().concat (".").concat (subname); |
| } |
| |
| // package: ............................................................... |
| |
| // private: ............................................................... |
| |
| |
| private final List /* NestedTask */ m_tasks; |
| |
| } // end of class |
| // ---------------------------------------------------------------------------- |