Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extRemoteSensing / src / org / gvsig / remotesensing / decisiontrees / gui / listener / DecisionTreePanelListener.java @ 20872

History | View | Annotate | Download (22.2 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
         *
3
         * Copyright (C) 2006 Instituto de Desarrollo Regional 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
         * For more information, contact:
20
         *
21
         *  Generalitat Valenciana
22
         *   Conselleria d'Infraestructures i Transport
23
         *   Av. Blasco Iba?ez, 50
24
         *   46010 VALENCIA
25
         *   SPAIN
26
         *
27
         *      +34 963862235
28
         *   gvsig@gva.es
29
         *      www.gvsig.gva.es
30
         *
31
         *    or
32
         *
33
         *   Instituto de Desarrollo Regional (Universidad de Castilla La-Mancha)
34
         *   Campus Universitario s/n
35
         *   02071 Alabacete
36
         *   Spain
37
         *
38
         *   +34 967 599 200
39
         */
40
package org.gvsig.remotesensing.decisiontrees.gui.listener;
41

    
42
import java.awt.Color;
43
import java.awt.Component;
44
import java.awt.event.ActionEvent;
45
import java.awt.event.ActionListener;
46
import java.awt.event.MouseEvent;
47
import java.awt.event.MouseListener;
48
import java.io.File;
49
import java.io.FileNotFoundException;
50
import java.io.FileReader;
51
import java.io.FileWriter;
52
import java.io.IOException;
53
import java.util.ArrayList;
54
import java.util.HashMap;
55
import java.util.Iterator;
56

    
57
import javax.swing.JFileChooser;
58
import javax.swing.JOptionPane;
59
import javax.swing.filechooser.FileFilter;
60

    
61
import org.exolab.castor.xml.MarshalException;
62
import org.exolab.castor.xml.Marshaller;
63
import org.exolab.castor.xml.ValidationException;
64
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
65
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
66
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
67
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
68
import org.gvsig.raster.IProcessActions;
69
import org.gvsig.raster.RasterLibrary;
70
import org.gvsig.raster.RasterProcess;
71
import org.gvsig.raster.buffer.BufferFactory;
72
import org.gvsig.raster.buffer.RasterBuffer;
73
import org.gvsig.raster.dataset.GeoRasterWriter;
74
import org.gvsig.raster.dataset.InvalidSetViewException;
75
import org.gvsig.raster.dataset.io.RasterDriverException;
76
import org.gvsig.raster.datastruct.ColorItem;
77
import org.gvsig.raster.grid.filter.FilterTypeException;
78
import org.gvsig.raster.util.ExtendedFileFilter;
79
import org.gvsig.raster.util.RasterNotLoadException;
80
import org.gvsig.raster.util.RasterToolsUtil;
81
import org.gvsig.remotesensing.RemoteSensingUtils;
82
import org.gvsig.remotesensing.decisiontrees.DecisionTreeNode;
83
import org.gvsig.remotesensing.decisiontrees.DecisionTreeProcess;
84
import org.gvsig.remotesensing.decisiontrees.gui.ClassEditorDialog;
85
import org.gvsig.remotesensing.decisiontrees.gui.DecisionTreePanel;
86
import org.gvsig.remotesensing.decisiontrees.gui.ExpressionEditorDialog;
87
import org.gvsig.remotesensing.gridmath.NoAssignedVarsException;
88
import org.gvsig.remotesensing.gui.beans.OptionsPanel;
89
import org.jgraph.graph.DefaultGraphCell;
90
import org.nfunk.jep.Variable;
91

    
92
import com.iver.andami.PluginServices;
93
import com.iver.andami.Utilities;
94
import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard;
95
import com.iver.cit.gvsig.fmap.layers.FLayer;
96
import com.iver.cit.gvsig.fmap.layers.FLayers;
97
import com.iver.utiles.XMLEntity;
98
import com.iver.utiles.xmlEntity.generate.XmlTag;
99

    
100
/**
101
 * Listener del panel de ?rboles de decisi?n.
102
 * 
103
 * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es)
104
 *
105
 */
106
public class DecisionTreePanelListener implements ButtonsPanelListener, ActionListener, MouseListener, IProcessActions {
107
        
108
        DecisionTreePanel decisionTreePanel = null;
109

    
110
        public DecisionTreePanelListener(DecisionTreePanel decisionTreePanel) {
111
                this.decisionTreePanel = decisionTreePanel;
112
        }
113

    
114
        public void actionPerformed(ActionEvent e) {
115
                if (e.getSource()==decisionTreePanel.getAddMenuItem()){
116
                        DefaultGraphCell cell = decisionTreePanel.getSelectedCell();
117
                        DecisionTreeNode node = (DecisionTreeNode)cell.getUserObject();
118
                        int classId = node.getClassID();
119
                        node.setChildren();
120
                        node.getLeftChild().setClassID(classId);
121
                        node.getRightChild().setClassID(decisionTreePanel.generateClassId());
122
                        decisionTreePanel.reloadGraph();
123
                }
124
                
125
                else if (e.getSource()==decisionTreePanel.getDeleteMenuItem()){
126
                        DefaultGraphCell cell = decisionTreePanel.getSelectedCell();
127
                        DecisionTreeNode node = (DecisionTreeNode)cell.getUserObject();
128
                        if(cell!=decisionTreePanel.getJGraph().getRoots()[0]){
129
                                node.deleteChildren();
130
                                decisionTreePanel.cleanClassColors();
131
                                node.setClassID(decisionTreePanel.generateClassId());
132
                                decisionTreePanel.reloadGraph();
133
                        }
134
                }
135
                
136
                else if (e.getSource()==decisionTreePanel.getExecuteMenuItem()){
137
                        DefaultGraphCell cell = decisionTreePanel.getSelectedCell();
138
                        DecisionTreeNode node = (DecisionTreeNode)cell.getUserObject();
139
                        executeTree(node);
140
                }
141
                
142
                else if (e.getSource()==decisionTreePanel.getCloseMenuItem()){
143
                        close();
144
                }
145
                
146
                else if (e.getSource()==decisionTreePanel.getSaveMenuItem()){
147
                        JFileChooser openFileChooser;
148
                        openFileChooser = new JFileChooser();                        
149
                        openFileChooser.setEnabled(false);
150
                        openFileChooser.addChoosableFileFilter(new TreeFileFilter());
151
                        int returnVal = openFileChooser.showSaveDialog(decisionTreePanel);
152
                if (returnVal == JFileChooser.APPROVE_OPTION) {
153
                        String fileName = openFileChooser.getSelectedFile().toString();
154
                        if (!fileName.endsWith(".tree")){
155
                                fileName = fileName + ".tree";
156
                        }
157
                        File file = new File(fileName);
158
                        if (file.exists()){
159
                                int resp = JOptionPane.showConfirmDialog(
160
                                                        (Component) PluginServices.getMainFrame(),PluginServices.getText(this,"fichero_ya_existe_seguro_desea_guardarlo"),
161
                                                        PluginServices.getText(this,"guardar"), JOptionPane.YES_NO_OPTION);
162
                                        if (resp != JOptionPane.YES_OPTION) {
163
                                                return;
164
                                        }
165
                        }
166
                                FileWriter writer;
167
                                try {
168
                                        writer = new FileWriter(fileName);
169
                                        Marshaller m = new Marshaller(writer);
170
                                    m.setEncoding("ISO-8859-1");
171
                                    m.marshal(decisionTreePanel.getDecisionTree().getXMLEntity().getXmlTag());
172
                                } catch (IOException e1) {
173
                                        // TODO Auto-generated catch block
174
                                        e1.printStackTrace();
175
                                } catch (MarshalException e1) {
176
                                        // TODO Auto-generated catch block
177
                                        e1.printStackTrace();
178
                                } catch (ValidationException e2) {
179
                                        // TODO Auto-generated catch block
180
                                        e2.printStackTrace();
181
                                }
182
                }
183
                }
184
                
185
                else if (e.getSource()==decisionTreePanel.getLoadMenuItem()){
186
                        JFileChooser openFileChooser;
187
                        openFileChooser = new JFileChooser();                        
188
                        openFileChooser.setEnabled(false);
189
                        openFileChooser.addChoosableFileFilter(new TreeFileFilter());
190
                        int returnVal = openFileChooser.showOpenDialog(decisionTreePanel);
191
                if (returnVal == JFileChooser.APPROVE_OPTION) {
192
                    File inFile = openFileChooser.getSelectedFile();
193
                    try {
194
                                        FileReader fileReader = new FileReader(inFile);
195
                                        XmlTag xmlTag = (XmlTag) XmlTag.unmarshal(fileReader);
196
                                        XMLEntity xmlDecisionTree = new XMLEntity(xmlTag);
197
                                        decisionTreePanel.getDecisionTree().setXMLEntity(xmlDecisionTree);
198
                                        decisionTreePanel.reloadGraph();
199
                                } catch (FileNotFoundException e2) {
200
                                        // TODO Auto-generated catch block
201
                                        e2.printStackTrace();
202
                                } catch (MarshalException e1) {
203
                                        // TODO Auto-generated catch block
204
                                        e1.printStackTrace();
205
                                } catch (ValidationException e3) {
206
                                        // TODO Auto-generated catch block
207
                                        e3.printStackTrace();
208
                                }
209
                }
210
                }
211
                
212
                else if (e.getSource()==decisionTreePanel.getImportMenuItem()){
213
                        
214
                }
215
                
216
                else if (e.getSource()==decisionTreePanel.getExportMenuItem()){
217
                        
218
                }
219
        }
220

    
221
        public void actionButtonPressed(ButtonsPanelEvent e) {
222
//                 Al pulsar Aceptar o Aplicar se ejecuta el aceptar del panel
223
                if (e.getButton() == ButtonsPanel.BUTTON_APPLY) {
224
                        executeTree(decisionTreePanel.getDecisionTree().getRoot());
225
                }
226

    
227
                // Al pulsar Cancelar la ventana se cierra y se refresca la vista
228
                if (e.getButton() == ButtonsPanel.BUTTON_CLOSE) {
229
                        close();
230
                }
231
        }
232
        
233
        private void close() {
234
                try {
235
                        PluginServices.getMDIManager().closeWindow(decisionTreePanel.getDecisionTreeDialog());
236
                } catch (ArrayIndexOutOfBoundsException e) {
237
                        //Si la ventana no se puede eliminar no hacemos nada
238
                }
239
                
240
        }
241

    
242
        public void mouseClicked(MouseEvent e) {
243
                // TODO Auto-generated method stub
244

    
245
        }
246

    
247
        public void mouseEntered(MouseEvent e) {
248
                // TODO Auto-generated method stub
249

    
250
        }
251

    
252
        public void mouseExited(MouseEvent e) {
253
                // TODO Auto-generated method stub
254

    
255
        }
256

    
257
        public void mousePressed(MouseEvent e) {
258
                if (e.getButton() ==  MouseEvent.BUTTON3){
259
                        showPopupMenu(e);
260
                }
261
                if (e.getClickCount() == 2) {
262
                        editCell(e);
263
                }
264
        }
265

    
266
        public void mouseReleased(MouseEvent e) {
267
                // TODO Auto-generated method stub
268

    
269
        }
270

    
271
        private void editCell(MouseEvent e) {
272
                int x = e.getX();
273
                int y = e.getY();
274
                DefaultGraphCell cell = (DefaultGraphCell) decisionTreePanel.getJGraph().getFirstCellForLocation(x, y);
275
                if (cell!=null){
276
                        decisionTreePanel.setSelectedCell(cell);
277
                        Object userObject = cell.getUserObject();
278
                        if(userObject instanceof DecisionTreeNode){
279
                                DecisionTreeNode node = (DecisionTreeNode)userObject;
280
                                
281
                                if(!node.isFinal()){
282
                                        ExpressionEditorDialog expressionEditorDialog = new ExpressionEditorDialog(600,250,decisionTreePanel);
283
                                        expressionEditorDialog.getExpressionEditorPanel().getCalculatorPanel().setPersistentVarTable(
284
                                                        decisionTreePanel.getDecisionTree().getVariablesTable());
285
                                        PluginServices.getMDIManager().addWindow(expressionEditorDialog);
286
                                }
287
                                else{
288
                                        ClassEditorDialog classEditorDialog = new ClassEditorDialog(250,100,decisionTreePanel);
289
                                        PluginServices.getMDIManager().addWindow(classEditorDialog);
290
                                }
291
                                decisionTreePanel.reloadGraph();
292
                        }
293
                }
294
        }
295
        
296
        private void showPopupMenu(MouseEvent e) {
297
                int x = e.getX();
298
                int y = e.getY();
299
                DefaultGraphCell cell = (DefaultGraphCell) decisionTreePanel.getJGraph().getFirstCellForLocation(x, y);
300
                if (cell != null){
301
                        if(cell.getUserObject() instanceof DecisionTreeNode){
302
                                decisionTreePanel.getDeleteMenuItem().setVisible(true);
303
                                decisionTreePanel.getAddMenuItem().setVisible(true);
304
                                decisionTreePanel.getExecuteMenuItem().setVisible(true);
305
                                if(cell == decisionTreePanel.getJGraph().getRoots()[0])
306
                                        decisionTreePanel.getDeleteMenuItem().setVisible(false);
307
                                if(!((DecisionTreeNode)cell.getUserObject()).isFinal())
308
                                        decisionTreePanel.getAddMenuItem().setVisible(false);
309
                                else{
310
                                        decisionTreePanel.getDeleteMenuItem().setVisible(false);
311
                                        decisionTreePanel.getExecuteMenuItem().setVisible(false);
312
                                }
313
                                decisionTreePanel.setSelectedCell(cell);
314
                                decisionTreePanel.getJPopupMenu().show(e.getComponent(),  x, y);
315
                        }
316
                }
317
        }
318
        
319
        /**
320
         * Ejecuta el ?rbol desde el nodo indicado.
321
         * 
322
         * @param root Nodo que se considera raiz en la ejecuci?n de ?rbol.
323
         */
324
        private void executeTree(DecisionTreeNode root){
325
                //Comprobar que todas laa variables est?n asignadas:
326
                boolean allVarsAsigned = true;
327
                for (Iterator iter = decisionTreePanel.getDecisionTree().getVariablesTable().keySet().iterator(); iter.hasNext();) {
328
                        String varName = (String) iter.next();
329
                        String layerName = (String) decisionTreePanel.getDecisionTree().getVariablesTable().get(varName); 
330
                        if (layerName==null || layerName.equals("")){
331
                                allVarsAsigned = false;
332
                                break;
333
                        }
334
                }
335
                
336
                if (allVarsAsigned){
337
                        if (!root.hasError()){
338
                                
339
                                int nBand;
340
                                String layerBand;
341
                                String layerName;
342
                                FLyrRasterSE rasterLayer;
343
                                
344
                                String path = getFileSelected();
345
                                if (path == null)
346
                                        return;                
347
                                FLayers layers = decisionTreePanel.getView().getModel().getMapContext().getLayers();
348
                                // Extent de salida personalizado.
349
                                OptionsPanel outputOptionsPanel = decisionTreePanel.getOutputOptionsPanel();
350
                                if (outputOptionsPanel.getRButtom2().isSelected()){
351
                                        try{
352
                                                outputOptionsPanel.getOutputExtent().setXRange(Double.parseDouble(outputOptionsPanel.getJTextRangoX1().getText()),Double.parseDouble(outputOptionsPanel.getJTextRangoX2().getText()));
353
                                                outputOptionsPanel.getOutputExtent().setYRange(Double.parseDouble(outputOptionsPanel.getJTextRangoY1().getText()), Double.parseDouble(outputOptionsPanel.getJTextRangoY2().getText()));
354
                                                outputOptionsPanel.getOutputExtent().setCellSizeX(Double.parseDouble(outputOptionsPanel.getJTextCellSizeX().getText()));
355
                                                outputOptionsPanel.getOutputExtent().setCellSizeY(Double.parseDouble(outputOptionsPanel.getJTextCellSizeY().getText()));
356
                                        }catch (NumberFormatException  e) {
357
                                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "invalid_number"), this);
358
                                                return;
359
                                        }
360
                                }
361
                                //        Extent de salida a partir de una capa.
362
                                else if(outputOptionsPanel.getRButtom4().isSelected()){
363
                                        try {
364
                                                FLayer layer = layers.getLayer(outputOptionsPanel.getJComboCapas().getSelectedIndex());        
365
                                                outputOptionsPanel.getOutputExtent().setXRange(layer.getFullExtent().getMinX(),
366
                                                                layer.getFullExtent().getMaxX());
367
                                                outputOptionsPanel.getOutputExtent().setYRange(layer.getFullExtent().getMinY(),
368
                                                                layer.getFullExtent().getMaxY());
369
                                                outputOptionsPanel.getOutputExtent().setCellSizeX(Double.parseDouble(outputOptionsPanel.getJTextCellSizeX().getText()));
370
                                                outputOptionsPanel.getOutputExtent().setCellSizeY(Double.parseDouble(outputOptionsPanel.getJTextCellSizeY().getText()));        
371
                                                outputOptionsPanel.extentHasChanged();
372
                                        } catch (Exception ex) {
373
                                                ex.printStackTrace();
374
                                        }
375
                                }
376
                                
377
                                // Crear un HashMap con los rasterbuffers de entrada indexados por el nombre de variable.
378
                                RasterBuffer valor=null;
379
                                HashMap buffers = new HashMap();
380
                                for (Iterator iter = decisionTreePanel.getDecisionTree().getVariablesTable().keySet().iterator(); iter.hasNext();) {
381
                                        String varName = (String) iter.next();
382
                                        
383
                                        layerBand =  (String)decisionTreePanel.getDecisionTree().getVariablesTable().get(varName);
384
                                        layerName = layerBand.substring(0,layerBand.indexOf("["));
385
                                        nBand = Integer.valueOf(layerBand.substring(layerBand.lastIndexOf("Band")+4,layerBand.lastIndexOf("]"))).intValue();
386
                                        rasterLayer = (FLyrRasterSE)layers.getLayer(layerName);                
387
                                        BufferFactory bufferFactory= rasterLayer.getBufferFactory();
388
                                        
389
                                        double minX=0,minY=0,maxX=0,maxY=0;
390
                                        minX= outputOptionsPanel.getOutputExtent().getMin().getX();
391
                                        minY= outputOptionsPanel.getOutputExtent().getMin().getY();
392
                                        maxX= outputOptionsPanel.getOutputExtent().getMax().getX();
393
                                        maxY =outputOptionsPanel.getOutputExtent().getMax().getY();
394
                                        
395
                                        try {
396
                                                        bufferFactory.setAdjustToExtent(false);
397
                                                        bufferFactory.setDrawableBands(new int[]{nBand-1});
398
                                                        bufferFactory.setAreaOfInterest(minX,minY,maxX,maxY,outputOptionsPanel.getOutputExtent().getNX(),
399
                                                                        outputOptionsPanel.getOutputExtent().getNY());
400
                                                        valor=(RasterBuffer) bufferFactory.getRasterBuf();
401
                                                
402
                                        } catch (ArrayIndexOutOfBoundsException e) {
403
                                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_writer"), this, e);
404
                                        } catch (InvalidSetViewException e) {
405
                                                        e.printStackTrace();
406
                                        } catch (InterruptedException e) {
407
                                                Thread.currentThread().interrupt();
408
                                        } catch (RasterDriverException e) {
409
                                                e.printStackTrace();
410
                                        }
411
                                
412
                                        buffers.put(varName,new Object[]{valor,new Integer(valor.getDataType())});
413
                                }        
414
                                //Ejecutar el proceso:
415
                                /*
416
                                String viewName = PluginServices.getMDIManager().getWindowInfo(decisionTreePanel.getView()).getTitle();
417
                                DecisionTreeProcess decisionTreeProcess = new DecisionTreeProcess(root, buffers, outputOptionsPanel.getOutputExtent(),
418
                                                viewName, path);
419
                                IncrementableTask incrementableTask = new IncrementableTask(decisionTreeProcess);
420
                                decisionTreeProcess.setIncrementableTask(incrementableTask);
421
                                incrementableTask.showWindow();
422
                                decisionTreeProcess.start();
423
                                incrementableTask.start();
424
                                */        
425
                                
426
                                //*********************************
427
                                String viewName = PluginServices.getMDIManager().getWindowInfo(decisionTreePanel.getView()).getTitle();
428
                                
429
                                //Comprobar que est?n todas las variables asignadas
430
                                for (Iterator iter = root.getParser().getSymbolTable().values().iterator(); iter.hasNext();) {
431
                                        Variable variable = (Variable) iter.next();        
432
                                        if (!buffers.containsKey(variable.getName())){
433
                                                RasterToolsUtil.messageBoxError(PluginServices.getText(this,"variables_sin_asignar"),this);
434
                                                return;
435
                                        }                
436
                                }
437
                                
438
                                RasterProcess decisionTreeProcess = new DecisionTreeProcess();
439
                                decisionTreeProcess.setActions(this);
440
                                decisionTreeProcess.addParam("tree", root);
441
                                decisionTreeProcess.addParam("varsTable", buffers);
442
                                decisionTreeProcess.addParam("viewName", viewName);
443
                                decisionTreeProcess.addParam("filename", path);
444
                                decisionTreeProcess.addParam("resultExtent", outputOptionsPanel.getOutputExtent());
445
                                
446
                                decisionTreeProcess.start();
447
                        }else{
448
                                RasterToolsUtil.messageBoxError(PluginServices.getText(this, "bad_expresion_in_tree"), this);
449
                        }
450
                }
451
        }
