source: 3thparty/jupload/src/main/java/wjhk/jupload2/gui/DnDListener.java @ 3951

Revision 3951, 5.4 KB checked in by alexandrecorreia, 13 years ago (diff)

Ticket #1709 - Adicao de codigo fonte java do componente jupload

Line 
1//
2// $Id: DnDListener.java 997 2010-02-18 10:30:30Z etienne_sf $
3//
4// jupload - A file upload applet.
5// Copyright 2007 The JUpload Team
6//
7// Created: ?
8// Creator: William JinHua Kwong
9// Last modified: $Date: 2010-02-18 08:30:30 -0200 (Qui, 18 Fev 2010) $
10//
11// This program is free software; you can redistribute it and/or modify it under
12// the terms of the GNU General Public License as published by the Free Software
13// Foundation; either version 2 of the License, or (at your option) any later
14// version. This program is distributed in the hope that it will be useful, but
15// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17// details. You should have received a copy of the GNU General Public License
18// along with this program; if not, write to the Free Software Foundation, Inc.,
19// 675 Mass Ave, Cambridge, MA 02139, USA.
20
21package wjhk.jupload2.gui;
22
23import java.awt.datatransfer.DataFlavor;
24import java.awt.datatransfer.UnsupportedFlavorException;
25import java.awt.dnd.DnDConstants;
26import java.awt.dnd.DropTargetDragEvent;
27import java.awt.dnd.DropTargetDropEvent;
28import java.awt.dnd.DropTargetEvent;
29import java.awt.dnd.DropTargetListener;
30import java.io.File;
31import java.io.IOException;
32import java.net.URI;
33import java.net.URISyntaxException;
34import java.util.ArrayList;
35import java.util.List;
36
37import wjhk.jupload2.filedata.DefaultFileData;
38import wjhk.jupload2.policies.UploadPolicy;
39
40/**
41 * Our implementation of DND.
42 *
43 * @author William JinHua Kwong
44 * @version $Release$
45 */
46public class DnDListener implements DropTargetListener {
47
48    private JUploadPanel uploadPanel;
49
50    private UploadPolicy uploadPolicy;
51
52    /**
53     * Creates a new instance.
54     *
55     * @param uploadPanel The corresponding upload panel.
56     * @param uploadPolicy
57     */
58    public DnDListener(JUploadPanel uploadPanel, UploadPolicy uploadPolicy) {
59        this.uploadPanel = uploadPanel;
60        this.uploadPolicy = uploadPolicy;
61    }
62
63    // DataFlavor javaFileListFlavor = createConstant("application/x-java-file-list;class=java.util.List", null);
64
65    DataFlavor uriListFlavor = new DataFlavor("text/uri-list;class=java.lang.String", null);
66
67
68    /**
69     * @see java.awt.dnd.DropTargetListener#dragEnter(java.awt.dnd.DropTargetDragEvent)
70     */
71    public void dragEnter(DropTargetDragEvent e) {
72      //System.out.println(e);
73      //System.out.println(e.getCurrentDataFlavorsAsList());
74
75        if (!e.isDataFlavorSupported(DataFlavor.javaFileListFlavor) && !e.isDataFlavorSupported(uriListFlavor)) {
76            e.rejectDrag();
77        }
78    }
79
80    /**
81     * @see java.awt.dnd.DropTargetListener#dragOver(java.awt.dnd.DropTargetDragEvent)
82     */
83    public void dragOver(DropTargetDragEvent e) {
84        // Nothing to do.
85    }
86
87    /**
88     * @see java.awt.dnd.DropTargetListener#dropActionChanged(java.awt.dnd.DropTargetDragEvent)
89     */
90    public void dropActionChanged(DropTargetDragEvent e) {
91        // Nothing to do.
92    }
93
94    /**
95     * @see java.awt.dnd.DropTargetListener#drop(java.awt.dnd.DropTargetDropEvent)
96     */
97    @SuppressWarnings("unchecked")
98    public void drop(DropTargetDropEvent e) {
99        if (!e.isDataFlavorSupported(DataFlavor.javaFileListFlavor) && !e.isDataFlavorSupported(uriListFlavor)) {
100            e.rejectDrop();
101        } else {
102            e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
103            try {
104                File[] fileArray;
105
106                if (e.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
107                  List<File> fileList = (List<File>) e.getTransferable()
108                          .getTransferData(DataFlavor.javaFileListFlavor);
109
110                  fileArray = (File[]) (fileList.toArray());
111                } else {
112                  // uriListFlavor; attempt to convert URIs to files
113                  String strList = (String) e.getTransferable()
114                          .getTransferData(uriListFlavor);
115                  //System.out.println(strList);
116                  List<File> fileList = new ArrayList<File>();
117                  for (String s : strList.split("\n")) try {
118                    fileList.add(new File(new URI(s.trim())));
119                  } catch (URISyntaxException ex) {
120                    ex.printStackTrace();
121                    e.rejectDrop();
122                    return;
123                  }
124                  fileArray = (File[]) (fileList.toArray(new File[fileList.size()]));
125                  //System.out.println("fileArray="+Arrays.toString(fileArray));
126                }
127                this.uploadPanel.getFilePanel().addFiles(fileArray,
128                        DefaultFileData.getRoot(fileArray));
129
130                e.getDropTargetContext().dropComplete(true);
131
132                // Let's communicate this to the upload policy: there may be
133                // something to do now.
134                this.uploadPolicy.afterFileDropped(e);
135
136            } catch (IOException ioe) {
137                this.uploadPolicy.displayErr("DnDListener.drop()", ioe);
138                e.rejectDrop();
139            } catch (UnsupportedFlavorException ufe) {
140                this.uploadPolicy.displayErr("DnDListener.drop()", ufe);
141                e.rejectDrop();
142            }
143
144        }
145    }
146
147    /**
148     * @see java.awt.dnd.DropTargetListener#dragExit(java.awt.dnd.DropTargetEvent)
149     */
150    public void dragExit(DropTargetEvent e) {
151        // Nothing to do.
152    }
153}
Note: See TracBrowser for help on using the repository browser.