001    /* StringSelection.java -- Clipboard handler for text.
002       Copyright (C) 1999, 2004  Free Software Foundation, Inc.
003    
004    This file is part of GNU Classpath.
005    
006    GNU Classpath is free software; you can redistribute it and/or modify
007    it under the terms of the GNU General Public License as published by
008    the Free Software Foundation; either version 2, or (at your option)
009    any later version.
010    
011    GNU Classpath is distributed in the hope that it will be useful, but
012    WITHOUT ANY WARRANTY; without even the implied warranty of
013    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014    General Public License for more details.
015    
016    You should have received a copy of the GNU General Public License
017    along with GNU Classpath; see the file COPYING.  If not, write to the
018    Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
019    02110-1301 USA.
020    
021    Linking this library statically or dynamically with other modules is
022    making a combined work based on this library.  Thus, the terms and
023    conditions of the GNU General Public License cover the whole
024    combination.
025    
026    As a special exception, the copyright holders of this library give you
027    permission to link this library with independent modules to produce an
028    executable, regardless of the license terms of these independent
029    modules, and to copy and distribute the resulting executable under
030    terms of your choice, provided that you also meet, for each linked
031    independent module, the terms and conditions of the license of that
032    module.  An independent module is a module which is not derived from
033    or based on this library.  If you modify this library, you may extend
034    this exception to your version of the library, but you are not
035    obligated to do so.  If you do not wish to do so, delete this
036    exception statement from your version. */
037    
038    
039    package java.awt.datatransfer;
040    
041    import java.io.IOException;
042    import 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      */
049    public 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.
058    static 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
069    private 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      */
086    public DataFlavor[]
087    getTransferDataFlavors()
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      */
102    public boolean
103    isDataFlavorSupported(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      */
125    public Object
126    getTransferData(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      */
151    public void
152    lostOwnership(Clipboard clipboard, Transferable contents)
153    {
154      // FIXME: What does this do?
155    }
156    
157    } // class StringSelection