452
        
453
        /**
454
         * Devuelve la ruta del fichero donde se va a guardar, en caso de guardarse
455
         * en memoria, calcula el nombre sin preguntar y devuelve la ruta.
456
         * @return string con la ruta de salida
457
         */
458
        public String getFileSelected() {
459
                String path = "";
460
                if (decisionTreePanel.getOutputOptionsPanel().getRadioFile().isSelected()) {
461
                        JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath());
462
                        chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
463
                        //A?adimos las extensiones que hayan sido registradas en el driver
464
                        String[] extList = GeoRasterWriter.getDriversExtensions();
465
                        for(int i=0;i<extList.length;i++)
466
                                chooser.addChoosableFileFilter(new ExtendedFileFilter(extList[i]));
467

    
468
                        if (chooser.showOpenDialog(decisionTreePanel.getOutputOptionsPanel()) != JFileChooser.APPROVE_OPTION)
469
                                return null;
470

    
471
                        FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
472
                        ExtendedFileFilter fileFilter = (ExtendedFileFilter) chooser.getFileFilter();
473
                        path = fileFilter.getNormalizedFilename(chooser.getSelectedFile());
474
                } else {
475
                        String file = decisionTreePanel.getOutputOptionsPanel().getJTextNombreCapa().getText();
476
                        path = Utilities.createTempDirectory() + File.separator + decisionTreePanel.getOutputOptionsPanel().getJTextNombreCapa().getText() + ".tif";
477
                        if(file.compareTo(RasterLibrary.getOnlyLayerName()) == 0) 
478
                                RasterLibrary.usesOnlyLayerName();
479
                        decisionTreePanel.getOutputOptionsPanel().updateNewLayerText();
480
                }
