/* * Freeplane - mind map editor * Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev * * This file is modified by Dimitry Polivaev in 2008. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.freeplane.features.clipboard; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.ClipboardOwner; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.ByteArrayInputStream; import java.util.ArrayList; import java.util.List; import org.freeplane.core.util.LogUtils; public class MindMapNodesSelection implements Transferable, ClipboardOwner { /** * fc, 7.8.2004: This is a quite interisting flavor, but how does it * works??? */ public static DataFlavor dropActionFlavor = null; public static DataFlavor fileListFlavor = null; public static DataFlavor htmlFlavor = null; public static DataFlavor mindMapNodesFlavor = null; public static DataFlavor rtfFlavor = null; static { try { MindMapNodesSelection.mindMapNodesFlavor = new DataFlavor("text/freeplane-nodes; class=java.lang.String"); MindMapNodesSelection.rtfFlavor = new DataFlavor("text/rtf; class=java.io.InputStream"); MindMapNodesSelection.htmlFlavor = new DataFlavor("text/html; class=java.lang.String"); MindMapNodesSelection.fileListFlavor = new DataFlavor("application/x-java-file-list; class=java.util.List"); MindMapNodesSelection.dropActionFlavor = new DataFlavor("text/drop-action; class=java.lang.String"); } catch (final Exception e) { LogUtils.severe(e); } } private String dropActionContent; final private List<?> fileList; final private String htmlContent; final private String nodesContent; final private String rtfContent; final private String stringContent; // FIXME: dropActionContent, fileList are never set to something else than null public MindMapNodesSelection(final String nodesContent, final String stringContent, final String rtfContent, final String htmlContent, final String dropActionContent, final List<?> fileList) { this.nodesContent = nodesContent; this.rtfContent = rtfContent; this.stringContent = stringContent; this.dropActionContent = dropActionContent; this.htmlContent = htmlContent; this.fileList = fileList; } public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.equals(DataFlavor.stringFlavor)) { return stringContent; } if (flavor.equals(MindMapNodesSelection.mindMapNodesFlavor)) { return nodesContent; } if (flavor.equals(MindMapNodesSelection.dropActionFlavor)) { return dropActionContent; } if (flavor.equals(MindMapNodesSelection.rtfFlavor)) { final byte[] byteArray = rtfContent.getBytes(); return new ByteArrayInputStream(byteArray); } if (flavor.equals(MindMapNodesSelection.htmlFlavor) && htmlContent != null) { return htmlContent; } if (flavor.equals(MindMapNodesSelection.fileListFlavor)) { return fileList; } throw new UnsupportedFlavorException(flavor); } private DataFlavor[] flavArray = null; public DataFlavor[] getTransferDataFlavors() { //DOCEAR: fix to get all supported flavors if(flavArray == null) { List<DataFlavor> flavors = new ArrayList<DataFlavor>(); if (stringContent != null) { flavors.add(DataFlavor.stringFlavor); } if (nodesContent != null) { flavors.add(MindMapNodesSelection.mindMapNodesFlavor); } if (rtfContent != null) { flavors.add(MindMapNodesSelection.rtfFlavor); } if (dropActionContent != null) { flavors.add(MindMapNodesSelection.dropActionFlavor); } if (htmlContent != null) { flavors.add(MindMapNodesSelection.htmlFlavor); } if ((fileList != null) && fileList.size() > 0) { flavors.add(MindMapNodesSelection.fileListFlavor); } flavArray = flavors.toArray(new DataFlavor[]{}); } return flavArray; // return new DataFlavor[] { DataFlavor.stringFlavor, MindMapNodesSelection.mindMapNodesFlavor, // MindMapNodesSelection.rtfFlavor, MindMapNodesSelection.htmlFlavor, // MindMapNodesSelection.dropActionFlavor }; } public boolean isDataFlavorSupported(final DataFlavor flavor) { if (flavor.equals(DataFlavor.stringFlavor) && stringContent != null) { return true; } if (flavor.equals(MindMapNodesSelection.mindMapNodesFlavor) && nodesContent != null) { return true; } if (flavor.equals(MindMapNodesSelection.rtfFlavor) && rtfContent != null) { return true; } if (flavor.equals(MindMapNodesSelection.dropActionFlavor) && dropActionContent != null) { return true; } if (flavor.equals(MindMapNodesSelection.htmlFlavor) && htmlContent != null) { return true; } if (flavor.equals(MindMapNodesSelection.fileListFlavor) && (fileList != null) && fileList.size() > 0) { return true; } return false; } public void lostOwnership(final Clipboard clipboard, final Transferable contents) { } public void setDropAction(final String dropActionContent) { this.dropActionContent = dropActionContent; } }