Class MarvinTransferable

  • All Implemented Interfaces:
    MTransferable, Transferable

    @PublicAPI
    public abstract class MarvinTransferable
    extends Object
    implements MTransferable

    Abstract Adapter implementation of the MTransferable interface used by Marvin.

    The infrastructure in Marvin is developed to transfer Molecule data to the clipboard, and Marvin has many predefined clipboard formats. If you would like to extend Marvin's clipboard features programmatically in your application with another formats, you can use this adapter to make your work a bit simpler.

    The adapter introduces some new functionality, which is not part of the MTransferable interface, those methods should not be called from outside of the class hierarchy, and have been made to make the implementation of clipboard formats of marvin simpler.

    The Java Transferable interface provides support to implementors handling more DataFlavors per Transferable, but in Marvin we recommend to use only one DataFlavor with one Transferable. This is important to make the Copy As dialog easier to understand, and ensures the possibility to add clipboard types one by one to the dialog.
    Since this adapter supports only one DataFlavor, handling more DataFlavors per Transferable requires an own MTransferable implementation.

    Since:
    Marvin 5.3 11/25/2009
    • Constructor Detail

      • MarvinTransferable

        public MarvinTransferable()
    • Method Detail

      • isDataFlavorSupported

        public boolean isDataFlavorSupported​(DataFlavor flv)
        Checks whether the flavor equals with the given parameter.
        Specified by:
        isDataFlavorSupported in interface Transferable
        Parameters:
        flv - the DataFlavor which should be checked
        Returns:
        true, if the DataFlavor of the MTransferable equals with the given parameter, false otherwise.
      • getDataToClipboard

        protected abstract Object getDataToClipboard​(DataFlavor flv)
        Returns the clipboard representation of the given Molecule. The Object has to be an instance of the representationClass defined by the flavor of this MTransferable
        Parameters:
        flv - the DataFlavor of the format.
        Returns:
        the clipboard representation of the Molecule.
      • getDataFromClipboard

        protected abstract Object getDataFromClipboard​(DataFlavor flv)
                                                throws IOException
        Returns the Molecule from the Transferable object. The transferable object should be gathered from the clipboard, and set to MTransferable through the setTransfer(Transferable) method.
        Parameters:
        flv - the DataFlavor of the format.
        Returns:
        the Molecule as an Object from the specified Transferable
        Throws:
        IOException
      • getTransferDataFlavors

        public DataFlavor[] getTransferDataFlavors()
        Returns the DataFlavors supported by the actual implementation. The returned array contains the DataFlavor corresponding to the MTransferable, and its index will be 0.
        Specified by:
        getTransferDataFlavors in interface Transferable
        Returns:
        an array containing only the DataFlavor supported by the MTransferable.
      • registerNativeNames

        public void registerNativeNames()
        Registers the Native names supported by the implementation. This has to be done for all native formats which are not supported by default in Java.
        This function will be called from ClipboardHandler before performing the first clipboard operation. The default implementation is empty.
        Specified by:
        registerNativeNames in interface MTransferable
      • isInputAvailable

        public boolean isInputAvailable()
        Checks that the implementation supports input from clipboard. The default implementation returns true.
        Specified by:
        isInputAvailable in interface MTransferable
        Returns:
        true if the representation could read a Molecule from Clipboard false otherwise
      • setTransfer

        public void setTransfer​(Transferable transfer)
        Sets the Transferable which contains the Molecule that should be retrieved. The Transferable should be gathered from the clipboard, and the MTransferable implementation should deal with the conversion from clipboard format to Molecule if input is available. Before trying to set Transferable the program should check that the MTransferable implementation supports the DataFlavor of the clipboard data.
        If the DataFlavor and input from clipboard is supported, after setting the clipboard data the getTransferData method should return a Molecule as an Object instance.
        The default implementation set the clipboardOperation to MTransferable.CLIPBOARD_OPERATION_GET.
        Specified by:
        setTransfer in interface MTransferable
        Parameters:
        transfer - The Transferable containing the Molecule
        See Also:
        MTransferable.isInputAvailable()
      • createMoleculeFromInputStream

        protected Object createMoleculeFromInputStream​(InputStream is)

        Helper function to get Molecule or MacroMolecule from the given InputStream with MolImporter. If the format variable is set to "source" or "file" then the function will call the recognizer subsystem to recognize the format, otherwise it tries to import in the format.

        If PDB format recognized as the input, the MacroMolecule instance will be returned, otherwise a Molecule instance or null if the format is unrecognizable.

        If copying a simple text, which contains multiple lines, but recognized as a one line format, then the function is trying to interpret the whole string without line ending characters, if copying a file (this happens while dragging a file into the canvas) the lines will be interpreted one by one, and the first will be imported.

        Parameters:
        is - the InputStream representing the Molecule
        Returns:
        the imported object
      • getInputStreamFromClipboard

        protected InputStream getInputStreamFromClipboard()
        Gets an InputStream from the clipboard data if the format is supported by this MTransferable
        Returns:
        the InputStream created from the Clipboard data