Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / filter / FilterListener.java @ 12514

History | View | Annotate | Download (20.9 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 */
19
package org.gvsig.rastertools.filter;
20

    
21
import java.awt.Component;
22
import java.awt.Dimension;
23
import java.awt.Graphics2D;
24
import java.awt.event.ActionEvent;
25
import java.awt.event.ActionListener;
26
import java.awt.geom.AffineTransform;
27
import java.awt.geom.Dimension2D;
28
import java.io.File;
29
import java.util.ArrayList;
30
import java.util.EventObject;
31
import java.util.Hashtable;
32

    
33
import javax.swing.JFileChooser;
34
import javax.swing.JOptionPane;
35
import javax.swing.ListModel;
36

    
37
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
38
import org.gvsig.gui.beans.imagenavigator.IClientImageNavigator;
39
import org.gvsig.gui.beans.incrementabletask.IncrementableTask;
40
import org.gvsig.gui.beans.propertiespanel.PropertiesComponent;
41
import org.gvsig.gui.beans.propertiespanel.PropertiesComponentListener;
42
import org.gvsig.gui.beans.propertiespanel.PropertyStruct;
43
import org.gvsig.gui.beans.treelist.event.TreeListChangeEvent;
44
import org.gvsig.gui.beans.treelist.event.TreeListEvent;
45
import org.gvsig.gui.beans.treelist.listeners.TreeListChangeListener;
46
import org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener;
47
import org.gvsig.raster.dataset.GeoRasterWriter;
48
import org.gvsig.raster.dataset.MultiRasterDataset;
49
import org.gvsig.raster.dataset.Params;
50
import org.gvsig.raster.dataset.Params.Param;
51
import org.gvsig.raster.datastruct.Extent;
52
import org.gvsig.raster.datastruct.ViewPortData;
53
import org.gvsig.raster.grid.filter.IRasterFilterListManager;
54
import org.gvsig.raster.grid.filter.RasterFilter;
55
import org.gvsig.raster.grid.filter.RasterFilterList;
56
import org.gvsig.raster.grid.filter.RasterFilterListManager;
57
import org.gvsig.raster.grid.render.Rendering;
58
import org.gvsig.rastertools.RasterModule;
59
import org.gvsig.rastertools.filter.ui.FilterPanel;
60

    
61
import com.iver.andami.PluginServices;
62
import com.iver.andami.Utilities;
63
import com.iver.andami.messages.NotificationManager;
64
import com.iver.andami.ui.mdiManager.IWindow;
65
import com.iver.cit.gvsig.exceptions.layers.LoadLayerException;
66
import com.iver.cit.gvsig.fmap.ViewPort;
67
import com.iver.cit.gvsig.fmap.layers.FLayer;
68
import com.iver.cit.gvsig.project.documents.view.gui.View;
69
/**
70
 * <code>FilterListener</code> es la clase donde se procesar? gran parte del
71
 * c?digo que controla el panel para el manejo de un layer en la aplicaci?n de
72
 * filtros.
73
 *
74
 * @version 24/05/2007
75
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
76
 */
77
public class FilterListener implements ActionListener, IClientImageNavigator, TreeListComponentListener, TreeListChangeListener, PropertiesComponentListener {
78
        FilterPanel                                filterPanel        = null;
79
        public int                                actualParam        = -1;
80
        public ArrayList        paramsList        = new ArrayList();
81

    
82
        public class ParamStruct {
83
                String filterName = null;
84
                Params filterParam = null;
85
                Class filterClass = null;
86

    
87
                /**
88
                 * @return the filterName
89
                 */
90
                public String getFilterName() {
91
                        return filterName;
92
                }
93

    
94
                /**
95
                 * @param filterName the filterName to set
96
                 */
97
                public void setFilterName(String filterName) {
98
                        this.filterName = filterName;
99
                }
100

    
101
                /**
102
                 * @return the filterParam
103
                 */
104
                public Params getFilterParam() {
105
                        return filterParam;
106
                }
107

    
108
                /**
109
                 * @param filterParam the filterParam to set
110
                 */
111
                public void setFilterParam(Params filterParam) {
112
                        this.filterParam = filterParam;
113
                }
114

    
115
                /**
116
                 * @return the filterClass
117
                 */
118
                public Class getFilterClass() {
119
                        return filterClass;
120
                }
121

    
122
                /**
123
                 * @param filterClass the filterClass to set
124
                 */
125
                public void setFilterClass(Class filterClass) {
126
                        this.filterClass = filterClass;
127
                }
128
        }
129

    
130
        /**
131
         * Construye un FilterListener especificando el FilterPanel asociado
132
         * @param fp
133
         */
134
        public FilterListener(FilterPanel fp) {
135
                filterPanel = fp;
136
        }
137

    
138
        /**
139
         * Asignamos los valores del PropertiesComponent al Params seleccionado
140
         */
141
        public void RefreshDataProperties() {
142
                if (actualParam == -1) return;
143

    
144
                ArrayList listValues = getFilterPanel().getPropertiesComponent().getValues();
145

    
146
                Params params = ((ParamStruct) paramsList.get(actualParam)).getFilterParam();
147
                for (int j=0; j<listValues.size(); j++) {
148
                        PropertyStruct ps = (PropertyStruct) listValues.get(j);
149
                        params.changeParamValue(ps.getKey(), ps.getNewValue().toString());
150
                }
151
        }
152

    
153
        /**
154
         * Obtener la posici?n del Param seleccionado en el ArrayList
155
         * @param filterName
156
         * @return
157
         */
158
        private int getParamSelected(String filterName) {
159
                for (int i = 0; i < paramsList.size(); i++) {
160
                        if (((ParamStruct) paramsList.get(i)).getFilterName().equals(filterName))
161
                                return i;
162
                }
163
                return -1;
164
        }
165

    
166
        /**
167
         * Cambiar el panel de propiedades central por el nuevo panel, segun el filtro
168
         * seleccionado que se pasa por par?metro.
169
         * @param filter
170
         */
171
        public void changePanel(String filter) {
172
                int posParam = getParamSelected(filter);
173

    
174
                RefreshDataProperties();
175
                actualParam = posParam;
176

    
177
                PropertiesComponent propertiesComponent = new PropertiesComponent();
178

    
179
                if (posParam != -1) {
180

    
181
                        Params params = ((ParamStruct) paramsList.get(actualParam)).getFilterParam();
182
                        if (params != null) {
183
                                for (int i = 0; i < params.getNumParams(); i++) {
184
                                        Param p = params.getParam(i);
185
                                        String name = p.id;
186
                                        String key = p.id;
187
                                        if (name.equals("FilterName")) continue;
188
                                        Object[] types = null;
189
                                        int selectedValue = 0;
190

    
191
                                        switch (params.getParam(i).type) {
192
                                                case Params.CHECK:
193
                                                        propertiesComponent.addValue(name, key, new Boolean((String) p.defaultValue), types);
194
                                                        break;
195
                                                case Params.CHOICE:
196
                                                        ArrayList list = new ArrayList();
197
                                                        for (int j = 0; j < p.list.length; j++) {
198
                                                                list.add(p.list[j]);
199
                                                                if (((String) p.defaultValue).compareTo(p.list[j]) == 0)
200
                                                                        selectedValue = j;
201
                                                        }
202
                                                        types = new Object[] { new Integer(PropertiesComponent.TYPE_COMBO), list };
203
                                                        propertiesComponent.addValue(name, key, new Integer(selectedValue), types);
204
                                                        break;
205
                                                case Params.SLIDER:
206
                                                        types = new Object[]{new Integer(PropertiesComponent.TYPE_SLIDER), new Integer(p.list[0]), new Integer(p.list[1])};
207
                                                        propertiesComponent.addValue(name, key, new Integer((int) Math.round(new Double((String) p.defaultValue).doubleValue())), types);
208
                                                        break;
209
                                                default:
210
                                                        propertiesComponent.addValue(params.getParam(i).id, params.getParam(i).id, params.getParam(i).defaultValue, null);
211
                                                        break;
212
                                        }
213
                                }
214
                        }
215
                }
216
                getFilterPanel().setNewPropertiesComponent(propertiesComponent, filter);
217
        }
218

    
219
        /**
220
         * A?adir un nuevo Params a la lista de Params que podemos manejar. Un Params
221
         * equivale a un filtro cargado. El hecho de trabajar con Params y no con
222
         * filtros, simplifica totalmente el panel. Sin tener que depender de los
223
         * filtros nada m?s que para el momento de dibujado o guardado.
224
         * @param name
225
         * @param params
226
         * @param classFilter
227
         */
228
        public void addNewParam(String name, Params params, Class classFilter) {
229
                ParamStruct param = new ParamStruct();
230
                param.setFilterName(name);
231
                param.setFilterParam(params);
232
                param.setFilterClass(classFilter);
233
                paramsList.add(param);
234
        }
235

    
236
        /*
237
         * (non-Javadoc)
238
         * @see org.gvsig.gui.beans.propertiespanel.PropertiesComponentListener#actionChangeProperties(java.util.EventObject)
239
         */
240
        public void actionChangeProperties(EventObject e) {
241
                RefreshDataProperties();
242
                getFilterPanel().refreshPreview();
243
        }
244

    
245
        /*
246
         * (non-Javadoc)
247
         * @see org.gvsig.gui.beans.treelist.listeners.TreeListChangeListener#actionChangeSelection(org.gvsig.gui.beans.treelist.event.TreeListChangeEvent)
248
         */
249
        public void actionChangeSelection(TreeListChangeEvent e) {
250
                changePanel(e.getItem());
251
        }
252

    
253
        /*
254
         * (non-Javadoc)
255
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
256
         */
257
        public void actionPerformed(ActionEvent e) {
258
                getFilterPanel().refreshPreview();
259
        }
260

    
261
        /*
262
         * (non-Javadoc)
263
         * @see org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener#elementAdded(org.gvsig.gui.beans.treelist.event.TreeListEvent)
264
         */
265
        public void elementAdded(TreeListEvent e) {
266
                getFilterPanel().refreshPreview();
267
        }
268

    
269
        /*
270
         * (non-Javadoc)
271
         * @see org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener#elementMoved(org.gvsig.gui.beans.treelist.event.TreeListEvent)
272
         */
273
        public void elementMoved(TreeListEvent e) {
274
                getFilterPanel().refreshPreview();
275
        }
276

    
277
        /*
278
         * (non-Javadoc)
279
         * @see org.gvsig.gui.beans.treelist.listeners.TreeListComponentListener#elementRemoved(org.gvsig.gui.beans.treelist.event.TreeListEvent)
280
         */
281
        public void elementRemoved(TreeListEvent e) {
282
                getFilterPanel().refreshPreview();
283
        }
284

    
285
        /**
286
         * @return the paramsList
287
         */
288
        public ArrayList getParamsList() {
289
                return paramsList;
290
        }
291

    
292
        /**
293
         * Devuelve la ruta del fichero donde se va a guardar, en caso de guardarse
294
         * en memoria, calcula el nombre sin preguntar y devuelve la ruta.
295
         * @return
296
         */
297
        public String getFileSelected() {
298
                String path = "";
299
                if (getFilterPanel().getRadioFileGenerate().isSelected()) {
300
                        JFileChooser chooser = new JFileChooser(RasterModule.getPath());
301
                        chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
302

    
303
                        //A?adimos las extensiones que hayan sido registradas en el driver
304
                        String[] extList = GeoRasterWriter.getDriversExtensions();
305
                        for(int i=0;i<extList.length;i++)
306
                                chooser.addChoosableFileFilter(new WriterFilter(extList[i]));
307

    
308
                        if (chooser.showOpenDialog(getFilterPanel()) != JFileChooser.APPROVE_OPTION)
309
                                return null;
310

    
311
                        String fName = chooser.getSelectedFile().toString();
312
                        String ext = ((WriterFilter)chooser.getFileFilter()).getDescription();
313

    
314
                        ext = ext.toLowerCase().substring(ext.lastIndexOf(".") + 1, ext.length());
315

    
316
                        if ((fName != null) && !fName.equals(""))
317
                                if (!fName.endsWith("." + ext))
318
                                        fName = fName + "." + ext;
319

    
320
                        RasterModule.setPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
321
                        path = fName;
322
                } else {
323
                        path = Utilities.createTempDirectory() + File.separator + getFilterPanel().getFilenameTextField().getText() + ".tif";
324
                        filterPanel.setNewLayerText();
325
                }
326
                return path;
327
        }
328

    
329
        /**
330
         * Aqui se seleccionan que filtros se van a aplicar y se devuelven en forma
331
         * de ArrayList tanto para el dibujado como cuando aceptan o aplican el panel.
332
         * @param rendering
333
         * @return
334
         */
335
        public ArrayList applyFilters(Rendering rendering) {
336
                ArrayList listFilterUsed = new ArrayList();
337

    
338
                RasterFilterList filterList = new RasterFilterList();
339
                RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
340

    
341
                // Conservamos filtros no visibles ya existentes
342
                ArrayList filtersInit = getFilterPanel().getFilterStatus();
343
                for (int i = 0; i < filtersInit.size(); i++) {
344
                        // Si es visible no hacemos nada
345
                        if (((RasterFilter) filtersInit.get(i)).isVisible())
346
                                continue;
347

    
348
                        RasterFilter obj = null;
349
                        for (int j = 0; j < stackManager.getRasterFilterList().size(); j++) {
350
                                Class classFilter = (Class) stackManager.getRasterFilterList().get(j);
351
                                try {
352
                                        obj = (RasterFilter) classFilter.newInstance();
353
                                        if (obj.getName().equals(((RasterFilter) filtersInit.get(i)).getName()))
354
                                                break;
355
                                } catch (InstantiationException e) {
356
                                        NotificationManager.addError("Error instanciando un filtro de la lista", e);
357
                                } catch (IllegalAccessException e) {
358
                                        NotificationManager.addError("Error instanciando un filtro de la lista", e);
359
                                }
360
                        }
361

    
362
                        // Si no encontramos el filtro apropiado, nos olvidamos de el
363
                        if (obj == null)
364
                                continue;
365

    
366
                        // Si no es visible tenemos que conservar el filtro
367
                        try {
368
                                Params params = (Params) ((RasterFilter) filtersInit.get(i)).getUIParams(((RasterFilter) filtersInit.get(i)).getName()).clone();
369
                                // A?ado el parametro RenderBands a los parametros del filtro
370
                                String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2];
371
                                params.setParam("RenderBands", rgb, 0, null);
372

    
373
                                ParamStruct newParam = new ParamStruct();
374
                                newParam.setFilterClass(obj.getClass());
375
                                newParam.setFilterName(((RasterFilter) filtersInit.get(i)).getName());
376
                                newParam.setFilterParam(params);
377
                                listFilterUsed.add(newParam);
378
                        } catch (CloneNotSupportedException e) {
379
                        }
380
                }
381

    
382
                // Metemos los filtros seleccionados en el panel
383
                ListModel list = getFilterPanel().getTreeListContainer().getListModel();
384
                for (int i = 0; i < list.getSize(); i++) {
385
                        Hashtable hastTable = getFilterPanel().getTreeListContainer().getMap();
386
                        for (int j = 0; j < paramsList.size(); j++) {
387
                                boolean active = true;
388
                                Param param = ((ParamStruct) paramsList.get(j)).getFilterParam().getParamById(PluginServices.getText(this, "enabled"));
389
                                if ((param != null) && ((new Boolean((String) param.defaultValue).booleanValue()) == false))
390
                                        active = false;
391
                                if (active) {
392
                                        if (((ParamStruct) paramsList.get(j)).getFilterName().equals(hastTable.get(list.getElementAt(i)))) {
393
                                                try {
394
                                                        Params params = (Params) ((ParamStruct) paramsList.get(j)).getFilterParam().clone();
395
                                                        // A?ado el parametro RenderBands a los parametros del filtro
396
                                                        String rgb = rendering.getRenderBands()[0] + " " + rendering.getRenderBands()[1] + " " + rendering.getRenderBands()[2];
397
                                                        params.setParam("RenderBands", rgb, 0, null);
398

    
399
                                                        ParamStruct newParam = new ParamStruct();
400
                                                        newParam.setFilterClass(((ParamStruct) paramsList.get(j)).getFilterClass());
401
                                                        newParam.setFilterName(((ParamStruct) paramsList.get(j)).getFilterName());
402
                                                        newParam.setFilterParam(params);
403
                                                        listFilterUsed.add(newParam);
404
                                                } catch (CloneNotSupportedException e) {
405
                                                }
406
                                        }
407
                                }
408
                        }
409
                }
410
                return listFilterUsed;
411
        }
412

    
413
        /*
414
         * (non-Javadoc)
415
         * @see org.gvsig.gui.beans.imagenavigator.IClientImageNavigator#drawImage(java.awt.Graphics2D, double, double, double, double, double, int, int)
416
         */
417
        public void drawImage(Graphics2D g, double x1, double y1, double x2, double y2, double zoom, int width, int height) {
418
                if (getFilterPanel().getLayer() == null)
419
                        return;
420

    
421
                Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender();
422

    
423
                if ((rendering == null) || ((x2 - x1) == 0.0) || ((y2 - y1) == 0.0))
424
                        return;
425

    
426
                rendering.getFilterList().pushStatus();
427

    
428
                rendering.getFilterList().clear();
429

    
430
                if (getFilterPanel().getCBShowFilters().isSelected()) {
431
                        RasterFilterList filterList = rendering.getFilterList();
432
                        RasterFilterListManager stackManager = new RasterFilterListManager(filterList);
433

    
434
                        ArrayList listFilterUsed = applyFilters(rendering);
435
                        for (int i = 0; i < listFilterUsed.size(); i++) {
436
                                IRasterFilterListManager filterManager = stackManager.getManagerByFilterClass(((ParamStruct) listFilterUsed.get(i)).getFilterClass());
437
                                filterManager.addFilter(((ParamStruct) listFilterUsed.get(i)).getFilterClass(), ((ParamStruct) listFilterUsed.get(i)).getFilterParam());
438
                        }
439
                }
440

    
441
                ViewPort vp = new ViewPort(null);
442

    
443
                Dimension2D dimension = new Dimension(width, height);
444
                Extent extent = new Extent(x1, y1, x2, y2);
445

    
446
                ViewPortData vp2 = new ViewPortData(vp.getProjection(), extent, dimension);
447
                vp2.setMat(new AffineTransform(zoom, 0.0, 0.0, zoom, -x1*zoom, -y1*zoom));
448

    
449
                Extent extent2 = ((FLyrRasterSE) getFilterPanel().getLayer()).getDatasource().getExtent();
450

    
451
                AffineTransform trans = g.getTransform();
452
                // Calcular cuanto sobresale la imagen y rectificar ese desplazamiento
453
                if (y1 > extent2.maxY()) {
454
                        g.translate(0.0, (-(extent2.maxY() - y1) * zoom)*2.0);
455
                }
456

    
457
                rendering.draw(g, vp2);
458
                g.setTransform(trans);
459

    
460
                rendering.getFilterList().popStatus();
461
        }
462

    
463
        /**
464
         * Que acciones se ejecutaran al haber presionado el bot?n aceptar o aplicar
465
         */
466
        public void accept() {
467
                MultiRasterDataset multiRasterDataset = (MultiRasterDataset)((FLyrRasterSE) getFilterPanel().getLayer()).getMultiRasterDataset();
468
                if (multiRasterDataset == null)
469
                        return;
470

    
471
                String path = null;
472
                if (!getFilterPanel().getRadioOnlyView().isSelected()) {
473
                        path = getFileSelected();
474
                        if (path == null)
475
                                return;
476
                }
477

    
478
                Rendering rendering = ((FLyrRasterSE) getFilterPanel().getLayer()).getRender();
479

    
480
                // Array para guardar los filtros que se van a usar en forma de ParamStruct
481
                ArrayList listFilterUsed = applyFilters(rendering);
482

    
483
                if (filterPanel.getRadioOnlyView().isSelected()) {
484
                        FilterProcess.addSelectedFilters(rendering.getFilterList(), listFilterUsed);
485
                        getFilterPanel().getLayer().getMapContext().invalidate();
486
                } else {
487
                        FilterProcess filterProcess = new FilterProcess(this, path, multiRasterDataset, listFilterUsed);
488
                        IncrementableTask incrementableTask = new IncrementableTask(filterProcess);
489
                        filterProcess.setIncrementableTask(incrementableTask);
490
                        incrementableTask.showWindow();
491

    
492
                        filterProcess.start();
493
                        incrementableTask.start();
494
                }
495
        }
496

    
497
        /**
498
         * Devuelve el FilterPanel asociado al FilterListener
499
         * @return
500
         */
501
        public FilterPanel getFilterPanel() {
502
                return filterPanel;
503
        }
504

    
505
        /**
506
         * Acciones que se realizan al finalizar de crear los recortes de imagen.
507
         * Este m?todo es llamado por el thread TailRasterProcess al finalizar.
508
         */
509
        public void loadLayerInToc(String fileName) {
510
                if (!getFilterPanel().getRadioNewLayer().isSelected())
511
                        return;
512
                if(!new File(fileName).exists())
513
                        return;
514
                // seleccionamos la vista de gvSIG
515
                com.iver.cit.gvsig.project.documents.view.gui.View theView = null;
516
                try {
517
                        IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
518
                        for (int i = 0; i < allViews.length; i++) {
519
                                if (allViews[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View
520
                                                && PluginServices.getMDIManager().getWindowInfo((View) allViews[i])
521
                                                                .getTitle().equals(getFilterPanel().getViewName()))
522
                                        theView = (com.iver.cit.gvsig.project.documents.view.gui.View) allViews[i];
523
                        }
524
                        if (theView == null)
525
                                return;
526
                } catch (ClassCastException ex) {
527
                        // logger.error(PluginServices.getText(this,"cant_get_view "), ex);
528
                        return;
529
                }
530

    
531
                // Cargamos las capas
532
                theView.getMapControl().getMapContext().beginAtomicEvent();
533

    
534
                //Driver driver = LayerFactory.getDM().getDriver("gvSIG Raster Driver");
535
                int endIndex = fileName.lastIndexOf(".");
536
                if (endIndex < 0)
537
                        endIndex = fileName.length();
538
                FLayer lyr = null;
539
                try {
540
                        lyr = FLyrRasterSE.createLayer(fileName.substring(
541
                                        fileName.lastIndexOf(File.separator) + 1, endIndex),
542
                                        new File(fileName), theView.getMapControl().getProjection());
543
                } catch (LoadLayerException e) {
544
                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
545
                                        PluginServices.getText(this, "error_cargar_capa"));
546
                }
547
                theView.getMapControl().getMapContext().getLayers().addLayer(lyr);
548
                theView.getMapControl().getMapContext().endAtomicEvent();
549

    
550
                getFilterPanel().getLayer().getMapContext().invalidate();
551
        }
552

    
553
        /*public void loadLayerInToc(IBuffer b, Extent e) {
554

555
                // seleccionamos la vista de gvSIG
556
                com.iver.cit.gvsig.project.documents.view.gui.View theView = null;
557
                try {
558
                        IWindow[] allViews = PluginServices.getMDIManager().getAllWindows();
559
                        for (int i = 0; i < allViews.length; i++) {
560
                                if (allViews[i] instanceof com.iver.cit.gvsig.project.documents.view.gui.View
561
                                                && PluginServices.getMDIManager().getWindowInfo((View) allViews[i])
562
                                                                .getTitle().equals(getFilterPanel().getViewName()))
563
                                        theView = (com.iver.cit.gvsig.project.documents.view.gui.View) allViews[i];
564
                        }
565
                        if (theView == null)
566
                                return;
567
                } catch (ClassCastException ex) {
568
                        // logger.error(PluginServices.getText(this,"cant_get_view "), ex);
569
                        return;
570
                }
571

572
                // Cargamos las capas
573
                theView.getMapControl().getMapContext().beginAtomicEvent();
574

575
                //Driver driver = LayerFactory.getDM().getDriver("gvSIG Raster Driver");
576
                MemoryRasterDriverParam d = new MemoryRasterDriverParam(b, e);
577

578
                FLayer lyr = null;
579
                try {
580
                        lyr = FLyrRasterSE.createLayer("capa", d, theView.getMapControl().getProjection());
581
                } catch (LoadLayerException e1) {
582
                        JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(),
583
                                        PluginServices.getText(this, "error_cargar_capa"));
584
                }
585
                theView.getMapControl().getMapContext().getLayers().addLayer(lyr);
586
                theView.getMapControl().getMapContext().endAtomicEvent();
587

588
                getFilterPanel().getLayer().getMapContext().invalidate();
589
        }*/
590
}
591

    
592
/**
593
 * @author Nacho Brodin <brodin_ign@gva.es>
594
 * Filtro para el selector de formatos de escritura
595
 */
596
class WriterFilter extends javax.swing.filechooser.FileFilter {
597
        private String                                filter;
598

    
599
        public WriterFilter(String fil) {
600
                this.filter = fil;
601
        }
602

    
603
        public boolean accept(File f) {
604
                return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter);
605
        }
606

    
607
        public String getDescription() {
608
                return "." + filter;
609
        }
610
}