/******************************************************************************* * Copyright (c) 2004, 2008 John Krasnay and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * John Krasnay - initial API and implementation *******************************************************************************/ package net.sf.vex.swing; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import net.sf.vex.dom.DocumentFragment; /** * Represents a selection of a Vex document, which can be viewed as plaintext * or as a document fragment. */ public class VexSelection extends StringSelection { /** * DataFlavor representing a Vex document fragment. */ public static final DataFlavor VEX_DOCUMENT_FRAGMENT_FLAVOR = new DataFlavor(DocumentFragment.class, DocumentFragment.MIME_TYPE); private DataFlavor[] flavors; private DocumentFragment frag; /** * Class constructor. * @param s String representing the selection. * @param frag Document fragment representing the selection. */ public VexSelection(String s, DocumentFragment frag) { super(s); this.frag = frag; DataFlavor[] superFlavors = super.getTransferDataFlavors(); this.flavors = new DataFlavor[superFlavors.length + 1]; System.arraycopy(superFlavors, 0, this.flavors, 0, superFlavors.length); this.flavors[this.flavors.length - 1] = VEX_DOCUMENT_FRAGMENT_FLAVOR; } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor.equals(VEX_DOCUMENT_FRAGMENT_FLAVOR)) { return this.frag; } else { return super.getTransferData(flavor); } } public DataFlavor[] getTransferDataFlavors() { return this.flavors; } public boolean isDataFlavorSupported(DataFlavor flavor) { if (flavor.equals(VEX_DOCUMENT_FRAGMENT_FLAVOR)) { return true; } else { return super.isDataFlavorSupported(flavor); } } }