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     * LibraryReferencePanel.java
029     * --------------------------
030     * (C) Copyright 2002-2004, by Object Refinery Limited.
031     *
032     * Original Author:  David Gilbert (for Object Refinery Limited);
033     * Contributor(s):   -;
034     *
035     * $Id: LibraryPanel.java,v 1.6 2008/09/10 09:18:12 mungady Exp $
036     *
037     * Changes
038     * -------
039     * 28-Feb-2002 : Version 1 (DG);
040     * 08-Oct-2002 : Fixed errors reported by Checkstyle (DG);
041     *
042     */
043    
044    package org.jfree.ui.about;
045    
046    import java.awt.BorderLayout;
047    import java.util.ArrayList;
048    import java.util.List;
049    import javax.swing.JPanel;
050    import javax.swing.JScrollPane;
051    import javax.swing.JTable;
052    
053    /**
054     * A panel containing a table that lists the libraries used in a project.
055     * <P>
056     * Used in the AboutFrame class.
057     *
058     * @author David Gilbert
059     */
060    public class LibraryPanel extends JPanel {
061    
062        /** The table. */
063        private JTable table;
064    
065        /** The data. */
066        private LibraryTableModel model;
067    
068        /**
069         * Constructs a LibraryPanel.
070         *
071         * @param libraries  a list of libraries (represented by Library objects).
072         */
073        public LibraryPanel(final List libraries) {
074    
075            setLayout(new BorderLayout());
076            this.model = new LibraryTableModel(libraries);
077            this.table = new JTable(this.model);
078            add(new JScrollPane(this.table));
079    
080        }
081    
082        /**
083         * Creates a new library panel for the specified project.
084         *
085         * @param projectInfo  the project information.
086         */
087        public LibraryPanel(final ProjectInfo projectInfo) {
088            this(getLibraries(projectInfo));
089        }
090    
091        private static List getLibraries (final ProjectInfo info) {
092            if (info == null) {
093                return new ArrayList();
094            }
095            final ArrayList libs = new ArrayList();
096            collectLibraries(info, libs);
097            return libs;
098        }
099    
100        private static void collectLibraries (final ProjectInfo info,
101                                              final List list) {
102            org.jfree.base.Library[] libs = info.getLibraries();
103            for (int i = 0; i < libs.length; i++) {
104                final org.jfree.base.Library lib = libs[i];
105                if (list.contains(lib) == false) {
106                    // prevent duplicates, they look ugly ..
107                    list.add(lib);
108                    if (lib instanceof ProjectInfo) {
109                        collectLibraries((ProjectInfo) lib, list);
110                    }
111                }
112            }
113    
114            libs = info.getOptionalLibraries();
115            for (int i = 0; i < libs.length; i++) {
116                final org.jfree.base.Library lib = libs[i];
117                if (list.contains(lib) == false) {
118                    // prevent duplicates, they look ugly ..
119                    list.add(lib);
120                    if (lib instanceof ProjectInfo) {
121                        collectLibraries((ProjectInfo) lib, list);
122                    }
123                }
124            }
125        }
126    
127        /**
128         * Returns the table model for the library.
129         *
130         * @return The table model.
131         */
132        public LibraryTableModel getModel() {
133          return this.model;
134        }
135    
136        /**
137         * Returns the <code>JTable</code> for the library.
138         *
139         * @return The table.
140         */
141        protected JTable getTable() {
142          return this.table;
143        }
144    }