All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wings.sdnd.DefaultTransferable Maven / Gradle / Ivy

The newest version!
package org.wings.sdnd;

import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;

/**
 * DefaultTransferable - represents a generic implementation for Transferables in the wingS-framework
 */
public abstract class DefaultTransferable implements Transferable {
    private List supportedDataFlavors;

    /**
     * Initializes the DefaultTransferable Object with a array of DataFlavors to be supported
     * @param dataFlavorList
     */
    public DefaultTransferable(List dataFlavorList) {
        this.supportedDataFlavors = dataFlavorList;

        if(this.supportedDataFlavors == null)
            throw new IllegalArgumentException("supportedDataFlavors is null");
    }

    /**
     * Initializes the DefaultTransferable Object with a array of DataFlavors to be supported
     * @param dataFlavorArray
     */
    public DefaultTransferable(DataFlavor... dataFlavorArray) {
        this.supportedDataFlavors = new ArrayList<>();

        this.supportedDataFlavors.addAll(Arrays.asList(dataFlavorArray));

        if(this.supportedDataFlavors.size() == 0)
            throw new IllegalArgumentException("supportedDataFlavors is empty");
    }

    /**
     * Returns the supported DataFlavors
     * @return
     */
    @Override
    public DataFlavor[] getTransferDataFlavors() {
        return this.supportedDataFlavors.toArray(new DataFlavor[this.supportedDataFlavors.size()]);
    }

    /**
     * Returns if the given DataFlavor is supported by this Transferable
     * @param flavor
     * @return
     */
    @Override
    public boolean isDataFlavorSupported(DataFlavor flavor) {
        for(DataFlavor df:this.supportedDataFlavors) {
            if(df.equals(flavor))
                return true;
        }
        
        return false;
    }

    /**
     * Returns the Transfer data for Flavor flavor if supported, throws Exception otherwise
     * @param flavor
     * @return
     * @throws UnsupportedFlavorException
     * @throws IOException
     */
    @Override
    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        Object data = getDataForClass(flavor, flavor.getRepresentationClass());
        if(data != null)
            return data;
        
        throw new UnsupportedFlavorException(flavor);
    }

    /**
     * Function that is called to get the Data of this Transferable for DataFlavor df, with it's representation class cls
     * @param df DataFlavor to
     * @param cls Representation class to get a Data-Object for
     * @return Data-Object this Transferable represents
     */
    protected abstract Object getDataForClass(DataFlavor df, Class cls);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy