Home | History | Annotate | Download | only in ant
      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: NestedTask.java,v 1.1.1.1.2.1 2004/07/08 10:52:10 vlad_r Exp $
      8  */
      9 package com.vladium.emma.ant;
     10 
     11 import com.vladium.util.IProperties;
     12 
     13 // ----------------------------------------------------------------------------
     14 /**
     15  * @author Vlad Roubtsov, (C) 2003
     16  */
     17 public
     18 abstract class NestedTask extends SuppressableTask
     19 {
     20     // public: ................................................................
     21 
     22     // protected: .............................................................
     23 
     24 
     25     protected NestedTask (final SuppressableTask parent)
     26     {
     27         if (parent == null)
     28             throw new IllegalArgumentException ("null input: parent");
     29 
     30         m_parent = parent;
     31     }
     32 
     33     /**
     34      * Overrides {@link SuppressableTask#getTaskSettings()} to mix in parent
     35      * task settings as the base settings.
     36      */
     37     protected final IProperties getTaskSettings ()
     38     {
     39         final IProperties parentSettings = m_parent != null
     40             ? m_parent.getTaskSettings ()
     41             : null;
     42 
     43         final IProperties taskOverrides = super.getTaskSettings ();
     44 
     45         // task settings are always more specific than parent settings, but attention
     46         // needs to be paid to horizontal inheritance:
     47 
     48         if (parentSettings == null)
     49             return taskOverrides;
     50         else
     51         {
     52             final IProperties settings = IProperties.Factory.combine (taskOverrides, parentSettings);
     53 
     54             return settings;
     55         }
     56     }
     57 
     58 
     59     protected final SuppressableTask m_parent;
     60 
     61     // package: ...............................................................
     62 
     63     // private: ...............................................................
     64 
     65 } // end of class
     66 // ----------------------------------------------------------------------------