Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / FileOpenDialog.java @ 6326

History | View | Annotate | Download (14.7 KB)

1 428 fernando
/*
2
 * Created on 23-abr-2004
3
 *
4
 * To change the template for this generated file go to
5
 * Window>Preferences>Java>Code Generation>Code and Comments
6
 */
7 1103 fjp
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
8
 *
9
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
10
 *
11
 * This program is free software; you can redistribute it and/or
12
 * modify it under the terms of the GNU General Public License
13
 * as published by the Free Software Foundation; either version 2
14
 * of the License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 * along with this program; if not, write to the Free Software
23
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
24
 *
25
 * For more information, contact:
26
 *
27
 *  Generalitat Valenciana
28
 *   Conselleria d'Infraestructures i Transport
29
 *   Av. Blasco Ib??ez, 50
30
 *   46010 VALENCIA
31
 *   SPAIN
32
 *
33
 *      +34 963862235
34
 *   gvsig@gva.es
35
 *      www.gvsig.gva.es
36
 *
37
 *    or
38
 *
39
 *   IVER T.I. S.A
40
 *   Salamanca 50
41
 *   46005 Valencia
42
 *   Spain
43
 *
44
 *   +34 963163400
45
 *   dac@iver.es
46
 */
47 428 fernando
package com.iver.cit.gvsig.gui;
48
49 596 fernando
import java.awt.BorderLayout;
50 428 fernando
import java.io.File;
51
import java.util.ArrayList;
52 2512 fernando
import java.util.Comparator;
53
import java.util.HashSet;
54 2643 fernando
import java.util.Iterator;
55 2512 fernando
import java.util.TreeSet;
56 428 fernando
57
import javax.swing.DefaultListModel;
58
import javax.swing.JFileChooser;
59
import javax.swing.JPanel;
60
import javax.swing.filechooser.FileFilter;
61
62
import com.hardcode.driverManager.Driver;
63
import com.hardcode.driverManager.DriverLoadException;
64 1830 fernando
import com.hardcode.gdbms.engine.data.driver.FileDriver;
65 596 fernando
import com.iver.andami.PluginServices;
66
import com.iver.andami.messages.NotificationManager;
67 571 luisw
import com.iver.cit.gvsig.fmap.drivers.RasterDriver;
68 428 fernando
import com.iver.cit.gvsig.fmap.drivers.VectorialFileDriver;
69
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
70 6117 jaume
import com.iver.cit.gvsig.gui.panels.ProjChooserPanel;
71 1016 fernando
import com.iver.utiles.listManager.ListManagerListener;
72 428 fernando
/**
73
 * Di?logo para cargar las dieferentes capas a la vista.
74
 *
75
 * @author Vicente Caballero Navarro
76
 */
