Statistics
| Revision:

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

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 1285 luisw
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 428 fernando
        // 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 428 fernando
87 1285 luisw
        private ProjChooserPanel jPanelProj = null;
88
        //private JLabel jLabel = null;
89
        //private JComboBox jCboProjections = null;
90 1025 fernando
        private ListManagerSkin listManagerDemoSkin = null;
91 2565 fernando
    private boolean proj;
92
    public FileOpenDialog(Class[] driverClasses) {
93
        init(driverClasses, true);
94
    }
95
96 428 fernando
    /**
97 2565 fernando
     * @param driverClasses2
98
     * @param b
99 428 fernando
     */
100 2565 fernando
    private void init(Class[] driverClasses, boolean proj) {
101
        this.proj = proj;
102
103 428 fernando
            initialize();
104
105
        m_Files = new ArrayList();
106
107 437 fernando
        this.driverClasses = driverClasses;
108
109 428 fernando
        // Cada vez que se abre, se borran las capas que pudiera haber.
110
        m_lstModel = new DefaultListModel();
111
    }
112
113
    /**
114 2565 fernando
     * Creates a new FOpenDialog object.
115
     *
116
     * @param view Vista que vamos a refrescar
117
     * @param mapControl MapControl que recibe la capa (te puede interesar
118
     *        a?adirla al principal o al Overview.
119
     */
120
    public FileOpenDialog(Class[] driverClasses, boolean proj) {
121
        init(driverClasses, proj);
122
    }
123
124
    /**
125 428 fernando
     * This method initializes this
126
     */
127
    private void initialize() {
128
        this.setLayout(new BorderLayout());
129 904 fjp
        this.setSize(514, 280);
130 428 fernando
        this.setLayout(null);
131
//        this.setBorder(javax.swing.BorderFactory.createBevelBorder(
132
  //              javax.swing.border.BevelBorder.RAISED));
133
        this.add(getJPanel2(), null);
134
    }
135
136
    /**
137
     * DOCUMENT ME!
138
     *
139
     * @return DOCUMENT ME!
140
     */
141
    public File[] getFiles() {
142 1016 fernando
        MyFile[] files = (MyFile[]) getListManagerDemoSkin().getListManager().getListModel().getObjects().toArray(new MyFile[0]);
143
        File[] ret = new File[files.length];
144
145
        for (int i=0; i < files.length; i++)
146 428 fernando
        {
147 1016 fernando
                ret[i] = files[i].f;
148 428 fernando
        }
149 1016 fernando
        return ret;
150 428 fernando
    }
151 2380 vcaballero
    public boolean accept(File f){
152
            return fileChooser.getFileFilter().accept(f);
153
    }
154 428 fernando
    /**
155
     * This method initializes jPanel2
156
     *
157
     * @return javax.swing.JPanel
158
     */
159
    private javax.swing.JPanel getJPanel2() {
160
        if (jPanel2 == null) {
161
            javax.swing.border.TitledBorder titledBorder1 = javax.swing.BorderFactory.createTitledBorder(null,
162 596 fernando
                            PluginServices.getText(this,"Seleccionar_fichero"),
163 428 fernando
                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
164
                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null);
165
            jPanel2 = new javax.swing.JPanel();
166
            jPanel2.setLayout(null);
167
            jPanel2.setBorder(titledBorder1);
168
            jPanel2.setPreferredSize(new java.awt.Dimension(380,200));
169
            jPanel2.setBounds(2, 2, 510, 272);
170 596 fernando
            titledBorder1.setTitle(PluginServices.getText(this,"Capas"));
171 2565 fernando
            if (proj) {
172
                jPanel2.add(getJPanelProj(), null);
173
            }
174 1016 fernando
            jPanel2.add(getListManagerDemoSkin(), null);
175 428 fernando
        }
176
177
        return jPanel2;
178
    }
179
180 1171 fjp
    public String[] getDriverNames(){
181
        MyFile[] files = (MyFile[]) getListManagerDemoSkin().getListManager().getListModel().getObjects().toArray(new MyFile[0]);
182
        String[] ret = new String[files.length];
183
184
        for (int i=0; i < files.length; i++)
185
        {
186
                ret[i] = files[i].getDriverName();
187
        }
188
        return ret;
189
190
            // return ((DriverFileFilter) fileChooser.getFileFilter()).getDescription();
191 428 fernando
    }
192
193
    public class DriverFileFilter extends FileFilter{
194
195 437 fernando
                private Driver driver;
196 428 fernando
197
                public DriverFileFilter(String driverName) throws DriverLoadException{
198 437 fernando
                        driver = LayerFactory.getDM().getDriver(driverName);
199 428 fernando
                }
200
201
                /**
202
                 * @see javax.swing.filechooser.FileFilter#accept(java.io.File)
203
                 */
204
                public boolean accept(File f) {
205
                        if (f.isDirectory()) return true;
206 437 fernando
                        if (driver instanceof VectorialFileDriver){
207
                                return ((VectorialFileDriver) driver).accept(f);
208
                        }else if (driver instanceof FileDriver){
209
                                return ((FileDriver) driver).fileAccepted(f);
210 571 luisw
                        }else if (driver instanceof RasterDriver){
211
                                return ((RasterDriver) driver).fileAccepted(f);
212 437 fernando
                        }else{
213
                                throw new RuntimeException("Tipo no reconocido");
214
                        }
215 428 fernando
                }
216
217
                /**
218
                 * @see javax.swing.filechooser.FileFilter#getDescription()
219
                 */
220
                public String getDescription() {
221
                        return ((Driver) driver).getName();
222
                }
223
        }
