
import java.net.*;
import java.util.*;
import java.io.*;

import java.awt.datatransfer.*;
import javax.swing.*;

public class FooTransferHandler extends TransferHandler
{
    private DataFlavor[]  _flavors    = null;
    private DnDable       _modifiable = null;

    //-------------------------------------------------------------------------|

    public FooTransferHandler( DnDable       modifiable,
                               DataFlavor[]  flavors)
    {
        this._modifiable = modifiable;
        this._flavors    = flavors;

        prn( "Acceptable data flavors = ");
        prnDataFlavors( _flavors);
    }

    //-------------------------------------------------------------------------|

    public int getSourceActions(JComponent c)
    {
        return _modifiable.getSourceActions();
    }

    //-------------------------------------------------------------------------|

    // check whether 'comp' can accept any of the flavor's in 'flavor'
    public boolean canImport(JComponent comp, DataFlavor flavor[])
    {
        if( (null == _modifiable) || (null == flavor))
            return false;

        return _modifiable.canImport( flavor);
    }

    //-------------------------------------------------------------------------|

    public Transferable createTransferable( JComponent comp)
    {
        if( null == _modifiable)
            return null;

        return ((DnDable)comp).createTransferable();
    }

    //-------------------------------------------------------------------------|

    public boolean importData(JComponent comp, Transferable t)
    {
        if( null == _modifiable)
            return false;

        return _modifiable.importData( t);
    }

    //-------------------------------------------------------------------------|

    public void exportDone( JComponent    source,
                            Transferable  data,
                            int           action)
    {
        if( null == _modifiable)
            return;

        _modifiable.exportDone( data, action);
    }

    //-------------------------------------------------------------------------|

    private void prn( Object str)
    {
        if( null == str) return;

        System.out.println( str);
    }

    //-------------------------------------------------------------------------|

    private void prnArr( Object[] arr)
    {
        if( null == arr) return;

        Object obj = null;
        for( int i = 0, n = arr.length; i < n; ++i)
        {
            prn( arr[i]);
        }
    }

    //-------------------------------------------------------------------------|

    private void prnDataFlavors( DataFlavor[] arr)
    {
        if( null == arr) return;

        DataFlavor df = null;
        for( int i = 0, n = arr.length; i < n && i < 5; ++i)
        {
            prn( " -[" + i + "] " + arr[i].getRepresentationClass().getName());
        }
    }
}
//--< FooTransferHandler ends here >-------------------------------------------|