481
                
482
                return path;
483
        }
484
        
485
        /**
486
         * @return string con el path del fichero de salida
487
         */
488
/*        public String getFileSelected() {
489
                String path = "";
490
                if (decisionTreePanel.getOutputOptionsPanel().getRadioFile().isSelected()) {
491
                        JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath());
492
                        chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
493

494
                        //A?adimos las extensiones que hayan sido registradas en el driver
495
                        String[] extList = GeoRasterWriter.getDriversExtensions();
496
                        for(int i=0;i<extList.length;i++)
497
                                chooser.addChoosableFileFilter(new WriterFilter(extList[i]));
498

499
                        if (chooser.showOpenDialog(decisionTreePanel) != JFileChooser.APPROVE_OPTION)
500
                                return null;
501

502
                        String fName = chooser.getSelectedFile().toString();
503
                        String ext = ((WriterFilter)chooser.getFileFilter()).getDescription();
504

505
                        ext = ext.toLowerCase().substring(ext.lastIndexOf(".") + 1, ext.length());
506

507
                        if ((fName != null) && !fName.equals(""))
508
                                if (!fName.endsWith("." + ext))
509
                                        fName = fName + "." + ext;
510

511
                        FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
512
                        path = fName;
513
                } else {
514
                        path = Utilities.createTempDirectory() + File.separator + decisionTreePanel.getOutputOptionsPanel().getJTextNombreCapa().getText() + ".tif";
515
                        decisionTreePanel.getOutputOptionsPanel().updateNewLayerText();
516
                }
517
                return path;
518
        }*/
