Frames | No Frames |
1: /* =========================================================== 2: * JFreeChart : a free chart library for the Java(tm) platform 3: * =========================================================== 4: * 5: * (C) Copyright 2000-2005, 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: * ImageMapUtilities.java 29: * ---------------------- 30: * (C) Copyright 2004, 2005, by Richard Atkinson and Contributors. 31: * 32: * Original Author: Richard Atkinson; 33: * Contributor(s): David Gilbert (for Object Refinery Limited); 34: * 35: * $Id: ImageMapUtilities.java,v 1.3.2.1 2005/10/25 20:42:39 mungady Exp $ 36: * 37: * Changes 38: * ------- 39: * 02-Aug-2004 : Initial version (RA); 40: * 13-Jan-2005 : Renamed ImageMapUtilities (DG); 41: * 19-Jan-2005 : Reversed order of tags for chart entities to get correct 42: * layering (DG); 43: * 44: */ 45: 46: package org.jfree.chart.imagemap; 47: 48: import java.io.IOException; 49: import java.io.PrintWriter; 50: 51: import org.jfree.chart.ChartRenderingInfo; 52: import org.jfree.chart.entity.ChartEntity; 53: import org.jfree.chart.entity.EntityCollection; 54: import org.jfree.util.StringUtils; 55: 56: /** 57: * Collection of utility methods related to producing image maps. 58: * Functionality was originally in {@link org.jfree.chart.ChartUtilities}. 59: * 60: * @author Richard Atkinson 61: */ 62: public class ImageMapUtilities { 63: 64: /** 65: * Writes an image map to an output stream. 66: * 67: * @param writer the writer (<code>null</code> not permitted). 68: * @param name the map name (<code>null</code> not permitted). 69: * @param info the chart rendering info (<code>null</code> not permitted). 70: * 71: * @throws java.io.IOException if there are any I/O errors. 72: */ 73: public static void writeImageMap(PrintWriter writer, String name, 74: ChartRenderingInfo info) 75: throws IOException { 76: 77: // defer argument checking... 78: ImageMapUtilities.writeImageMap( 79: writer, name, info, 80: new StandardToolTipTagFragmentGenerator(), 81: new StandardURLTagFragmentGenerator() 82: ); 83: 84: } 85: 86: /** 87: * Writes an image map to an output stream. 88: * 89: * @param writer the writer (<code>null</code> not permitted). 90: * @param name the map name (<code>null</code> not permitted). 91: * @param info the chart rendering info (<code>null</code> not permitted). 92: * @param useOverLibForToolTips whether to use OverLIB for tooltips 93: * (http://www.bosrup.com/web/overlib/). 94: * 95: * @throws java.io.IOException if there are any I/O errors. 96: */ 97: public static void writeImageMap(PrintWriter writer, 98: String name, 99: ChartRenderingInfo info, 100: boolean useOverLibForToolTips) 101: throws IOException { 102: 103: ToolTipTagFragmentGenerator toolTipTagFragmentGenerator = null; 104: if (useOverLibForToolTips) { 105: toolTipTagFragmentGenerator 106: = new OverLIBToolTipTagFragmentGenerator(); 107: } 108: else { 109: toolTipTagFragmentGenerator 110: = new StandardToolTipTagFragmentGenerator(); 111: } 112: ImageMapUtilities.writeImageMap( 113: writer, name, info, toolTipTagFragmentGenerator, 114: new StandardURLTagFragmentGenerator() 115: ); 116: 117: } 118: 119: /** 120: * Writes an image map to an output stream. 121: * 122: * @param writer the writer (<code>null</code> not permitted). 123: * @param name the map name (<code>null</code> not permitted). 124: * @param info the chart rendering info (<code>null</code> not permitted). 125: * @param toolTipTagFragmentGenerator the tool tip generator. 126: * @param urlTagFragmentGenerator the url generator. 127: * 128: * @throws java.io.IOException if there are any I/O errors. 129: */ 130: public static void writeImageMap(PrintWriter writer, String name, 131: ChartRenderingInfo info, 132: ToolTipTagFragmentGenerator toolTipTagFragmentGenerator, 133: URLTagFragmentGenerator urlTagFragmentGenerator) 134: throws IOException { 135: 136: writer.println( 137: ImageMapUtilities.getImageMap( 138: name, info, toolTipTagFragmentGenerator, urlTagFragmentGenerator 139: ) 140: ); 141: } 142: 143: /** 144: * Creates an image map element that complies with the XHTML 1.0 145: * specification. 146: * 147: * @param name the map name (<code>null</code> not permitted). 148: * @param info the chart rendering info (<code>null</code> not permitted). 149: * 150: * @return The map element. 151: */ 152: public static String getImageMap(String name, ChartRenderingInfo info) { 153: return ImageMapUtilities.getImageMap( 154: name, 155: info, 156: new StandardToolTipTagFragmentGenerator(), 157: new StandardURLTagFragmentGenerator() 158: ); 159: } 160: 161: /** 162: * Creates an image map element that complies with the XHTML 1.0 163: * specification. 164: * 165: * @param name the map name (<code>null</code> not permitted). 166: * @param info the chart rendering info (<code>null</code> not permitted). 167: * @param toolTipTagFragmentGenerator the tool tip generator. 168: * @param urlTagFragmentGenerator the url generator. 169: * 170: * @return The map tag. 171: */ 172: public static String getImageMap(String name, ChartRenderingInfo info, 173: ToolTipTagFragmentGenerator toolTipTagFragmentGenerator, 174: URLTagFragmentGenerator urlTagFragmentGenerator) { 175: 176: StringBuffer sb = new StringBuffer(); 177: sb.append("<map id=\"" + name + "\" name=\"" + name + "\">"); 178: sb.append(StringUtils.getLineSeparator()); 179: EntityCollection entities = info.getEntityCollection(); 180: if (entities != null) { 181: int count = entities.getEntityCount(); 182: for (int i = count - 1; i >= 0; i--) { 183: ChartEntity entity = entities.getEntity(i); 184: if (entity.getToolTipText() != null 185: || entity.getURLText() != null) { 186: String area = entity.getImageMapAreaTag( 187: toolTipTagFragmentGenerator, urlTagFragmentGenerator 188: ); 189: if (area.length() > 0) { 190: sb.append(area); 191: sb.append(StringUtils.getLineSeparator()); 192: } 193: } 194: } 195: } 196: sb.append("</map>"); 197: return sb.toString(); 198: 199: } 200: 201: }