001/* ========================================================================
002 * JCommon : a free general purpose class library for the Java(tm) platform
003 * ========================================================================
004 *
005 * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006 * 
007 * Project Info:  http://www.jfree.org/jcommon/index.html
008 *
009 * This library is free software; you can redistribute it and/or modify it 
010 * under the terms of the GNU Lesser General Public License as published by 
011 * the Free Software Foundation; either version 2.1 of the License, or 
012 * (at your option) any later version.
013 *
014 * This library is distributed in the hope that it will be useful, but 
015 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
016 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
017 * License for more details.
018 *
019 * You should have received a copy of the GNU Lesser General Public
020 * License along with this library; if not, write to the Free Software
021 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
022 * USA.  
023 *
024 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
025 * in the United States and other countries.]
026 * 
027 * ------------------------
028 * BootableProjectInfo.java
029 * ------------------------
030 * (C)opyright 2004, by Thomas Morgner and Contributors.
031 *
032 * Original Author:  Thomas Morgner;
033 * Contributor(s):   David Gilbert (for Object Refinery Limited);
034 *
035 * $Id: BootableProjectInfo.java,v 1.4 2006/03/23 19:47:05 taqua Exp $
036 *
037 * Changes
038 * -------
039 * 07-Jun-2004 : Added source headers (DG);
040 *
041 */
042
043package org.jfree.base;
044
045import java.util.ArrayList;
046
047/**
048 * Project info for a bootable project. A bootable project provides a controlled
049 * way of initalizing all subsystems by providing a Boot loader implementation.
050 *
051 * @author Thomas Morgner
052 */
053public class BootableProjectInfo extends BasicProjectInfo {
054
055    /** The boot class. */
056    private String bootClass;
057
058    /** The auto-boot flag. */
059    private boolean autoBoot;
060
061    /**
062     * Creates a new instance.
063     */
064    public BootableProjectInfo() {
065        this.autoBoot = true;
066    }
067
068    /**
069     * Creates a new library reference.
070     *
071     * @param name    the name.
072     * @param version the version.
073     * @param licence the licence.
074     * @param info    the web address or other info.
075     */
076    public BootableProjectInfo(final String name, final String version,
077                               final String licence, final String info) {
078        this();
079        setName(name);
080        setVersion(version);
081        setLicenceName(licence);
082        setInfo(info);
083    }
084
085    /**
086     * Creates a new library reference.
087     *
088     * @param name    the name.
089     * @param version the version.
090     * @param info  the info (for example, the project URL).
091     * @param copyright  the copyright statement.
092     * @param licenceName the license name.
093     */
094    public BootableProjectInfo(final String name, final String version, final String info,
095                               final String copyright, final String licenceName) {
096        this();
097        setName(name);
098        setVersion(version);
099        setLicenceName(licenceName);
100        setInfo(info);
101        setCopyright(copyright);
102    }
103
104    /**
105     * Returns the dependencies.
106     * 
107     * @return The dependencies.
108     */
109    public BootableProjectInfo[] getDependencies() {
110        final ArrayList dependencies = new ArrayList();
111        final Library[] libraries = getLibraries();
112        for (int i = 0; i < libraries.length; i++) {
113          Library lib = libraries[i];
114          if (lib instanceof BootableProjectInfo) {
115              dependencies.add(lib);
116          }
117        }
118
119        final Library[] optionalLibraries = getOptionalLibraries();
120        for (int i = 0; i < optionalLibraries.length; i++) {
121          Library lib = optionalLibraries[i];
122          if (lib instanceof BootableProjectInfo) {
123              dependencies.add(lib);
124          }
125        }
126        return (BootableProjectInfo[]) dependencies.toArray
127            (new BootableProjectInfo[dependencies.size()]);
128    }
129
130    /**
131     * Adds a dependency.
132     * 
133     * @param projectInfo  the project.
134     * @deprecated use 'addLibrary' instead.
135     */
136    public void addDependency(final BootableProjectInfo projectInfo) {
137        if (projectInfo == null) {
138            throw new NullPointerException();
139        }
140        addLibrary(projectInfo);
141    }
142
143    /**
144     * Returns the name of the boot class.
145     * 
146     * @return The name of the boot class.
147     */
148    public String getBootClass() {
149        return this.bootClass;
150    }
151
152    /**
153     * Sets the boot class name.
154     * 
155     * @param bootClass  the boot class name.
156     */
157    public void setBootClass(final String bootClass) {
158        this.bootClass = bootClass;
159    }
160
161    /**
162     * Returns, whether the project should be booted automaticly.
163     * 
164     * @return The auto-boot flag.
165     */
166    public boolean isAutoBoot() {
167        return this.autoBoot;
168    }
169
170    /**
171     * Sets the auto boot flag.
172     *
173     * @param autoBoot true, if the project should be booted automaticly, false otherwise.
174     */
175    public void setAutoBoot(final boolean autoBoot) {
176        this.autoBoot = autoBoot;
177    }
178
179}