224
225 437 fernando
        public void setDriverClasses(Class[] driverClasses) {
226
                this.driverClasses = driverClasses;
227
        }
228 904 fjp
        /**
229
         * This method initializes jPanel
230
         *
231
         * @return javax.swing.JPanel
232
         */
233 1285 luisw
        private ProjChooserPanel getJPanelProj() {
234
                if (jPanelProj == null) {
235
                        jPanelProj = new ProjChooserPanel(FOpenDialog.getLastProjection());
236
                        jPanelProj.setBounds(11, 214, 448, 35);
237
                        jPanelProj.setPreferredSize(new java.awt.Dimension(448,35));
238
                        jPanelProj.addActionListener(new java.awt.event.ActionListener() {
239
                                public void actionPerformed(java.awt.event.ActionEvent e) {
240
                                if (jPanelProj.isOkPressed()) {
241
                                        FOpenDialog.setLastProjection(jPanelProj.getCurProj());
242
                                }
243
                                }
244
                        });
245
/*                        jPanel = new JLabel();
246 904 fjp
                        jPanel.setBounds(11, 214, 448, 37);
247
                        jLabel.setText("Seleccione la proyecci?n:");
248
                        jPanel.add(jLabel, null);
249 1285 luisw
                        jPanel.add(getJCboProjections(), null);*/
250 904 fjp
                }
251 1285 luisw
                return jPanelProj;
252 904 fjp
        }
253 2542 fernando
        /*
254 904 fjp
         * This method initializes jComboBox
255
         *
256
         * @return javax.swing.JComboBox
257 1285 luisw
         * /
258 904 fjp
        private JComboBox getJCboProjections() {
259
                if (jCboProjections == null) {
260
                        Iterator it = ProjectionPool.iterator();
261
                        Vector vector = new Vector();
262
                        int selected = -1;
263
                        int i=0;
264
                        while (it.hasNext())
265
                        {
266
                                IProjection auxP =(IProjection) it.next();
267
                                if (auxP == FOpenDialog.getLastProjection())
268
                                                selected = i;
269
                                vector.add(auxP.getAbrev());
270
                                i++;
271
                        }
272
                        DefaultComboBoxModel cModel = new DefaultComboBoxModel(vector);
273
                        cModel.setSelectedItem(vector.get(selected));
274
                        jCboProjections = new JComboBox(cModel);
275
                        jCboProjections.setPreferredSize(new java.awt.Dimension(124,19));
276
                        jCboProjections.addActionListener(new java.awt.event.ActionListener() {
277
                                public void actionPerformed(java.awt.event.ActionEvent e) {
278
                                        System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
279
                                        String strProj = (String) jCboProjections.getSelectedItem();
280
                                        FOpenDialog.setLastProjection(ProjectionPool.get(strProj));
281
                                }
282
                        });
283
                }
284
                return jCboProjections;
285 1285 luisw
        }*/
286 1016 fernando
287
        public class MyFile {
288
                private File f;
289 1171 fjp
                private String driverName;
290 1016 fernando
291 1171 fjp
                public MyFile(File f, String driverName){
292 1016 fernando
                        this.f = f;
293 1171 fjp
                        this.driverName = driverName;
294 1016 fernando
                }
295
296
                public String toString(){
297
                        return f.getName();
298
                }
299 1171 fjp
                public String getDriverName(){
300
                        return driverName;
301
                }
302
303 1016 fernando
        }
304
305
        /**
306
         * This method initializes listManagerDemoSkin
307
         *
308
         * @return com.iver.utiles.listManager.ListManagerDemoSkin
309
         */
