001 /* ===========================================================
002 * JFreeChart : a free chart library for the Java(tm) platform
003 * ===========================================================
004 *
005 * (C) Copyright 2000-2009, 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 * ChartSelection.java
029 * -------------------
030 * (C) Copyright 2009, by Object Refinery Limited.
031 *
032 * Original Author: David Gilbert (for Object Refinery Limited);
033 * Contributor(s): -;
034 *
035 * Changes
036 * -------
037 * 08-Apr-2009 : Version 1, with inspiration from patch 1460845 (DG);
038 *
039 */
040
041 package org.jfree.chart;
042
043 import java.awt.datatransfer.DataFlavor;
044 import java.awt.datatransfer.Transferable;
045 import java.awt.datatransfer.UnsupportedFlavorException;
046 import java.io.IOException;
047
048 /**
049 * A class used to represent a chart on the clipboard.
050 *
051 * @since 1.0.13
052 */
053 public class ChartTransferable implements Transferable {
054
055 /** The data flavor. */
056 final DataFlavor imageFlavor = new DataFlavor(
057 "image/x-java-image; class=java.awt.Image", "Image");
058
059 /** The chart. */
060 private JFreeChart chart;
061
062 /** The width of the chart on the clipboard. */
063 private int width;
064
065 /** The height of the chart on the clipboard. */
066 private int height;
067
068 /**
069 * Creates a new chart selection.
070 *
071 * @param chart the chart.
072 * @param width the chart width.
073 * @param height the chart height.
074 */
075 public ChartTransferable(JFreeChart chart, int width, int height) {
076 this(chart, width, height, true);
077 }
078
079 /**
080 * Creates a new chart selection.
081 *
082 * @param chart the chart.
083 * @param width the chart width.
084 * @param height the chart height.
085 * @param cloneData clone the dataset(s)?
086 */
087 public ChartTransferable(JFreeChart chart, int width, int height,
088 boolean cloneData) {
089
090 // we clone the chart because presumably there can be some delay
091 // between putting this instance on the system clipboard and
092 // actually having the getTransferData() method called...
093 try {
094 this.chart = (JFreeChart) chart.clone();
095 }
096 catch (CloneNotSupportedException e) {
097 this.chart = chart;
098 }
099 this.width = width;
100 this.height = height;
101 // FIXME: we've cloned the chart, but the dataset(s) aren't cloned
102 // and we should do that
103 }
104
105 /**
106 * Returns the data flavors supported.
107 *
108 * @return The data flavors supported.
109 */
110 public DataFlavor[] getTransferDataFlavors() {
111 return new DataFlavor[] {this.imageFlavor};
112 }
113
114 /**
115 * Returns <code>true</code> if the specified flavor is supported.
116 *
117 * @param flavor the flavor.
118 *
119 * @return A boolean.
120 */
121 public boolean isDataFlavorSupported(DataFlavor flavor) {
122 return this.imageFlavor.equals(flavor);
123 }
124
125 /**
126 * Returns the content for the requested flavor, if it is supported.
127 *
128 * @param flavor the requested flavor.
129 *
130 * @return The content.
131 *
132 * @throws java.awt.datatransfer.UnsupportedFlavorException
133 * @throws java.io.IOException
134 */
135 public Object getTransferData(DataFlavor flavor)
136 throws UnsupportedFlavorException, IOException {
137
138 if (this.imageFlavor.equals(flavor)) {
139 return this.chart.createBufferedImage(width, height);
140 }
141 else {
142 throw new UnsupportedFlavorException(flavor);
143 }
144 }
145
146 }