/*
 * @(#)PlainTextTransferable.java	1.1	2009-09-01
 *
 * Copyright (c) 2007-2009 Werner Randelshofer, Immensee, Switzerland.
 * All rights reserved.
 *
 * You may not use, copy or modify this file, except in compliance with the
 * license agreement you entered into with Werner Randelshofer.
 * For details see accompanying license terms.
 */

package ch.randelshofer.gui.datatransfer;

import java.awt.datatransfer.*;
import java.io.*;
/**
 * PlainTextTransferable.
 * <p>
 * Note: This transferable should (almost) always be used in conjunction with
 * PlainTextTransferable.
 *
 * @author Werner Randelshofer
 * @version 1.1 2009-09-01 Replaced use of deprecated class StringBufferInputStream.
 * <br>1.0 22. August 2007 Created.
 */
public class PlainTextTransferable extends AbstractTransferable {
		private String plainText;

		public PlainTextTransferable(String plainText) {
				this(getDefaultFlavors(), plainText);
		}
		public PlainTextTransferable(DataFlavor flavor, String plainText) {
				this(new DataFlavor[] { flavor }, plainText);
		}
		public PlainTextTransferable(DataFlavor[] flavors, String plainText) {
				super(flavors);
				this.plainText = plainText;
		}

		public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
				if (! isDataFlavorSupported(flavor)) {
						throw new UnsupportedFlavorException(flavor);
				}
				plainText = (plainText == null) ? "" : plainText;
				if (String.class.equals(flavor.getRepresentationClass())) {
						return plainText;
				} else if (Reader.class.equals(flavor.getRepresentationClass())) {
						return new StringReader(plainText);
				} else if (InputStream.class.equals(flavor.getRepresentationClass())) {
						String charsetName = flavor.getParameter("charset");
						return new ByteArrayInputStream(plainText.getBytes(charsetName==null?"UTF-8":charsetName));
						//return new StringBufferInputStream(plainText);
				} // fall through to unsupported

	throw new UnsupportedFlavorException(flavor);
		}

		protected static DataFlavor[] getDefaultFlavors() {
				try {
						return new DataFlavor[] {
								new DataFlavor("text/plain;class=java.lang.String"),
								new DataFlavor("text/plain;class=java.io.Reader"),
								new DataFlavor("text/plain;charset=unicode;class=java.io.InputStream")
						};
				} catch (ClassNotFoundException cle) {
						InternalError ie = new InternalError(
										"error initializing PlainTextTransferable");
						ie.initCause(cle);
						throw ie;
				}
		}
}
