Class MarvinTransferable

java.lang.Object
chemaxon.marvin.modules.datatransfer.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
  • Field Details

    • flavor

      protected DataFlavor flavor
      The DataFlavor represented by the implementation.
    • format

      protected String format
      The format string. This will be applied to MolExporter while generating output to clipboard.
    • clipboardOperation

      protected int clipboardOperation
      Clipboard operation type. Determines if the Transferable is putting data to Clipboard or is gathering data from there. This variable is used by getTransferData(DataFlavor) to determine what to do and handled internally from setMolecule(Molecule) and from setTransfer(Transferable) functions.
    • molecule

      protected Molecule molecule
      The Molecule which will be transferred to the clipboard. The system will call the getTransferData(DataFlavor) - as defined in the java documentation - to gather the data for the Clipboard.
    • properties

      protected Properties properties
      Display properties of the Molecule. This parameter is useful when transferring Molecule images to clipboard, and can be one of, or the union of properties stored in UserSettings , and in the result of MDocument.getGUIPropertyContainer()
      See Also:
    • transfer

      protected Transferable transfer
      The Transferable which represents the clipboard data. From this object a Molecule should be retrieved and returned as object in the getTransferData(DataFlavor) method.
    • extraFlavor

      protected DataFlavor extraFlavor
  • Constructor Details

    • MarvinTransferable

      public MarvinTransferable()
  • Method Details

    • getTransferData

      public Object getTransferData(DataFlavor flv) throws UnsupportedFlavorException, IOException
      Returns the result of the transfer operation. The function returns data in a format which could be placed into the clipboard or the Molecule, which was wrapped from transfer depending on clipboardOperation
      The default function which is called when importing is getDataFromClipboard(DataFlavor)
      The default function which is called when exporting is getDataToClipboard(DataFlavor)
      Specified by:
      getTransferData in interface Transferable
      Parameters:
      flv - the DataFlavor of the format.
      Returns:
      the object in the format determined by clipboardOperation if the flavor of this MTransferable is equals with the given parameter
      Throws:
      UnsupportedFlavorException - if the flavor of this MTransferable does not equal with the given parameter
      IOException
      See Also:
    • 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
    • setMolecule

      public void setMolecule(Molecule mol)
      Sets the Molecule which will be represented by the MTransferable. The method will set clipboardOperation to MTransferable.CLIPBOARD_OPERATION_PUT
      Specified by:
      setMolecule in interface MTransferable
      Parameters:
      mol - the Molecule object which will be put to the clipboard
    • setProperties

      public void setProperties(Properties props)
      Sets display properties of the Molecule. This properties parameter is useful when transferring Molecule images to clipboard, and can be one of, or the union of properties stored in UserSettings , and in the result of MDocument.getGUIPropertyContainer()
      Specified by:
      setProperties in interface MTransferable
      Parameters:
      props - the Properties
      See Also:
    • 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:
    • 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
    • toString

      public String toString()
      Overrides:
      toString in class Object