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 java.util.Map;
import com.revolsys.record.io.format.csv.Csv;
public class MapTransferable implements Transferable {
public static final DataFlavor MAP_FLAVOR = new DataFlavor(Map.class, "Java Map");
private static final DataFlavor[] DATA_FLAVORS = {
MAP_FLAVOR, DataFlavor.stringFlavor
};
private final Map<String, Object> map;
public MapTransferable(final Map<String, Object> map) {
this.map = map;
}
public Map<String, Object> getMap() {
return this.map;
}
@Override
public Object getTransferData(final DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if (MAP_FLAVOR.equals(flavor)) {
return this.map;
} else if (DataFlavor.stringFlavor.equals(flavor)) {
final StringWriter out = new StringWriter();
final Collection<String> fieldNames = this.map.keySet();
Csv.writeColumns(out, fieldNames, '\t', '\n');
final Collection<Object> values = this.map.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);
}
}