519

    
520
        public void end(Object fileName) {
521
                String viewName = PluginServices.getMDIManager().getWindowInfo(decisionTreePanel.getView()).getTitle();
522
                try {
523
                        FLayer lyr = RasterToolsUtil.loadLayer(viewName,(String)fileName,null);
524
                        /*
525
                         * Asignar la leyenda a la nueva capa:
526
                         */
527
                        ArrayList colorItems = new ArrayList();
528
                        ColorItem colorItem = null;
529
                        HashMap classColors = decisionTreePanel.getDecisionTree().getColorTable();
530
                        for (Iterator iter = classColors.keySet().iterator(); iter.hasNext();) {
531
                                Integer classId = (Integer) iter.next();
532
                                colorItem = new ColorItem();
533
                                colorItem.setColor((Color)classColors.get(classId));
534
                                colorItem.setNameClass("Class "+classId.toString());
535
                                colorItem.setValue(classId.intValue());
536
                                colorItems.add(colorItem);
537
                        }
538
                        
539
                        RemoteSensingUtils.setLeyend(lyr, colorItems);
540
                        
541
                } catch (RasterNotLoadException e) {
542
                        RasterToolsUtil.messageBoxError("error_load_layer", this, e);
543
                } catch (FilterTypeException e) {
544
                        RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_leyend"), this, e);
545
                }
546
        }
