Save This Page
Home » jcommon-1.0.13 » org.jfree » chart » urls » [javadoc | source]
    1   /* ======================================
    2    * JFreeChart : a free Java chart library
    3    * ======================================
    4    *
    5    * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
    6    *
    7    * Project Info:  http://www.jfree.org/jfreechart/index.html
    8    *
    9    * This library is free software; you can redistribute it and/or modify it 
   10    * under the terms of the GNU Lesser General Public License as published by 
   11    * the Free Software Foundation; either version 2.1 of the License, or 
   12    * (at your option) any later version.
   13    *
   14    * This library is distributed in the hope that it will be useful, but 
   15    * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
   16    * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
   17    * License for more details.
   18    *
   19    * You should have received a copy of the GNU Lesser General Public
   20    * License along with this library; if not, write to the Free Software
   21    * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
   22    * USA.  
   23    *
   24    * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
   25    * in the United States and other countries.]
   26    *
   27    * --------------------------
   28    * CustomPieURLGenerator.java
   29    * --------------------------
   30    * (C) Copyright 2004-2007, by David Basten and Contributors.
   31    *
   32    * Original Author:  David Basten;
   33    * Contributors:     -;
   34    *
   35    * Changes:
   36    * --------
   37    * 04-Feb-2004 : Version 1, contributed by David Basten based on 
   38    *               CustomXYURLGenerator by Richard Atkinson (added to main source
   39    *               tree on 25-May-2004);
   40    *
   41    */
   42   package org.jfree.chart.urls;
   43   
   44   import java.io.Serializable;
   45   import java.util.ArrayList;
   46   import java.util.HashMap;
   47   import java.util.Iterator;
   48   import java.util.Map;
   49   import java.util.Set;
   50   
   51   import org.jfree.chart.plot.MultiplePiePlot;
   52   import org.jfree.data.general.PieDataset;
   53   import org.jfree.util.PublicCloneable;
   54   
   55   /**
   56    * A custom URL generator for pie charts.
   57    */
   58   public class CustomPieURLGenerator implements PieURLGenerator, 
   59                                                 Cloneable, 
   60                                                 PublicCloneable, 
   61                                                 Serializable {
   62   
   63       /** For serialization. */
   64       private static final long serialVersionUID = 7100607670144900503L;
   65   
   66       /** Storage for the URLs. */
   67       private ArrayList urls;
   68   
   69       /**
   70        * Creates a new <code>CustomPieURLGenerator</code> instance, initially
   71        * empty.  Call {@link #addURLs(Map)} to specify the URL fragments to be
   72        * used.
   73        */
   74       public CustomPieURLGenerator() {
   75           this.urls = new ArrayList();
   76       }
   77   
   78       /**
   79        * Generates a URL fragment.
   80        *
   81        * @param dataset  the dataset (ignored).
   82        * @param key  the item key.
   83        * @param pieIndex  the pie index.
   84        *
   85        * @return A string containing the generated URL.
   86        * 
   87        * @see #getURL(Comparable, int)
   88        */
   89       public String generateURL(PieDataset dataset, Comparable key, 
   90                                 int pieIndex) {
   91           return getURL(key, pieIndex);
   92       }
   93   
   94       /**
   95        * Returns the number of URL maps stored by the renderer.
   96        * 
   97        * @return The list count.
   98        * 
   99        * @see #addURLs(Map)
  100        */
  101       public int getListCount() {
  102           return this.urls.size();
  103       }
  104       
  105       /**
  106        * Returns the number of URLs in a given map (specified by its position 
  107        * in the map list).
  108        * 
  109        * @param list  the list index (zero based).
  110        * 
  111        * @return The URL count.
  112        * 
  113        * @see #getListCount()
  114        */
  115       public int getURLCount(int list) {
  116           int result = 0;
  117           Map urlMap = (Map) this.urls.get(list);
  118           if (urlMap != null) {
  119               result = urlMap.size();
  120           }
  121           return result;
  122       }
  123   
  124       /**
  125        * Returns the URL for a section in the specified map.
  126        * 
  127        * @param key  the key.
  128        * @param mapIndex  the map index.
  129        * 
  130        * @return The URL.
  131        */    
  132       public String getURL(Comparable key, int mapIndex) {
  133           String result = null;
  134           if (mapIndex < getListCount()) {
  135               Map urlMap = (Map) this.urls.get(mapIndex);
  136               if (urlMap != null) {
  137                   result = (String) urlMap.get(key);
  138               }
  139           }
  140           return result;
  141       }
  142   
  143       /**
  144        * Adds a map containing <code>(key, URL)</code> mappings where each
  145        * <code>key</code> is an instance of <code>Comparable</code> 
  146        * (corresponding to the key for an item in a pie dataset) and each 
  147        * <code>URL</code> is a <code>String</code> representing a URL fragment.
  148        * <br><br>
  149        * The map is appended to an internal list...you can add multiple maps
  150        * if you are working with, say, a {@link MultiplePiePlot}.
  151        * 
  152        * @param urlMap  the URLs (<code>null</code> permitted).
  153        */
  154       public void addURLs(Map urlMap) {
  155           this.urls.add(urlMap);
  156       }
  157       
  158       /**
  159        * Tests if this object is equal to another.
  160        * 
  161        * @param o  the other object.
  162        * 
  163        * @return A boolean.
  164        */
  165       public boolean equals(Object o) {
  166       
  167           if (o == this) {
  168               return true;
  169           }
  170           
  171           if (o instanceof CustomPieURLGenerator) {
  172               CustomPieURLGenerator generator = (CustomPieURLGenerator) o;
  173               if (getListCount() != generator.getListCount()) {
  174                   return false;
  175               }
  176               Set keySet;
  177               for (int pieItem = 0; pieItem < getListCount(); pieItem++) {
  178                   if (getURLCount(pieItem) != generator.getURLCount(pieItem)) {
  179                       return false;
  180                   }
  181                   keySet = ((HashMap) this.urls.get(pieItem)).keySet();
  182                   String key;
  183                   for (Iterator i = keySet.iterator(); i.hasNext();) {
  184                   key = (String) i.next();
  185                       if (!getURL(key, pieItem).equals(
  186                               generator.getURL(key, pieItem))) {
  187                           return false;
  188                       }
  189                   }
  190               }
  191               return true;
  192           }
  193           return false;
  194       }
  195   
  196       /**
  197        * Returns a clone of the generator.
  198        * 
  199        * @return A clone.
  200        * 
  201        * @throws CloneNotSupportedException if cloning is not supported.
  202        */
  203       public Object clone() throws CloneNotSupportedException {
  204           CustomPieURLGenerator urlGen = new CustomPieURLGenerator();
  205           Map map;
  206           Map newMap;
  207           String key;
  208   
  209           for (Iterator i = this.urls.iterator(); i.hasNext();) {
  210               map = (Map) i.next();
  211   
  212               newMap = new HashMap();
  213               for (Iterator j = map.keySet().iterator(); j.hasNext();) {
  214                   key = (String) j.next();
  215                   newMap.put(key, map.get(key));
  216               }
  217   
  218               urlGen.addURLs(newMap);
  219               newMap = null;
  220           }
  221   
  222           return urlGen;
  223       }
  224   
  225   }

Save This Page
Home » jcommon-1.0.13 » org.jfree » chart » urls » [javadoc | source]