Accueil > Java > [DnD] TransferableObject class

[DnD] TransferableObject class

28/01/2009

package com.pingus.dnd.transferables;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;

public class TransferableObject implements Transferable {
    private Object obj;
    private DataFlavor thisFlavor;
    private ArrayList acceptedFlavors;
    private Transferable defaultTransferableObject;

    /**
     * Creates a new instance of TransferableObject
     */
    public TransferableObject(Object obj, DataFlavor[] acceptedFlavors, Transferable defaultTransferableObject) {
        super();
        this.obj = obj;
        this.acceptedFlavors = toArrayList(acceptedFlavors);
        this.thisFlavor = new DataFlavor(obj.getClass(), obj.getClass().getName());
        if(!this.acceptedFlavors.contains(thisFlavor)) this.acceptedFlavors.add(thisFlavor);
        this.defaultTransferableObject = defaultTransferableObject;
    }

    /**
     * Creates a new instance of TransferableObject
     */
    public TransferableObject(Object obj, ArrayList acceptedFlavors, Transferable defaultTransferableObject) {
        super();
        this.obj = obj;
        this.acceptedFlavors = acceptedFlavors;
        this.thisFlavor = new DataFlavor(obj.getClass(), obj.getClass().getName());
        if(!this.acceptedFlavors.contains(thisFlavor)) this.acceptedFlavors.add(thisFlavor);
        this.defaultTransferableObject = defaultTransferableObject;
    }

    public static ArrayList toArrayList(Object[] objects) {
        ArrayList list = new ArrayList(objects.length);
        for(int i=0; i<objects.length; ++i) {
            list.add(objects[i]);
        }
        return list;
    }

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        System.out.println("[TransferableObject] <getTransferData> flavor: "+flavor);
        System.out.println("[TransferableObject] <getTransferData> thisFlavor: "+thisFlavor);
        if (flavor.equals(thisFlavor)) {
            return obj;
        }
        return this.defaultTransferableObject.getTransferData(flavor);
    }

    /**
     * @return Returns the object.
     */
    public Object getObject() {
        return this.obj;
    }

    public DataFlavor[] getTransferDataFlavors() {
        DataFlavor[] fl = new DataFlavor[acceptedFlavors.size()];
        for(int i=0; i<fl.length; ++i) {
            fl[i] = (DataFlavor)acceptedFlavors.get(i);
        }
        return fl;
    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return acceptedFlavors.contains(flavor);
    }

    /**
     * @return Returns the defaultTransferableObject.
     */
    public Transferable getDefaultTransferableObject() {
        return this.defaultTransferableObject;
    }

    /**
     * @return Returns the best Flavor of the transferable object.
     */
    public DataFlavor getPreferredFlavor() {
        return this.thisFlavor;
    }

    /**
     * Util method that transform text into InputStream using a given DataFlavor.
     * @param text   The String to be exported
     * @param flavor The DataFlavor that request the export.
     * @return An InputStream containing the <code>text</code>
     * @throws UnsupportedEncodingException ...
     */
    public static InputStream exportAsInputStream(String text, DataFlavor flavor) throws UnsupportedEncodingException {
        String charset = flavor.getMimeType().replaceFirst(".*charset=", "");
        System.out.println("[TransferableObject] <exportAsInputStream>  Charset: "+charset);
        return new ByteArrayInputStream(text.getBytes(charset));
    }

    /**
     * Util method that transform the transferable object from TextPlainUnicode to String.
     * @param transferable The transferable object to be imported.
     * @return The String representation of the transferable as TextPlainUnicode.
     * @throws UnsupportedFlavorException ...
     * @throws IOException ...
     */
    public static String importAsInputStream(Transferable transferable) throws UnsupportedFlavorException, IOException {
        BufferedReader sr = new BufferedReader(DataFlavor.getTextPlainUnicodeFlavor().getReaderForText(transferable));
        String line = null;
        String plainText = "";
        while((line = sr.readLine()) != null) {
            plainText += line;
        }
        return plainText;
    }
}

Java

Les commentaires sont fermés.