001/* StringSelection.java -- Clipboard handler for text.
002   Copyright (C) 1999, 2004  Free Software Foundation, Inc.
003
004This file is part of GNU Classpath.
005
006GNU Classpath is free software; you can redistribute it and/or modify
007it under the terms of the GNU General Public License as published by
008the Free Software Foundation; either version 2, or (at your option)
009any later version.
010
011GNU Classpath is distributed in the hope that it will be useful, but
012WITHOUT ANY WARRANTY; without even the implied warranty of
013MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014General Public License for more details.
015
016You should have received a copy of the GNU General Public License
017along with GNU Classpath; see the file COPYING.  If not, write to the
018Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
01902110-1301 USA.
020
021Linking this library statically or dynamically with other modules is
022making a combined work based on this library.  Thus, the terms and
023conditions of the GNU General Public License cover the whole
024combination.
025
026As a special exception, the copyright holders of this library give you
027permission to link this library with independent modules to produce an
028executable, regardless of the license terms of these independent
029modules, and to copy and distribute the resulting executable under
030terms of your choice, provided that you also meet, for each linked
031independent module, the terms and conditions of the license of that
032module.  An independent module is a module which is not derived from
033or based on this library.  If you modify this library, you may extend
034this exception to your version of the library, but you are not
035obligated to do so.  If you do not wish to do so, delete this
036exception statement from your version. */
037
038
039package java.awt.datatransfer;
040
041import java.io.IOException;
042import java.io.StringReader;
043
044/**
045  * This class transfers a string as plain text using the clipboard.
046  *
047  * @author Aaron M. Renn (arenn@urbanophile.com)
048  */
049public class StringSelection implements Transferable, ClipboardOwner
050{
051
052/*
053 * Class Variables
054 */
055
056// List of flavors we support
057// XXX: DataFlavor.plainTextFlavor is deprecated.
058static final DataFlavor[] supported_flavors 
059   = { DataFlavor.stringFlavor,
060       DataFlavor.plainTextFlavor };
061
062/*************************************************************************/
063
064/*
065 * Instance Variables
066 */
067
068// This is the data to transfer
069private String data;
070
071  /**
072   * Transfer the specfied string as text.
073   *
074   * @param data the data for the string selection
075   */
076  public StringSelection(String data)
077  {
078    this.data = data;
079  }
080
081/**
082  * Returns a list of supported data flavors.
083  *
084  * @return A list of supported data flavors.
085  */
086public DataFlavor[]
087getTransferDataFlavors()
088{
089  return(supported_flavors);
090}
091
092/*************************************************************************/
093
094/**
095  * Tests whether or not the specified data flavor is supported.
096  *
097  * @param flavor The data flavor to test.
098  *
099  * @return <code>true</code> if the data flavor is supported,
100  * <code>false</code> otherwise.
101  */
102public boolean
103isDataFlavorSupported(DataFlavor flavor)
104{
105  for (int i = 0; i < supported_flavors.length; i++)
106    if (supported_flavors[i].equals(flavor))
107       return(true);
108
109  return(false);
110}
111
112/*************************************************************************/
113
114/**
115  * This method returns the data in the requested format.
116  *
117  * @param flavor The desired data flavor.
118  *
119  * @return The transferred data.
120  *
121  * @exception UnsupportedFlavorException If the specified flavor is not
122  * supported.
123  * @exception IOException If any other error occurs.
124  */
125public Object
126getTransferData(DataFlavor flavor) throws UnsupportedFlavorException,
127                                          IOException
128{
129  if (!isDataFlavorSupported(flavor))
130    throw new UnsupportedFlavorException(flavor);
131
132  if (DataFlavor.plainTextFlavor == flavor)
133      /* The behavior of this method for DataFlavor.plainTextFlavor and
134         equivalent DataFlavors is inconsistent with the definition of
135         DataFlavor.plainTextFlavor. We choose to do like Sun's implementation
136         and return a Reader instead of an InputString. */
137      /* return(new StringBufferInputStream(data)); */
138      return(new StringReader(data));
139  else // DataFlavor.stringFlavor
140      return data;
141}
142
143/*************************************************************************/
144
145/**
146  * Called when ownership of the clipboard object is lost.
147  *
148  * @param clipboard The affected clipboard.
149  * @param contents The clipboard contents.
150  */
151public void
152lostOwnership(Clipboard clipboard, Transferable contents)
153{
154  // FIXME: What does this do?
155}
156
157} // class StringSelection 
158