77 432 fernando
public class FileOpenDialog extends JPanel{
78 6230 jmvivo
        // TODO LWS ?los m_Files ... ?tendr?an que ser GeoFiles (Projected y dem?s)?
79 571 luisw
        private static String lastPath = null;
80 2657 fernando
        private static DriverFileFilter lastFileFilter = null;
81 428 fernando
    private ArrayList m_Files;
82
    private javax.swing.JPanel jPanel2 = null;
83
    private DefaultListModel m_lstModel;
84
    private JFileChooser fileChooser;
85 437 fernando
    private Class[] driverClasses;
86 6230 jmvivo
    private String title = PluginServices.getText(this,"Capas");
87 428 fernando
88 1285 luisw
        private ProjChooserPanel jPanelProj = null;
89
        //private JLabel jLabel = null;
90
        //private JComboBox jCboProjections = null;
91 1025 fernando
        private ListManagerSkin listManagerDemoSkin = null;
92 2565 fernando
    private boolean proj;
93
    public FileOpenDialog(Class[] driverClasses) {
94
        init(driverClasses, true);
95
    }
96 5764 caballero
97 428 fernando
    /**
98 2565 fernando
     * @param driverClasses2
99
     * @param b
100 428 fernando
     */
101 2565 fernando
    private void init(Class[] driverClasses, boolean proj) {
102
        this.proj = proj;
103 5764 caballero
104 428 fernando
            initialize();
105 5764 caballero
106 428 fernando
        m_Files = new ArrayList();
107 5764 caballero
108 437 fernando
        this.driverClasses = driverClasses;
109 5764 caballero
110 428 fernando
        // Cada vez que se abre, se borran las capas que pudiera haber.
111 5764 caballero
        m_lstModel = new DefaultListModel();
112 428 fernando
    }
113
114
    /**
115 2565 fernando
     * Creates a new FOpenDialog object.
116
     *
117
     * @param view Vista que vamos a refrescar
118
     * @param mapControl MapControl que recibe la capa (te puede interesar
119
     *        a?adirla al principal o al Overview.
120
     */
121
    public FileOpenDialog(Class[] driverClasses, boolean proj) {
122
        init(driverClasses, proj);
123
    }
124 5764 caballero
125 6230 jmvivo
    public FileOpenDialog(Class[] driverClasses, boolean proj, String title) {
126
            this.title= title;
127
        init(driverClasses, proj);
128
    }
129
130 2565 fernando
    /**
131 428 fernando
     * This method initializes this
132
     */
133
    private void initialize() {
134
        this.setLayout(new BorderLayout());
135 904 fjp
        this.setSize(514, 280);
136 428 fernando
        this.setLayout(null);
137
//        this.setBorder(javax.swing.BorderFactory.createBevelBorder(
138
  //              javax.swing.border.BevelBorder.RAISED));
139
        this.add(getJPanel2(), null);
140
    }
141
142
    /**
143
     * DOCUMENT ME!
144
     *
145
     * @return DOCUMENT ME!
146
     */
147
    public File[] getFiles() {
148 1016 fernando
        MyFile[] files = (MyFile[]) getListManagerDemoSkin().getListManager().getListModel().getObjects().toArray(new MyFile[0]);
149
        File[] ret = new File[files.length];
150 5764 caballero
        int pos=files.length-1;
151
        for (int i=0; i < files.length; i++){
152
                ret[pos] = files[i].f;
153
                pos--;
154 428 fernando
        }
155 1016 fernando
        return ret;
156 428 fernando
    }
157 2380 vcaballero
    public boolean accept(File f){
158
            return fileChooser.getFileFilter().accept(f);
159
    }
160 428 fernando
    /**
161
     * This method initializes jPanel2
162
     *
163
     * @return javax.swing.JPanel
164
     */
165
    private javax.swing.JPanel getJPanel2() {
166
        if (jPanel2 == null) {
167
            javax.swing.border.TitledBorder titledBorder1 = javax.swing.BorderFactory.createTitledBorder(null,
168 596 fernando
                            PluginServices.getText(this,"Seleccionar_fichero"),
169 428 fernando
                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
170
                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null);
171
            jPanel2 = new javax.swing.JPanel();
172
            jPanel2.setLayout(null);
173
            jPanel2.setBorder(titledBorder1);
174
            jPanel2.setPreferredSize(new java.awt.Dimension(380,200));
175 6272 jaume
            jPanel2.setBounds(2, 2, 506, 472);
176 6230 jmvivo
            titledBorder1.setTitle(this.title);
177 2565 fernando
            if (proj) {
178
                jPanel2.add(getJPanelProj(), null);
179
            }
180 1016 fernando
            jPanel2.add(getListManagerDemoSkin(), null);
181 428 fernando
        }
182
183
        return jPanel2;
184
    }
185
186 1171 fjp
    public String[] getDriverNames(){
187
        MyFile[] files = (MyFile[]) getListManagerDemoSkin().getListManager().getListModel().getObjects().toArray(new MyFile[0]);
188
        String[] ret = new String[files.length];
189 6268 jmvivo
        int pos=files.length-1;
190 5764 caballero
191 1171 fjp
        for (int i=0; i < files.length; i++)
192
        {
193 6268 jmvivo
                ret[pos] = files[i].getDriverName();
194
                pos--;
195 1171 fjp
        }
196
        return ret;
197 5764 caballero
198
            // return ((DriverFileFilter) fileChooser.getFileFilter()).getDescription();
199 428 fernando
    }
200
201
    public class DriverFileFilter extends FileFilter{
202 5764 caballero
203 437 fernando
                private Driver driver;
204 5764 caballero
205 428 fernando
                public DriverFileFilter(String driverName) throws DriverLoadException{
206 437 fernando
                        driver = LayerFactory.getDM().getDriver(driverName);
207 428 fernando
                }
208
209
                /**
210
                 * @see javax.swing.filechooser.FileFilter#accept(java.io.File)
211
                 */
212
                public boolean accept(File f) {
213
                        if (f.isDirectory()) return true;
214 437 fernando
                        if (driver instanceof VectorialFileDriver){
215
                                return ((VectorialFileDriver) driver).accept(f);
216
                        }else if (driver instanceof FileDriver){
217
                                return ((FileDriver) driver).fileAccepted(f);
218 571 luisw
                        }else if (driver instanceof RasterDriver){
219
                                return ((RasterDriver) driver).fileAccepted(f);
220 437 fernando
                        }else{
221
                                throw new RuntimeException("Tipo no reconocido");
222
                        }
223 428 fernando
                }
224
225
                /**
226
                 * @see javax.swing.filechooser.FileFilter#getDescription()
227
                 */
228
                public String getDescription() {
229
                        return ((Driver) driver).getName();
230
                }
231
        }
232 5764 caballero
233 437 fernando
        public void setDriverClasses(Class[] driverClasses) {
234
                this.driverClasses = driverClasses;
235
        }
236 904 fjp
        /**
237 5764 caballero
         * This method initializes jPanel
238
         *
239
         * @return javax.swing.JPanel
240
         */
241 1285 luisw
        private ProjChooserPanel getJPanelProj() {
242
                if (jPanelProj == null) {
243
                        jPanelProj = new ProjChooserPanel(FOpenDialog.getLastProjection());
244 6122 jaume
                        jPanelProj.setBounds(11, 400, 448, 35);
245 1285 luisw
                        jPanelProj.setPreferredSize(new java.awt.Dimension(448,35));
246 5764 caballero
                        jPanelProj.addActionListener(new java.awt.event.ActionListener() {
247 1285 luisw
                                public void actionPerformed(java.awt.event.ActionEvent e) {
248
                                if (jPanelProj.isOkPressed()) {
249
                                        FOpenDialog.setLastProjection(jPanelProj.getCurProj());
250
                                }
251
                                }
252
                        });
253
/*                        jPanel = new JLabel();
254 904 fjp
                        jPanel.setBounds(11, 214, 448, 37);
255
                        jLabel.setText("Seleccione la proyecci?n:");
256
                        jPanel.add(jLabel, null);
257 1285 luisw
                        jPanel.add(getJCboProjections(), null);*/
258 904 fjp
                }
259 1285 luisw
                return jPanelProj;
260 904 fjp
        }
261 2542 fernando
        /*
262 5764 caballero
         * This method initializes jComboBox
263
         *
264
         * @return javax.swing.JComboBox
265
         * /
266 904 fjp
        private JComboBox getJCboProjections() {
267
                if (jCboProjections == null) {
268
                        Iterator it = ProjectionPool.iterator();
269
                        Vector vector = new Vector();
270
                        int selected = -1;
271
                        int i=0;
272
                        while (it.hasNext())
273 5764 caballero
                        {
274 904 fjp
                                IProjection auxP =(IProjection) it.next();
275
                                if (auxP == FOpenDialog.getLastProjection())
276
                                                selected = i;
277
                                vector.add(auxP.getAbrev());
278
                                i++;
279
                        }
280
                        DefaultComboBoxModel cModel = new DefaultComboBoxModel(vector);
281
                        cModel.setSelectedItem(vector.get(selected));
282
                        jCboProjections = new JComboBox(cModel);
283
                        jCboProjections.setPreferredSize(new java.awt.Dimension(124,19));
284 5764 caballero
                        jCboProjections.addActionListener(new java.awt.event.ActionListener() {
285
                                public void actionPerformed(java.awt.event.ActionEvent e) {
286 904 fjp
                                        System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
287
                                        String strProj = (String) jCboProjections.getSelectedItem();
288
                                        FOpenDialog.setLastProjection(ProjectionPool.get(strProj));
289
                                }
290
                        });
291
                }
292
                return jCboProjections;
293 1285 luisw
        }*/
294 5764 caballero
295 1016 fernando
        public class MyFile {
296
                private File f;
297 1171 fjp
                private String driverName;
298 5764 caballero
299 1171 fjp
                public MyFile(File f, String driverName){
300 1016 fernando
                        this.f = f;
301 1171 fjp
                        this.driverName = driverName;
302 1016 fernando
                }
303 5764 caballero
304 1016 fernando
                public String toString(){
305
                        return f.getName();
306
                }
307 1171 fjp
                public String getDriverName(){
308
                        return driverName;
309
                }
310 5764 caballero
311 1016 fernando
        }
312 5764 caballero
313 1016 fernando
        /**
314 5764 caballero
         * This method initializes listManagerDemoSkin
315
         *
316
         * @return com.iver.utiles.listManager.ListManagerDemoSkin
317
         */
318 1025 fernando
        private ListManagerSkin getListManagerDemoSkin() {
319 1016 fernando
                if (listManagerDemoSkin == null) {
320 5764 caballero
                        listManagerDemoSkin = new ListManagerSkin(false);
321 6272 jaume
                        listManagerDemoSkin.setBounds(11, 21, 491, 363);
322 1016 fernando
                        listManagerDemoSkin.getListManager().setListener(new ListManagerListener() {
323
                                public Object[] addObjects() {
324 2512 fernando
                                    TreeSet filters = new TreeSet(new Comparator() {
325
                        public int compare(Object o1, Object o2) {
326
                            DriverFileFilter dff1 = (DriverFileFilter) o1;
327
                            DriverFileFilter dff2 = (DriverFileFilter) o2;
328 5764 caballero
329 2512 fernando
                            return dff1.driver.getName().compareTo(dff2.driver.getName());
330
                        }
331
                    });
332 1016 fernando
                    fileChooser = new JFileChooser(lastPath);
333
                    fileChooser.setMultiSelectionEnabled(true);
334
                    fileChooser.setAcceptAllFileFilterUsed(false);
335
336
                    try {
337 2657 fernando
                        boolean last = false;
338 1016 fernando
                                                String[] driverNames = LayerFactory.getDM().getDriverNames();
339 2657 fernando
                                                DriverFileFilter defaultFileFilter = null;
340
                        DriverFileFilter auxF;
341 1016 fernando
                                                for (int i = 0; i < driverNames.length; i++) {
342
                                                        System.err.println("DRIVER "+i+" : "+driverNames[i]);
343
                                                        boolean is = false;
344
                                                        for (int j = 0; j < driverClasses.length; j++) {
345
                                                                if (i == 0) System.err.println("DRIVER CLASS "+j+" : "+driverClasses[j].toString());
346
                                                                if (LayerFactory.getDM().isA(driverNames[i], driverClasses[j]))
347
                                                                        is = true;
348
                                                        }
349
                                                        if (is){
350 1346 fjp
                                                            auxF = new DriverFileFilter(driverNames[i]);
351 2512 fernando
                                                                filters.add(auxF);
352 2657 fernando
                                                                if (driverNames[i].indexOf("shp") != -1) {
353 1346 fjp
                                                                    defaultFileFilter = auxF;
354
                                                                }
355 2657 fernando
                                if (lastFileFilter != null) {
356
                                    if (driverNames[i].equals(lastFileFilter.driver.getName())){
357
                                        last = true;
358
                                    }
359
                                }
360 1016 fernando
                                                        }
361 1346 fjp
                                                }
362 2657 fernando
                        DriverFileFilter def = (DriverFileFilter) fileChooser.getFileFilter();
363
                        if (last) {
364
                            def = lastFileFilter;
365
                        } else {
366
                            if (lastFileFilter != null){
367
                                if (filters.contains(lastFileFilter)) {
368
                                    def = defaultFileFilter;
369
                                }
370
                            }
371 2643 fernando
                        }
372
                        Iterator i = filters.iterator();
373
                        while (i.hasNext()) {
374
                            DriverFileFilter element = (DriverFileFilter) i.next();
375 2657 fernando
                            if (def != null){
376
                                if (!element.driver.getName().equals(def.driver.getName())){
377
                                    fileChooser.addChoosableFileFilter(element);
378
                                }
379
                            } else {
380 2643 fernando
                                fileChooser.addChoosableFileFilter(element);
381
                            }
382
                        }
383 2657 fernando
                        if (def != null){
384
                            fileChooser.setFileFilter(def);
385
                        }
386 5764 caballero
387 1016 fernando
                                        } catch (DriverLoadException e1) {
388
                                                NotificationManager.addError("No se pudo acceder a los drivers", e1);
389
                                        }
390
391
                                        int result = fileChooser.showOpenDialog(FileOpenDialog.this);
392 5764 caballero
393 1016 fernando
                    File[] newFiles = null;
394
                    MyFile[] toAdd;
395
                    if (result == JFileChooser.APPROVE_OPTION) {
396 2657 fernando
                        lastFileFilter = (DriverFileFilter) fileChooser.getFileFilter();
397 1316 fjp
                        lastPath = fileChooser.getCurrentDirectory().getAbsolutePath();
398 1016 fernando
                                newFiles = fileChooser.getSelectedFiles();
399
                                toAdd = new MyFile[newFiles.length];
400
                                for (int ind=0; ind < newFiles.length; ind++)
401 1171 fjp
                                {
402
                                    String driverName = ((DriverFileFilter) fileChooser.getFileFilter()).getDescription();
403
                                    toAdd[ind] = new MyFile(newFiles[ind], driverName);
404
                                }
405 5764 caballero
406
407 1016 fernando
                                return toAdd;
408
                    }
409
                    else
410
                            return new Object[0];
411
412
                    // DefaultListModel lstModel = new DefaultListModel();
413
/*
414
                    for (int iFile = 0; iFile < newFiles.length;
415
                            iFile++) {
416
                            File theFile = newFiles[iFile];
417
                            String absolutePath = theFile.getAbsolutePath();
418
                            lastPath = theFile.getParent();
419
                            // Miramos por si es un ecwp:
420
                            int test = absolutePath.indexOf("ecwp:");
421
                            if (test == -1)
422
                                    m_lstModel.addElement(absolutePath);
423
                            else
424
                                    m_lstModel.addElement(absolutePath.substring(test));
425
                    }
426

427
                    getJListLayers().setModel(m_lstModel);*/
428
429
                }
430
431
                                public Object getProperties(Object selected) {
432
                                        return null;
433
                                }
434
                        });
435
                }
436
                return listManagerDemoSkin;
437
        }
438
   }  //  @jve:decl-index=0:visual-constraint="10,10"
439 428 fernando
 //  @jve:visual-info  decl-index=0 visual-constraint="10,10"
440
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"