547
        
548
        
549
        public void interrupted() {
550
        }
551
}
552

    
553
/**
554
 * @author Nacho Brodin <brodin_ign@gva.es>
555
 * Filtro para el selector de formatos de escritura
556
 */
557
class WriterFilter extends javax.swing.filechooser.FileFilter {
558
        private String                                filter;
559

    
560
        public WriterFilter(String fil) {
561
                this.filter = fil;
562
        }
563

    
564
        public boolean accept(File f) {
565
                return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter);
566
        }
567

    
568
        public String getDescription() {
569
                return "." + filter;
570
        }
571
}
572

    
573
/**
574
 * Filtro para el selector de expresiones matem?ticas.
575
 * @author Alejandro Mu?oz (alejandro.munoz@uclm.es)
576
 *
577
 */
578
class TreeFileFilter extends FileFilter {
579

    
580
        final static String exp = "tree";
581
        public boolean accept(File f) {
582
                if (f.isDirectory()) {
583
           return true;
584
       }
585
       String s = f.getName();
586
       int i = s.lastIndexOf('.');
587

    
588
       if (i > 0 &&  i < s.length() - 1) {
589
           String extension = s.substring(i+1).toLowerCase();
590
           if (exp.equals(extension)){
591
                   return true;
592
           } else {
593
               return false;
594
           }
595
       }
596
       return false;
597
        }
598

    
599
        public String getDescription() {
600
                 return "Archivos .tree";
601
        }
602
        
603
}