001    /* ===========================================================
002     * JFreeChart : a free chart library for the Java(tm) platform
003     * ===========================================================
004     *
005     * (C) Copyright 2000-2008, by Object Refinery Limited and Contributors.
006     *
007     * Project Info:  http://www.jfree.org/jfreechart/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     * ChartUtilities.java
029     * -------------------
030     * (C) Copyright 2001-2008, by Object Refinery Limited and Contributors.
031     *
032     * Original Author:  David Gilbert (for Object Refinery Limited);
033     * Contributor(s):   Wolfgang Irler;
034     *                   Richard Atkinson;
035     *                   Xavier Poinsard;
036     *
037     * Changes
038     * -------
039     * 11-Dec-2001 : Version 1.  The JPEG method comes from Wolfgang Irler's 
040     *               JFreeChartServletDemo class (DG);
041     * 23-Jan-2002 : Changed saveChartAsXXX() methods to pass IOExceptions back to 
042     *               caller (DG);
043     * 26-Jun-2002 : Added image map methods (DG);
044     * 05-Aug-2002 : Added writeBufferedImage methods
045     *               Modified writeImageMap method to support flexible image 
046     *               maps (RA);
047     * 26-Aug-2002 : Added saveChartAsJPEG and writeChartAsJPEG methods with info 
048     *               objects (RA);
049     * 05-Sep-2002 : Added writeImageMap() method to support OverLIB
050     *               - http://www.bosrup.com/web/overlib (RA);
051     * 26-Sep-2002 : Fixed errors reported by Checkstyle (DG);
052     * 17-Oct-2002 : Exposed JPEG quality setting and PNG compression level as 
053     *               parameters (DG);
054     * 25-Oct-2002 : Fixed writeChartAsJPEG() empty method bug (DG);
055     * 13-Mar-2003 : Updated writeImageMap method as suggested by Xavier Poinsard 
056     *               (see Feature Request 688079) (DG);
057     * 12-Aug-2003 : Added support for custom image maps using 
058     *               ToolTipTagFragmentGenerator and URLTagFragmentGenerator (RA);
059     * 02-Sep-2003 : Separated PNG encoding from writing chart to an 
060     *               OutputStream (RA);
061     * 04-Dec-2003 : Chart draw() method modified to include anchor point (DG);
062     * 20-Feb-2004 : Edited Javadocs and added argument checking (DG);
063     * 05-Apr-2004 : Fixed problem with buffered image type (DG);
064     * 01-Aug-2004 : Modified to use EncoderUtil for all image encoding (RA);
065     * 02-Aug-2004 : Delegated image map related functionality to ImageMapUtil (RA);
066     * 13-Jan-2005 : Renamed ImageMapUtil --> ImageMapUtilities, removed method
067     *               writeImageMap(PrintWriter, String, ChartRenderingInfo) which 
068     *               exists in ImageMapUtilities (DG);
069     * ------------- JFREECHART 1.0.x ---------------------------------------------
070     * 06-Feb-2006 : API doc update (DG);
071     * 19-Mar-2007 : Use try-finally to close output stream in saveChartAsXXX() 
072     *               methods (DG);
073     * 10-Jan-2008 : Fix bug 1868251 - don't create image with transparency when
074     *               saving to JPEG format (DG);
075     *
076     */
077    
078    package org.jfree.chart;
079    
080    import java.awt.Graphics2D;
081    import java.awt.geom.AffineTransform;
082    import java.awt.geom.Rectangle2D;
083    import java.awt.image.BufferedImage;
084    import java.io.BufferedOutputStream;
085    import java.io.File;
086    import java.io.FileOutputStream;
087    import java.io.IOException;
088    import java.io.OutputStream;
089    import java.io.PrintWriter;
090    
091    import org.jfree.chart.encoders.EncoderUtil;
092    import org.jfree.chart.encoders.ImageFormat;
093    import org.jfree.chart.imagemap.ImageMapUtilities;
094    import org.jfree.chart.imagemap.OverLIBToolTipTagFragmentGenerator;
095    import org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator;
096    import org.jfree.chart.imagemap.StandardURLTagFragmentGenerator;
097    import org.jfree.chart.imagemap.ToolTipTagFragmentGenerator;
098    import org.jfree.chart.imagemap.URLTagFragmentGenerator;
099    
100    /**
101     * A collection of utility methods for JFreeChart.  Includes methods for 
102     * converting charts to image formats (PNG and JPEG) plus creating simple HTML 
103     * image maps.
104     * 
105     * @see ImageMapUtilities
106     */
107    public abstract class ChartUtilities {
108    
109        /**
110         * Writes a chart to an output stream in PNG format.
111         *
112         * @param out  the output stream (<code>null</code> not permitted).
113         * @param chart  the chart (<code>null</code> not permitted).
114         * @param width  the image width.
115         * @param height  the image height.
116         *
117         * @throws IOException if there are any I/O errors.
118         */
119        public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
120                int width, int height) throws IOException {
121    
122            // defer argument checking...
123            writeChartAsPNG(out, chart, width, height, null);
124    
125        }
126    
127        /**
128         * Writes a chart to an output stream in PNG format.
129         *
130         * @param out  the output stream (<code>null</code> not permitted).
131         * @param chart  the chart (<code>null</code> not permitted).
132         * @param width  the image width.
133         * @param height  the image height.
134         * @param encodeAlpha  encode alpha?
135         * @param compression  the compression level (0-9).
136         *
137         * @throws IOException if there are any I/O errors.
138         */
139        public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
140                int width, int height, boolean encodeAlpha, int compression) 
141                throws IOException {
142    
143            // defer argument checking...
144            ChartUtilities.writeChartAsPNG(out, chart, width, height, null, 
145                    encodeAlpha, compression);
146    
147        }
148    
149        /**
150         * Writes a chart to an output stream in PNG format.  This method allows 
151         * you to pass in a {@link ChartRenderingInfo} object, to collect 
152         * information about the chart dimensions/entities.  You will need this 
153         * info if you want to create an HTML image map.
154         *
155         * @param out  the output stream (<code>null</code> not permitted).
156         * @param chart  the chart (<code>null</code> not permitted).
157         * @param width  the image width.
158         * @param height  the image height.
159         * @param info  the chart rendering info (<code>null</code> permitted).
160         *
161         * @throws IOException if there are any I/O errors.
162         */
163        public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
164                int width, int height,  ChartRenderingInfo info) 
165                throws IOException {
166    
167            if (chart == null) {
168                throw new IllegalArgumentException("Null 'chart' argument.");
169            }
170            BufferedImage bufferedImage 
171                    = chart.createBufferedImage(width, height, info);
172            EncoderUtil.writeBufferedImage(bufferedImage, ImageFormat.PNG, out);
173        }
174    
175        /**
176         * Writes a chart to an output stream in PNG format.  This method allows 
177         * you to pass in a {@link ChartRenderingInfo} object, to collect 
178         * information about the chart dimensions/entities.  You will need this 
179         * info if you want to create an HTML image map.
180         *
181         * @param out  the output stream (<code>null</code> not permitted).
182         * @param chart  the chart (<code>null</code> not permitted).
183         * @param width  the image width.
184         * @param height  the image height.
185         * @param info  carries back chart rendering info (<code>null</code> 
186         *              permitted).
187         * @param encodeAlpha  encode alpha?
188         * @param compression  the PNG compression level (0-9).
189         *
190         * @throws IOException if there are any I/O errors.
191         */
192        public static void writeChartAsPNG(OutputStream out, JFreeChart chart,
193                int width, int height, ChartRenderingInfo info,
194                boolean encodeAlpha, int compression) throws IOException {
195    
196            if (out == null) {
197                throw new IllegalArgumentException("Null 'out' argument.");
198            }
199            if (chart == null) {
200                throw new IllegalArgumentException("Null 'chart' argument.");
201            }
202            BufferedImage chartImage = chart.createBufferedImage(width, height, 
203                    BufferedImage.TYPE_INT_ARGB, info);
204            ChartUtilities.writeBufferedImageAsPNG(out, chartImage, encodeAlpha, 
205                    compression);
206    
207        }
208    
209        /**
210         * Writes a scaled version of a chart to an output stream in PNG format.
211         *
212         * @param out  the output stream (<code>null</code> not permitted).
213         * @param chart  the chart (<code>null</code> not permitted).
214         * @param width  the unscaled chart width.
215         * @param height  the unscaled chart height.
216         * @param widthScaleFactor  the horizontal scale factor.
217         * @param heightScaleFactor  the vertical scale factor.
218         *
219         * @throws IOException if there are any I/O problems.
220         */
221        public static void writeScaledChartAsPNG(OutputStream out,
222                JFreeChart chart, int width, int height, int widthScaleFactor,
223                int heightScaleFactor) throws IOException {
224    
225            if (out == null) {
226                throw new IllegalArgumentException("Null 'out' argument.");
227            }
228            if (chart == null) {
229                throw new IllegalArgumentException("Null 'chart' argument.");
230            }
231    
232            double desiredWidth = width * widthScaleFactor;
233            double desiredHeight = height * heightScaleFactor;
234            double defaultWidth = width;
235            double defaultHeight = height;
236            boolean scale = false;
237    
238            // get desired width and height from somewhere then...
239            if ((widthScaleFactor != 1) || (heightScaleFactor != 1)) {
240                scale = true;
241            }
242    
243            double scaleX = desiredWidth / defaultWidth;
244            double scaleY = desiredHeight / defaultHeight;
245    
246            BufferedImage image = new BufferedImage((int) desiredWidth, 
247                    (int) desiredHeight, BufferedImage.TYPE_INT_ARGB);
248            Graphics2D g2 = image.createGraphics();
249    
250            if (scale) {
251                AffineTransform saved = g2.getTransform();
252                g2.transform(AffineTransform.getScaleInstance(scaleX, scaleY));
253                chart.draw(g2, new Rectangle2D.Double(0, 0, defaultWidth, 
254                        defaultHeight), null, null);
255                g2.setTransform(saved);
256                g2.dispose();
257            }
258            else {
259                chart.draw(g2, new Rectangle2D.Double(0, 0, defaultWidth, 
260                        defaultHeight), null, null);
261            }
262            out.write(encodeAsPNG(image));
263    
264        }
265    
266        /**
267         * Saves a chart to the specified file in PNG format.
268         *
269         * @param file  the file name (<code>null</code> not permitted).
270         * @param chart  the chart (<code>null</code> not permitted).
271         * @param width  the image width.
272         * @param height  the image height.
273         *
274         * @throws IOException if there are any I/O errors.
275         */
276        public static void saveChartAsPNG(File file, JFreeChart chart,
277                int width, int height) throws IOException {
278    
279            // defer argument checking...
280            saveChartAsPNG(file, chart, width, height, null);
281    
282        }
283    
284        /**
285         * Saves a chart to a file in PNG format.  This method allows you to pass 
286         * in a {@link ChartRenderingInfo} object, to collect information about the 
287         * chart dimensions/entities.  You will need this info if you want to 
288         * create an HTML image map.
289         *
290         * @param file  the file (<code>null</code> not permitted).
291         * @param chart  the chart (<code>null</code> not permitted).
292         * @param width  the image width.
293         * @param height  the image height.
294         * @param info  the chart rendering info (<code>null</code> permitted).
295         *
296         * @throws IOException if there are any I/O errors.
297         */
298        public static void saveChartAsPNG(File file, JFreeChart chart,
299                int width, int height, ChartRenderingInfo info) 
300            throws IOException {
301    
302            if (file == null) {
303                throw new IllegalArgumentException("Null 'file' argument.");
304            }
305            OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
306            try {
307                ChartUtilities.writeChartAsPNG(out, chart, width, height, info);
308            }
309            finally {
310                out.close();
311            }
312        }
313    
314        /**
315         * Saves a chart to a file in PNG format.  This method allows you to pass 
316         * in a {@link ChartRenderingInfo} object, to collect information about the 
317         * chart dimensions/entities.  You will need this info if you want to 
318         * create an HTML image map.
319         *
320         * @param file  the file (<code>null</code> not permitted).
321         * @param chart  the chart (<code>null</code> not permitted).
322         * @param width  the image width.
323         * @param height  the image height.
324         * @param info  the chart rendering info (<code>null</code> permitted).
325         * @param encodeAlpha  encode alpha?
326         * @param compression  the PNG compression level (0-9).
327         *
328         * @throws IOException if there are any I/O errors.
329         */
330        public static void saveChartAsPNG(File file, JFreeChart chart,
331               int width, int height, ChartRenderingInfo info, boolean encodeAlpha,
332               int compression) throws IOException {
333    
334            if (file == null) {
335                throw new IllegalArgumentException("Null 'file' argument.");
336            }
337            if (chart == null) {
338                throw new IllegalArgumentException("Null 'chart' argument.");
339            }
340    
341            OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
342            try {
343                writeChartAsPNG(out, chart, width, height, info, encodeAlpha, 
344                        compression);
345            }
346            finally {
347                out.close();
348            }
349    
350        }
351    
352        /**
353         * Writes a chart to an output stream in JPEG format.  Please note that
354         * JPEG is a poor format for chart images, use PNG if possible.
355         * 
356         * @param out  the output stream (<code>null</code> not permitted).
357         * @param chart  the chart (<code>null</code> not permitted).
358         * @param width  the image width.
359         * @param height  the image height.
360         *
361         * @throws IOException if there are any I/O errors.
362         */
363        public static void writeChartAsJPEG(OutputStream out,
364                JFreeChart chart, int width, int height) throws IOException {
365    
366            // defer argument checking...
367            writeChartAsJPEG(out, chart, width, height, null);
368    
369        }
370    
371        /**
372         * Writes a chart to an output stream in JPEG format.  Please note that
373         * JPEG is a poor format for chart images, use PNG if possible.
374         *
375         * @param out  the output stream (<code>null</code> not permitted).
376         * @param quality  the quality setting.
377         * @param chart  the chart (<code>null</code> not permitted).
378         * @param width  the image width.
379         * @param height  the image height.
380         *
381         * @throws IOException if there are any I/O errors.
382         */
383        public static void writeChartAsJPEG(OutputStream out, float quality,
384                JFreeChart chart, int width, int height) throws IOException {
385    
386            // defer argument checking...
387            ChartUtilities.writeChartAsJPEG(out, quality, chart, width, height, 
388                    null);
389    
390        }
391    
392        /**
393         * Writes a chart to an output stream in JPEG format. This method allows 
394         * you to pass in a {@link ChartRenderingInfo} object, to collect 
395         * information about the chart dimensions/entities.  You will need this 
396         * info if you want to create an HTML image map.
397         *
398         * @param out  the output stream (<code>null</code> not permitted).
399         * @param chart  the chart (<code>null</code> not permitted).
400         * @param width  the image width.
401         * @param height  the image height.
402         * @param info  the chart rendering info (<code>null</code> permitted).
403         *
404         * @throws IOException if there are any I/O errors.
405         */
406        public static void writeChartAsJPEG(OutputStream out, JFreeChart chart,
407                int width, int height, ChartRenderingInfo info) 
408                throws IOException {
409    
410            if (chart == null) {
411                throw new IllegalArgumentException("Null 'chart' argument.");
412            }
413            BufferedImage image = chart.createBufferedImage(width, height, 
414                    BufferedImage.TYPE_INT_RGB, info);
415            EncoderUtil.writeBufferedImage(image, ImageFormat.JPEG, out);
416    
417        }
418    
419        /**
420         * Writes a chart to an output stream in JPEG format.  This method allows 
421         * you to pass in a {@link ChartRenderingInfo} object, to collect 
422         * information about the chart dimensions/entities.  You will need this 
423         * info if you want to create an HTML image map.
424         *
425         * @param out  the output stream (<code>null</code> not permitted).
426         * @param quality  the output quality (0.0f to 1.0f).
427         * @param chart  the chart (<code>null</code> not permitted).
428         * @param width  the image width.
429         * @param height  the image height.
430         * @param info  the chart rendering info (<code>null</code> permitted).
431         *
432         * @throws IOException if there are any I/O errors.
433         */
434        public static void writeChartAsJPEG(OutputStream out, float quality,
435                JFreeChart chart, int width, int height, ChartRenderingInfo info) 
436                throws IOException {
437    
438            if (chart == null) {
439                throw new IllegalArgumentException("Null 'chart' argument.");
440            }
441            BufferedImage image = chart.createBufferedImage(width, height, 
442                    BufferedImage.TYPE_INT_RGB, info);
443            EncoderUtil.writeBufferedImage(image, ImageFormat.JPEG, out, quality);
444    
445        }
446    
447        /**
448         * Saves a chart to a file in JPEG format.
449         *
450         * @param file  the file (<code>null</code> not permitted).
451         * @param chart  the chart (<code>null</code> not permitted).
452         * @param width  the image width.
453         * @param height  the image height.
454         *
455         * @throws IOException if there are any I/O errors.
456         */
457        public static void saveChartAsJPEG(File file, JFreeChart chart,
458                int width, int height) throws IOException {
459    
460            // defer argument checking...
461            saveChartAsJPEG(file, chart, width, height, null);
462    
463        }
464    
465        /**
466         * Saves a chart to a file in JPEG format.
467         *
468         * @param file  the file (<code>null</code> not permitted).
469         * @param quality  the JPEG quality setting.
470         * @param chart  the chart (<code>null</code> not permitted).
471         * @param width  the image width.
472         * @param height  the image height.
473         *
474         * @throws IOException if there are any I/O errors.
475         */
476        public static void saveChartAsJPEG(File file, float quality,
477                JFreeChart chart, int width, int height) throws IOException {
478    
479            // defer argument checking...
480            saveChartAsJPEG(file, quality, chart, width, height, null);
481    
482        }
483    
484        /**
485         * Saves a chart to a file in JPEG format.  This method allows you to pass 
486         * in a {@link ChartRenderingInfo} object, to collect information about the 
487         * chart dimensions/entities.  You will need this info if you want to 
488         * create an HTML image map.
489         *
490         * @param file  the file name (<code>null</code> not permitted).
491         * @param chart  the chart (<code>null</code> not permitted).
492         * @param width  the image width.
493         * @param height  the image height.
494         * @param info  the chart rendering info (<code>null</code> permitted).
495         *
496         * @throws IOException if there are any I/O errors.
497         */
498        public static void saveChartAsJPEG(File file, JFreeChart chart,
499                int width, int height, ChartRenderingInfo info) throws IOException {
500    
501            if (file == null) {
502                throw new IllegalArgumentException("Null 'file' argument.");
503            }
504            if (chart == null) {
505                throw new IllegalArgumentException("Null 'chart' argument.");
506            }
507            OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
508            try {
509                writeChartAsJPEG(out, chart, width, height, info);
510            }
511            finally {
512                out.close();
513            }
514    
515        }
516    
517        /**
518         * Saves a chart to a file in JPEG format.  This method allows you to pass 
519         * in a {@link ChartRenderingInfo} object, to collect information about the 
520         * chart dimensions/entities.  You will need this info if you want to 
521         * create an HTML image map.
522         *
523         * @param file  the file name (<code>null</code> not permitted).
524         * @param quality  the quality setting.
525         * @param chart  the chart (<code>null</code> not permitted).
526         * @param width  the image width.
527         * @param height  the image height.
528         * @param info  the chart rendering info (<code>null</code> permitted).
529         *
530         * @throws IOException if there are any I/O errors.
531         */
532        public static void saveChartAsJPEG(File file, float quality,
533                JFreeChart chart, int width, int height,
534                ChartRenderingInfo info) throws IOException {
535    
536            if (file == null) {
537                throw new IllegalArgumentException("Null 'file' argument.");
538            }
539            if (chart == null) {
540                throw new IllegalArgumentException("Null 'chart' argument.");
541            }
542            
543            OutputStream out = new BufferedOutputStream(new FileOutputStream(
544                    file));
545            try {
546                writeChartAsJPEG(out, quality, chart, width, height, info);
547            }
548            finally {
549                out.close();
550            }
551    
552        }
553    
554        /**
555         * Writes a {@link BufferedImage} to an output stream in JPEG format.
556         *
557         * @param out  the output stream (<code>null</code> not permitted).
558         * @param image  the image (<code>null</code> not permitted).
559         *
560         * @throws IOException if there are any I/O errors.
561         */
562        public static void writeBufferedImageAsJPEG(OutputStream out, 
563                BufferedImage image) throws IOException {
564    
565            // defer argument checking...
566            writeBufferedImageAsJPEG(out, 0.75f, image);
567    
568        }
569    
570        /**
571         * Writes a {@link BufferedImage} to an output stream in JPEG format.
572         *
573         * @param out  the output stream (<code>null</code> not permitted).
574         * @param quality  the image quality (0.0f to 1.0f).
575         * @param image  the image (<code>null</code> not permitted).
576         *
577         * @throws IOException if there are any I/O errors.
578         */
579        public static void writeBufferedImageAsJPEG(OutputStream out, float quality,
580                BufferedImage image) throws IOException {
581    
582            EncoderUtil.writeBufferedImage(image, ImageFormat.JPEG, out, quality);
583    
584        }
585    
586        /**
587         * Writes a {@link BufferedImage} to an output stream in PNG format.
588         *
589         * @param out  the output stream (<code>null</code> not permitted).
590         * @param image  the image (<code>null</code> not permitted).
591         *
592         * @throws IOException if there are any I/O errors.
593         */
594        public static void writeBufferedImageAsPNG(OutputStream out, 
595                BufferedImage image) throws IOException {
596    
597            EncoderUtil.writeBufferedImage(image, ImageFormat.PNG, out);
598    
599        }
600    
601        /**
602         * Writes a {@link BufferedImage} to an output stream in PNG format.
603         *
604         * @param out  the output stream (<code>null</code> not permitted).
605         * @param image  the image (<code>null</code> not permitted).
606         * @param encodeAlpha  encode alpha?
607         * @param compression  the compression level (0-9).
608         *
609         * @throws IOException if there are any I/O errors.
610         */
611        public static void writeBufferedImageAsPNG(OutputStream out,
612                BufferedImage image, boolean encodeAlpha, int compression) 
613                throws IOException {
614    
615            EncoderUtil.writeBufferedImage(image, ImageFormat.PNG, out, 
616                    compression, encodeAlpha);
617        }
618    
619        /**
620         * Encodes a {@link BufferedImage} to PNG format.
621         *
622         * @param image  the image (<code>null</code> not permitted).
623         *
624         * @return A byte array in PNG format.
625         * 
626         * @throws IOException if there is an I/O problem.
627         */
628        public static byte[] encodeAsPNG(BufferedImage image) throws IOException {
629            return EncoderUtil.encode(image, ImageFormat.PNG);
630        }
631    
632        /**
633         * Encodes a {@link BufferedImage} to PNG format.
634         *
635         * @param image  the image (<code>null</code> not permitted).
636         * @param encodeAlpha  encode alpha?
637         * @param compression  the PNG compression level (0-9).
638         *
639         * @return The byte array in PNG format.
640         * 
641         * @throws IOException if there is an I/O problem.
642         */
643        public static byte[] encodeAsPNG(BufferedImage image, boolean encodeAlpha, 
644                                         int compression) 
645                throws IOException {
646            return EncoderUtil.encode(image, ImageFormat.PNG, compression, 
647                    encodeAlpha);
648        }
649    
650        /**
651         * Writes an image map to an output stream.
652         *
653         * @param writer  the writer (<code>null</code> not permitted).
654         * @param name  the map name (<code>null</code> not permitted).
655         * @param info  the chart rendering info (<code>null</code> not permitted).
656         * @param useOverLibForToolTips  whether to use OverLIB for tooltips
657         *                               (http://www.bosrup.com/web/overlib/).
658         *
659         * @throws IOException if there are any I/O errors.
660         */
661        public static void writeImageMap(PrintWriter writer,
662                                         String name,
663                                         ChartRenderingInfo info,
664                                         boolean useOverLibForToolTips) 
665            throws IOException {
666    
667            ToolTipTagFragmentGenerator toolTipTagFragmentGenerator = null;
668            if (useOverLibForToolTips) {
669                toolTipTagFragmentGenerator 
670                        = new OverLIBToolTipTagFragmentGenerator();
671            }
672            else {
673                toolTipTagFragmentGenerator 
674                        = new StandardToolTipTagFragmentGenerator();
675            }
676            ImageMapUtilities.writeImageMap(writer, name, info, 
677                    toolTipTagFragmentGenerator, 
678                    new StandardURLTagFragmentGenerator());
679    
680        }
681    
682        /**
683         * Writes an image map to the specified writer.
684         *
685         * @param writer  the writer (<code>null</code> not permitted).
686         * @param name  the map name (<code>null</code> not permitted).
687         * @param info  the chart rendering info (<code>null</code> not permitted).
688         * @param toolTipTagFragmentGenerator  a generator for the HTML fragment
689         *     that will contain the tooltip text (<code>null</code> not permitted 
690         *     if <code>info</code> contains tooltip information).
691         * @param urlTagFragmentGenerator  a generator for the HTML fragment that
692         *     will contain the URL reference (<code>null</code> not permitted if 
693         *     <code>info</code> contains URLs).
694         *
695         * @throws IOException if there are any I/O errors.
696         */
697        public static void writeImageMap(PrintWriter writer, String name, 
698                ChartRenderingInfo info, 
699                ToolTipTagFragmentGenerator toolTipTagFragmentGenerator,
700                URLTagFragmentGenerator urlTagFragmentGenerator) 
701                throws IOException {
702    
703            writer.println(ImageMapUtilities.getImageMap(name, info, 
704                    toolTipTagFragmentGenerator, urlTagFragmentGenerator));
705        }
706    
707        /**
708         * Creates an HTML image map.  This method maps to 
709         * {@link ImageMapUtilities#getImageMap(String, ChartRenderingInfo, 
710         * ToolTipTagFragmentGenerator, URLTagFragmentGenerator)}, using default 
711         * generators.
712         *
713         * @param name  the map name (<code>null</code> not permitted).
714         * @param info  the chart rendering info (<code>null</code> not permitted).
715         *
716         * @return The map tag.
717         */
718        public static String getImageMap(String name, ChartRenderingInfo info) {
719            return ImageMapUtilities.getImageMap(name, info,
720                    new StandardToolTipTagFragmentGenerator(),
721                    new StandardURLTagFragmentGenerator());
722        }
723    
724        /**
725         * Creates an HTML image map.  This method maps directly to
726         * {@link ImageMapUtilities#getImageMap(String, ChartRenderingInfo, 
727         * ToolTipTagFragmentGenerator, URLTagFragmentGenerator)}.
728         *
729         * @param name  the map name (<code>null</code> not permitted).
730         * @param info  the chart rendering info (<code>null</code> not permitted).
731         * @param toolTipTagFragmentGenerator  a generator for the HTML fragment
732         *     that will contain the tooltip text (<code>null</code> not permitted 
733         *     if <code>info</code> contains tooltip information).
734         * @param urlTagFragmentGenerator  a generator for the HTML fragment that
735         *     will contain the URL reference (<code>null</code> not permitted if 
736         *     <code>info</code> contains URLs).
737         *
738         * @return The map tag.
739         */
740        public static String getImageMap(String name, ChartRenderingInfo info,
741                ToolTipTagFragmentGenerator toolTipTagFragmentGenerator,
742                URLTagFragmentGenerator urlTagFragmentGenerator) {
743    
744            return ImageMapUtilities.getImageMap(name, info, 
745                    toolTipTagFragmentGenerator, urlTagFragmentGenerator);
746            
747        }
748    
749    }