/**
*
*/
package org.korsakow.ide.ui.dnd;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.korsakow.ide.resources.ResourceType;
import org.korsakow.ide.ui.components.tree.KNode;
import org.korsakow.ide.ui.components.tree.ResourceNode;
import org.korsakow.ide.util.Util;
public class TransferableTreeTableNodes implements Transferable
{
private static final DataFlavor[] DEFAULT_FLAVORS = { DataFlavors.TreeTableNodesFlavor };
private DataFlavor[] flavors;
private final List<? extends KNode> nodes;
public TransferableTreeTableNodes(List<? extends KNode> nodes)
{
if (nodes == null)
throw new NullPointerException();
if (nodes.contains(null))
throw new NullPointerException();
this.nodes = new ArrayList<KNode>(nodes);
flavors = DEFAULT_FLAVORS;
// special cases
if (nodes.size() == 1) {
KNode node = nodes.get(0);
if (node instanceof ResourceNode) {
ResourceNode mediaNode = (ResourceNode)node;
ResourceType resourceType = mediaNode.getResourceType();
switch (resourceType)
{
case VIDEO:
flavors = Util.arrayAdd(flavors, DataFlavors.VideoFlavor);
break;
case SOUND:
flavors = Util.arrayAdd(flavors, DataFlavors.SoundFlavor);
break;
case IMAGE:
flavors = Util.arrayAdd(flavors, DataFlavors.ImageFlavor);
break;
case TEXT:
flavors = Util.arrayAdd(flavors, DataFlavors.TextFlavor);
break;
case SNU:
flavors = Util.arrayAdd(flavors, DataFlavors.SnuFlavor);
break;
}
}
}
}
public TransferableTreeTableNodes(KNode node)
{
nodes = Arrays.asList(node);
}
public Object getTransferData(DataFlavor flavor)
throws UnsupportedFlavorException, IOException {
if (!isDataFlavorSupported(flavor))
throw new UnsupportedFlavorException(flavor);
if (flavor.equals(DataFlavors.TreeTableNodesFlavor))
return nodes;
if (flavor.equals(DataFlavors.SoundFlavor))
return ((ResourceNode)nodes.get(0)).getResourceId();
if (flavor.equals(DataFlavors.VideoFlavor))
return ((ResourceNode)nodes.get(0)).getResourceId();
if (flavor.equals(DataFlavors.ImageFlavor))
return ((ResourceNode)nodes.get(0)).getResourceId();
if (flavor.equals(DataFlavors.TextFlavor))
return ((ResourceNode)nodes.get(0)).getResourceId();
if (flavor.equals(DataFlavors.SnuFlavor))
return ((ResourceNode)nodes.get(0)).getResourceId();
throw new IllegalStateException("unreachable code!");
}
public DataFlavor[] getTransferDataFlavors() {
return flavors;
}
public boolean isDataFlavorSupported(DataFlavor flavor) {
for (DataFlavor f : flavors)
if (f.equals(flavor))
return true;
return false;
}
}