001/*
002 * Copyright (c) 2003-2010 The Regents of the University of California.
003 * All rights reserved.
004 *
005 * '$Author: welker $'
006 * '$Date: 2010-05-06 05:21:26 +0000 (Thu, 06 May 2010) $' 
007 * '$Revision: 24234 $'
008 * 
009 * Permission is hereby granted, without written agreement and without
010 * license or royalty fees, to use, copy, modify, and distribute this
011 * software and its documentation for any purpose, provided that the above
012 * copyright notice and the following two paragraphs appear in all copies
013 * of this software.
014 *
015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
019 * SUCH DAMAGE.
020 *
021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES,
026 * ENHANCEMENTS, OR MODIFICATIONS.
027 *
028 */
029
030package org.kepler.configuration;
031
032import java.io.File;
033
034import org.kepler.build.modules.Module;
035
036/**
037 * Class that represents a root configuration property within kepler
038 */
039public class RootConfigurationProperty extends ConfigurationProperty
040{
041  private File file;
042  
043  /**
044   * construct a root configuration property within a module with a specific file
045   */
046  public RootConfigurationProperty(Module m, File configurationFile)
047  {
048    super(m, ConfigurationManager.removeFileExtension(configurationFile.getName()));
049    this.file = configurationFile;
050  }
051  
052  protected RootConfigurationProperty(Module m, String name)
053  {
054    super(m, name);
055    this.file = null;
056  }
057  
058  protected RootConfigurationProperty(Module m, String name, ConfigurationProperty property)
059    throws NamespaceException, ConfigurationManagerException
060  {
061    super(m, name, property);
062    this.file = null;
063  }
064  
065  protected RootConfigurationProperty(Module m, String name, ConfigurationNamespace namespace)
066  {
067    super(m, name, namespace, (String)null);
068    this.file = null;
069  }
070  
071  protected RootConfigurationProperty(Module m, String name, ConfigurationNamespace namespace, ConfigurationProperty property)
072    throws NamespaceException, ConfigurationManagerException
073  {
074    this(m, name, namespace);
075    addProperty(property);
076  }
077  
078  /**
079   * return the file that this configuration property represents
080   */
081  public File getFile()
082  {
083    return this.file;
084  }
085  
086  /**
087   * returns true if any of the properties in this RootConfigurationProperty have
088   * been changed.  This is the opposite functionality of 
089   * ConfigurationProperty.isDirty() which is not recursive by default
090   */
091  public boolean isDirty()
092  {
093    if(getProperties().size() > 0)
094    {
095      return getProperty(0).isDirty(true);
096    }
097    return false;
098  }
099  
100  /**
101   * return the root property of this configuration
102   */
103  public ConfigurationProperty getRootProperty()
104  {
105    return getProperties().get(0);
106  }
107}