package abbot.editor; import java.awt.datatransfer.*; import java.util.*; import abbot.script.Step; public class StepTransferable implements Transferable { public static final DataFlavor STEP_FLAVOR = new DataFlavor("application/x-java-serialized-object;class=abbot.script.Step", "Abbot script step"); public static final DataFlavor STEP_LIST_FLAVOR = new DataFlavor("application/x-java-serialized-object;class=java.util.ArrayList", "List of Abbot script steps"); // A single step is available as itself or as a list private static final DataFlavor[] FLAVORS = { STEP_FLAVOR, STEP_LIST_FLAVOR, }; // Can't get a list as a single step private static final DataFlavor[] LIST_FLAVORS = { STEP_LIST_FLAVOR }; private static List FLAVOR_LIST = Arrays.asList(FLAVORS); private static List LIST_FLAVOR_LIST = Arrays.asList(LIST_FLAVORS); private Step step; private List steps; private List flavorList; private DataFlavor[] flavors; public StepTransferable(Step step) { this.step = step; this.steps = new ArrayList(); steps.add(step); flavorList = FLAVOR_LIST; flavors = FLAVORS; } public StepTransferable(List steps) { this.step = null; this.steps = steps; flavorList = LIST_FLAVOR_LIST; flavors = LIST_FLAVORS; } public DataFlavor[] getTransferDataFlavors() { return flavors; } public boolean isDataFlavorSupported(DataFlavor flavor) { return flavorList.contains(flavor); } public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (flavor.isMimeTypeEqual(STEP_FLAVOR.getMimeType())) { if (step != null) return step; } else if (flavor.isMimeTypeEqual(STEP_LIST_FLAVOR.getMimeType())) { return steps; } throw new UnsupportedFlavorException(flavor); } public String toString() { return "Transferable " + (step != null ? step.toString() : "List of Steps"); } }