001    /**
002     * ================================================
003     * LibLoader : a free Java resource loading library
004     * ================================================
005     *
006     * Project Info:  http://reporting.pentaho.org/libloader/
007     *
008     * (C) Copyright 2006, by Pentaho Corporation and Contributors.
009     *
010     * This library is free software; you can redistribute it and/or modify it under the terms
011     * of the GNU Lesser General Public License as published by the Free Software Foundation;
012     * either version 2.1 of the License, or (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public License along with this
019     * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA 02111-1307, USA.
021     *
022     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023     * in the United States and other countries.]
024     *
025     *
026     * ------------
027     * $Id: DependencyCollector.java 2713 2007-04-01 13:43:18Z taqua $
028     * ------------
029     * (C) Copyright 2006, by Pentaho Corporation.
030     */
031    package org.jfree.resourceloader;
032    
033    import java.util.HashMap;
034    import java.io.Serializable;
035    
036    /**
037     * Creation-Date: 08.04.2006, 14:12:14
038     *
039     * @author Thomas Morgner
040     */
041    public class DependencyCollector implements Serializable, Cloneable
042    {
043      private HashMap dependencies;
044    
045      public DependencyCollector(final ResourceKey source,
046                                 final long version)
047      {
048        if (source == null)
049        {
050          throw new NullPointerException();
051        }
052        dependencies = new HashMap();
053        dependencies.put(source, new Long(version));
054      }
055    
056      public ResourceKey[] getDependencies()
057      {
058        return (ResourceKey[]) dependencies.keySet().toArray
059                (new ResourceKey[dependencies.size()]);
060      }
061    
062      public void add(final Resource dependentResource)
063      {
064        final ResourceKey[] depKeys = dependentResource.getDependencies();
065        for (int i = 0; i < depKeys.length; i++)
066        {
067          final ResourceKey depKey = depKeys[i];
068          final long version = dependentResource.getVersion(depKey);
069          add(depKey, version);
070        }
071      }
072    
073      public void add(final ResourceKey resourceKey, final long version)
074      {
075        dependencies.put(resourceKey, new Long(version));
076      }
077    
078      public long getVersion(final ResourceKey key)
079      {
080        final Long l = (Long) dependencies.get(key);
081        if (l == null)
082        {
083          return -1;
084        }
085        return l.longValue();
086      }
087    
088      public Object clone () throws CloneNotSupportedException
089      {
090        final DependencyCollector dc = (DependencyCollector) super.clone();
091        dc.dependencies = (HashMap) dependencies.clone();
092        return dc;
093      }
094    }