310 1025 fernando
        private ListManagerSkin getListManagerDemoSkin() {
311 1016 fernando
                if (listManagerDemoSkin == null) {
312 1025 fernando
                        listManagerDemoSkin = new ListManagerSkin();
313 1016 fernando
                        listManagerDemoSkin.setBounds(11, 21, 491, 164);
314
                        listManagerDemoSkin.getListManager().setListener(new ListManagerListener() {
315
                                public Object[] addObjects() {
316 2512 fernando
                                    TreeSet filters = new TreeSet(new Comparator() {
317
                        public int compare(Object o1, Object o2) {
318
                            DriverFileFilter dff1 = (DriverFileFilter) o1;
319
                            DriverFileFilter dff2 = (DriverFileFilter) o2;
320
321
                            return dff1.driver.getName().compareTo(dff2.driver.getName());
322
                        }
323
                    });
324 1016 fernando
                    fileChooser = new JFileChooser(lastPath);
325
                    fileChooser.setMultiSelectionEnabled(true);
326
                    fileChooser.setAcceptAllFileFilterUsed(false);
327
328
                    try {
329 2657 fernando
                        boolean last = false;
330 1016 fernando
                                                String[] driverNames = LayerFactory.getDM().getDriverNames();
331 2657 fernando
                                                DriverFileFilter defaultFileFilter = null;
332
                        DriverFileFilter auxF;
333 1016 fernando
                                                for (int i = 0; i < driverNames.length; i++) {
334
                                                        System.err.println("DRIVER "+i+" : "+driverNames[i]);
335
                                                        boolean is = false;
336
                                                        for (int j = 0; j < driverClasses.length; j++) {
337
                                                                if (i == 0) System.err.println("DRIVER CLASS "+j+" : "+driverClasses[j].toString());
338
                                                                if (LayerFactory.getDM().isA(driverNames[i], driverClasses[j]))
339
                                                                        is = true;
340
                                                        }
341
                                                        if (is){
342 1346 fjp
                                                            auxF = new DriverFileFilter(driverNames[i]);
343 2512 fernando
                                                                filters.add(auxF);
344 2657 fernando
                                                                if (driverNames[i].indexOf("shp") != -1) {
345 1346 fjp
                                                                    defaultFileFilter = auxF;
346
                                                                }
347 2657 fernando
                                if (lastFileFilter != null) {
348
                                    if (driverNames[i].equals(lastFileFilter.driver.getName())){
349
                                        last = true;
350
                                    }
351
                                }
352 1016 fernando
                                                        }
353 1346 fjp
                                                }
354 2657 fernando
                        DriverFileFilter def = (DriverFileFilter) fileChooser.getFileFilter();
355
                        if (last) {
356
                            def = lastFileFilter;
357
                        } else {
358
                            if (lastFileFilter != null){
359
                                if (filters.contains(lastFileFilter)) {
360
                                    def = defaultFileFilter;
361
                                }
362
                            }
363 2643 fernando
                        }
364
                        Iterator i = filters.iterator();
365
                        while (i.hasNext()) {
366
                            DriverFileFilter element = (DriverFileFilter) i.next();
367 2657 fernando
                            if (def != null){
368
                                if (!element.driver.getName().equals(def.driver.getName())){
369
                                    fileChooser.addChoosableFileFilter(element);
370
                                }
371
                            } else {
372 2643 fernando
                                fileChooser.addChoosableFileFilter(element);
373
                            }
374
                        }
375 2657 fernando
                        if (def != null){
376
                            fileChooser.setFileFilter(def);
377
                        }
378 2643 fernando
379 1016 fernando
                                        } catch (DriverLoadException e1) {
380
                                                NotificationManager.addError("No se pudo acceder a los drivers", e1);
381
                                        }
382
383
                                        int result = fileChooser.showOpenDialog(FileOpenDialog.this);
384
385
                    File[] newFiles = null;
386
                    MyFile[] toAdd;
387
                    if (result == JFileChooser.APPROVE_OPTION) {
388 2657 fernando
                        lastFileFilter = (DriverFileFilter) fileChooser.getFileFilter();
389 1316 fjp
                        lastPath = fileChooser.getCurrentDirectory().getAbsolutePath();
390 1016 fernando
                                newFiles = fileChooser.getSelectedFiles();
391
                                toAdd = new MyFile[newFiles.length];
392
                                for (int ind=0; ind < newFiles.length; ind++)
393 1171 fjp
                                {
394
                                    String driverName = ((DriverFileFilter) fileChooser.getFileFilter()).getDescription();
395
                                    toAdd[ind] = new MyFile(newFiles[ind], driverName);
396
                                }
397
398 1016 fernando
399
                                return toAdd;
400
                    }
401
                    else
402
                            return new Object[0];
403
404
                    // DefaultListModel lstModel = new DefaultListModel();
405
/*
406
                    for (int iFile = 0; iFile < newFiles.length;
407
                            iFile++) {
408
                            File theFile = newFiles[iFile];
409
                            String absolutePath = theFile.getAbsolutePath();
410
                            lastPath = theFile.getParent();
411
                            // Miramos por si es un ecwp:
412
                            int test = absolutePath.indexOf("ecwp:");
413
                            if (test == -1)
414
                                    m_lstModel.addElement(absolutePath);
415
                            else
416
                                    m_lstModel.addElement(absolutePath.substring(test));
417
                    }
418

419
                    getJListLayers().setModel(m_lstModel);*/
420
421
                }
422
423
                                public Object getProperties(Object selected) {
424
                                        return null;
425
                                }
426
                        });
427
                }
428
                return listManagerDemoSkin;
429
        }
430
   }  //  @jve:decl-index=0:visual-constraint="10,10"
431 428 fernando
 //  @jve:visual-info  decl-index=0 visual-constraint="10,10"
432
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"