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: SimpleResource.java 3520 2007-10-16 10:34:47Z tmorgner $
028     * ------------
029     * (C) Copyright 2006, by Pentaho Corporation.
030     */
031    package org.jfree.resourceloader;
032    
033    /**
034     * A simple resource with only a single dependency.
035     *
036     * @author Thomas Morgner
037     */
038    public class SimpleResource implements Resource
039    {
040      private Object value;
041      private ResourceKey key;
042      private long version;
043    
044      public SimpleResource(final ResourceKey key,
045                            final Object value,
046                            final long version)
047      {
048        if (key == null)
049        {
050          throw new NullPointerException();
051        }
052        this.value = value;
053        this.key = key;
054        this.version = version;
055      }
056    
057      public Object getResource()
058      {
059        return value;
060      }
061    
062      public long getVersion(final ResourceKey key)
063      {
064        if (key.equals(this.key))
065        {
066          return version;
067        }
068        // -1 is the placeholder for: not known.
069        return -1;
070      }
071    
072      /**
073       * The primary source is also included in this set. The dependencies are given
074       * as ResourceKey objects. The keys itself do not hold any state information.
075       * <p/>
076       * The dependencies do not track deep dependencies. So if Resource A depends
077       * on Resource B which depends on Resource C, then A only knows about B, not
078       * C.
079       *
080       * @return
081       */
082      public ResourceKey[] getDependencies()
083      {
084        return new ResourceKey[]{getSource()};
085      }
086    
087      public ResourceKey getSource()
088      {
089        return key;
090      }
091    }