package com.revolsys.swing.dnd.transferable; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.Transferable; import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.io.StringWriter; import java.util.Arrays; import java.util.Collection; import com.revolsys.record.Record; import com.revolsys.record.io.format.csv.Csv; public class RecordTransferable implements Transferable { public static final DataFlavor DATA_OBJECT_FLAVOR = new DataFlavor(Record.class, "Data Object"); private static final DataFlavor[] DATA_FLAVORS = { DATA_OBJECT_FLAVOR, MapTransferable.MAP_FLAVOR, DataFlavor.stringFlavor }; private final Record object; public RecordTransferable(final Record object) { this.object = object; } @Override public Object getTransferData(final DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (this.object == null) { return null; } else if (DATA_OBJECT_FLAVOR.equals(flavor) || MapTransferable.MAP_FLAVOR.equals(flavor)) { return this.object; } else if (DataFlavor.stringFlavor.equals(flavor)) { final StringWriter out = new StringWriter(); final Collection<String> fieldNames = this.object.getRecordDefinition().getFieldNames(); Csv.writeColumns(out, fieldNames, '\t', '\n'); final Collection<Object> values = this.object.values(); Csv.writeColumns(out, values, '\t', '\n'); final String text = out.toString(); return text; } else { throw new UnsupportedFlavorException(flavor); } } @Override public DataFlavor[] getTransferDataFlavors() { return DATA_FLAVORS; } @Override public boolean isDataFlavorSupported(final DataFlavor dataFlavor) { return Arrays.asList(DATA_FLAVORS).contains(dataFlavor); } }