content: /* ========================================================================
   * JCommon : a free general purpose class library for the Java(tm) platform
   * ========================================================================
   *
   * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
   *
   * Project Info:  http://www.jfree.org/jcommon/index.html
   *
   * This library is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation; either version 2.1 of the License, or
   * (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful, but
   * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
   * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
   * License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this library; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301,
   * USA.
   *
   * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
   * in the United States and other countries.]
   *
   * -------------
   * BaseBoot.java
   * -------------
   * (C)opyright 2004, by Thomas Morgner and Contributors.
   *
   * Original Author:  Thomas Morgner;
   * Contributor(s):   David Gilbert (for Object Refinery Limited);
   *
   * $Id: BaseBoot.java,v 1.11 2007/11/02 17:50:34 taqua Exp $
   *
   * Changes
   * -------
   * 07-Jun-2004 : Added source headers (DG);
   *
   */
  
  package org.jfree.base;
  
  import org.jfree.JCommon;
  import org.jfree.base.config.ModifiableConfiguration;
  import org.jfree.base.log.DefaultLogModule;
  import org.jfree.util.Configuration;
  import org.jfree.util.ObjectUtilities;
  
  /**
   * The base boot class. This initializes the services provided by
   * JCommon.
   *
   * @author Thomas Morgner
   */
  public class BaseBoot extends AbstractBoot {
  
      /**
       * Singleton instance.
       */
      private static BaseBoot singleton;
  
      /**
       * The project info.
       */
      private BootableProjectInfo bootableProjectInfo;
  
      /**
       * Default constructor (private).
       */
      private BaseBoot() {
          this.bootableProjectInfo = JCommon.INFO;
      }
  
      /**
       * Returns the global configuration as modifiable configuration reference.
       *
       * @return the global configuration
       */
      public static ModifiableConfiguration getConfiguration() {
          return (ModifiableConfiguration) getInstance().getGlobalConfig();
      }
  
      /**
       * Returns the global configuration for JFreeReport.
       * <p/>
       * In the current implementation, the configuration has no properties defined, but
       * references a parent configuration that: <ul> <li>copies across all the
       * <code>System</code> properties to use as report configuration properties (obviously
       * the majority of them will not apply to reports);</li> <li>itself references a parent
       * configuration that reads its properties from a file <code>jfreereport.properties</code>.
       * </ul>
       *
       * @return the global configuration.
       */
      protected synchronized Configuration loadConfiguration() {
          return createDefaultHierarchicalConfiguration
              ("/org/jfree/base/jcommon.properties",
               "/jcommon.properties", true, BaseBoot.class);
      }
  
      /**
       * Returns the boot instance.
       *
       * @return The boot instance.
       */
      public static synchronized AbstractBoot getInstance() {
          if (singleton == null) {
              singleton = new BaseBoot();
          }
          return singleton;
      }
  
      /**
       * Performs the boot process.
       */
      protected void performBoot() {
          // configure the classloader from the properties-file.
          ObjectUtilities.setClassLoaderSource
                  (getConfiguration().getConfigProperty("org.jfree.ClassLoader"));
  
          getPackageManager().addModule(DefaultLogModule.class.getName());
          getPackageManager().load("org.jfree.jcommon.modules.");
          getPackageManager().initializeModules();
      }
  
      /**
       * Returns the project info.
       *
       * @return The project info.
       */
      protected BootableProjectInfo getProjectInfo() {
          return this.bootableProjectInfo;
      }
  }
  