home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / VCAFE.3.0A / Main.bin / TransferableProxy.java < prev    next >
Text File  |  1998-10-25  |  4KB  |  96 lines

  1. /*
  2.  * Copyright 1998 Symantec Corporation, All Rights Reserved.
  3.  */
  4.  
  5. package com.symantec.itools.vcafe.openapi.datatransfer;
  6.  
  7. import java.awt.datatransfer.*;
  8. import java.io.IOException;
  9.  
  10. /**
  11.  * Adds <code>StringSelection</code> functionality to any <code>Transferable</code> object.
  12.  * <p>The system clipboard essentially ignores non <code>StringSelection</code> transferables,
  13.  * so we wrap them in order to force the system clipboard to freshen/clear Visual Cafe's clipboard.
  14.  * @see VisualCafeClipboard
  15.  * @see com.symantec.itools.vcafe.openapi.VisualCafe#getClipboard
  16.  *
  17.  * @author Symantec Internet Tools Division
  18.  * @version 1.0
  19.  * @since VCafe 3.0
  20.  */
  21. public class TransferableProxy extends StringSelection
  22. {
  23.     /**
  24.      * Constructs a <code>TransferableProxy</code>, wrapping the given <code>Transferable</code> in
  25.      * one with string flavors as well.
  26.      * @param t the <code>Transferable</code> object to wrap.
  27.      */
  28.     public TransferableProxy(Transferable t)
  29.     {
  30.         super("");
  31.         proxiedTransferable = t;
  32.     }
  33.  
  34.     /**
  35.      * Gets the original <code>Transferable</code> object that this <code>TransferableProxy</code> wraps.
  36.      * @return the user's <code>Transferable</code> object.
  37.      */
  38.     public Transferable getProxiedTransferable()
  39.     {
  40.         return proxiedTransferable;
  41.     }
  42.     
  43.     /**
  44.      * Gets an array of <code>DataFlavor</code> objects indicating the formats the data 
  45.      * can be provided in.  The array should be ordered according to preference
  46.      * for providing the data (from most richly descriptive to least descriptive).
  47.      * <p>The <code>StringSelection</code> flavors are at the end of the array.
  48.      * @return an array of data flavors in which this data can be transferred
  49.      */
  50.     public synchronized DataFlavor[] getTransferDataFlavors()
  51.     {
  52.         DataFlavor[] tFlavors = proxiedTransferable.getTransferDataFlavors();
  53.         DataFlavor[] sFlavors = super.getTransferDataFlavors();
  54.    
  55.         DataFlavor[] flavors = new DataFlavor[tFlavors.length + sFlavors.length];
  56.         int f = 0;
  57.         for (int i = 0; i < tFlavors.length; i++, f++)
  58.             flavors[f] = tFlavors[i];
  59.         for (int i = 0; i < sFlavors.length; i++, f++)
  60.             flavors[f] = sFlavors[i];
  61.             
  62.         return flavors;
  63.     }
  64.  
  65.     /**
  66.      * Determines whether the specified data flavor is supported for this object.
  67.      * @param flavor the requested flavor for the data.
  68.      * @return <code>true</code> if the <code>DataFlavor</code> is supported, <code>false</code> otherwise.
  69.      */
  70.     public boolean isDataFlavorSupported(DataFlavor flavor)
  71.     {
  72.         return proxiedTransferable.isDataFlavorSupported(flavor) ||
  73.                 super.isDataFlavorSupported(flavor);
  74.     }
  75.  
  76.     /**
  77.      * Gets an object which represents the data to be transferred.  The class of the object returned 
  78.      * is defined by the representation class (<code>DataFlavor.getRepresentationClass()</code>)
  79.      * of the flavor.
  80.      * @param flavor the requested flavor for the data.
  81.      * @return The data to be transferred.
  82.      * @see DataFlavor#getRepresentationClass
  83.      * @exception IOException if the data is no longer available
  84.      *              in the requested flavor.
  85.      * @exception UnsupportedFlavorException if the requested data flavor is
  86.      *              not supported.
  87.      */
  88.     public synchronized Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
  89.     {
  90.         if (proxiedTransferable.isDataFlavorSupported(flavor))
  91.             return proxiedTransferable.getTransferData(flavor);
  92.         return super.getTransferData(flavor);
  93.     }
  94.  
  95.     private Transferable proxiedTransferable;
  96. }