views:

83

answers:

0

Hi,

I am trying to move files from a compressed archive to the native system (basycally, windows' eplorer) through drag and drop operations.

My only idea at this moment is to create a TransferHandler, which, when launched, will decompress the file in a temporary directory and set up that file as Transferable. Here is a snippet of code to make myself more clear:

private class FileTransferHandler extends TransferHandler {
    protected Transferable createTransferable(JComponent c) {
        List<File> files = new ArrayList<File>();

        try {
            File temp = createTempDirectory();
            String path = temp.getAbsolutePath();
            decompressTo(path);
            files.add(new File(path));
        } catch (Exception e) { e.printStackTrace(); };
        return new FileTransferable(files);
    }

    public int getSourceActions(JComponent c) {
        return COPY;
    }
}

private class FileTransferable implements Transferable {
    private List<File> files;

    public FileTransferable(List<File> files) {
       this.files = files;
    }

    public DataFlavor[] getTransferDataFlavors() {
        return new DataFlavor[]{ DataFlavor.javaFileListFlavor };
    }

    public boolean isDataFlavorSupported(DataFlavor flavor) {
        return flavor.equals(DataFlavor.javaFileListFlavor);
    }

    public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException {
        if (!isDataFlavorSupported(flavor)) {
            throw new UnsupportedFlavorException(flavor);
        }
        return files;
    }
}

(not valid anymore: The thing that puzzles me is that this way it somehow works: but only if after I release the mouse button I am not doing anything else.)

update: After more testing I observed that actually the file data is transferred from the temp directory to destination after I click in a zone that accepts that DataFlavor. If I click in a folder, the temp files are transferred to that folder. If I click in the console window, the path to the temp file appears in the console window.

So, if you please, I would like some pointers to direct me in the right way.

p.s.: the idea with decompressing to temp folder first came after observing that WinRar is doing the same thing.

p.p.s.: sorry if the question seems stupid, but I am mostly a web programmer just dabbling in desktop programming.