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.5 2006/03/23 19:47:05 taqua 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        public LibraryPanel(final ProjectInfo projectInfo) {
083            this(getLibraries(projectInfo));
084        }
085    
086        private static List getLibraries (final ProjectInfo info) {
087            if (info == null) {
088                return new ArrayList();
089            }
090            final ArrayList libs = new ArrayList();
091            collectLibraries(info, libs);
092            return libs;
093        }
094    
095        private static void collectLibraries (final ProjectInfo info,
096                                              final List list) {
097            org.jfree.base.Library[] libs = info.getLibraries();
098            for (int i = 0; i < libs.length; i++) {
099                final org.jfree.base.Library lib = libs[i];
100                if (list.contains(lib) == false) {
101                    // prevent duplicates, they look ugly ..
102                    list.add(lib);
103                    if (lib instanceof ProjectInfo) {
104                        collectLibraries((ProjectInfo) lib, list);
105                    }
106                }
107            }
108    
109            libs = info.getOptionalLibraries();
110            for (int i = 0; i < libs.length; i++) {
111                final org.jfree.base.Library lib = libs[i];
112                if (list.contains(lib) == false) {
113                    // prevent duplicates, they look ugly ..
114                    list.add(lib);
115                    if (lib instanceof ProjectInfo) {
116                        collectLibraries((ProjectInfo) lib, list);
117                    }
118                }
119            }
120        }
121    
122        public LibraryTableModel getModel() {
123          return model;
124        }
125    
126        protected JTable getTable() {
127          return table;
128        }
129    }