Statistics
| Revision:

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

History | View | Annotate | Download (20.4 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.RasterProcess;
70
import org.gvsig.raster.buffer.BufferFactory;
71
import org.gvsig.raster.buffer.RasterBuffer;
72
import org.gvsig.raster.dataset.GeoRasterWriter;
73
import org.gvsig.raster.dataset.InvalidSetViewException;
74
import org.gvsig.raster.dataset.io.RasterDriverException;
75
import org.gvsig.raster.datastruct.ColorItem;
76
import org.gvsig.raster.grid.filter.FilterTypeException;
77
import org.gvsig.raster.util.RasterNotLoadException;
78
import org.gvsig.raster.util.RasterToolsUtil;
79
import org.gvsig.remotesensing.RemoteSensingUtils;
80
import org.gvsig.remotesensing.decisiontrees.DecisionTreeNode;
81
import org.gvsig.remotesensing.decisiontrees.DecisionTreeProcess;
82
import org.gvsig.remotesensing.decisiontrees.gui.ClassEditorDialog;
83
import org.gvsig.remotesensing.decisiontrees.gui.DecisionTreePanel;
84
import org.gvsig.remotesensing.decisiontrees.gui.ExpressionEditorDialog;
85
import org.gvsig.remotesensing.gridmath.NoAssignedVarsException;
86
import org.gvsig.remotesensing.gui.beans.OptionsPanel;
87
import org.jgraph.graph.DefaultGraphCell;
88
import org.nfunk.jep.Variable;
89

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

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

    
108
        public DecisionTreePanelListener(DecisionTreePanel decisionTreePanel) {
109
                this.decisionTreePanel = decisionTreePanel;
110
        }
111

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

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

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

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

    
243
        }
244

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

    
248
        }
249

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

    
253
        }
254

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

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

    
267
        }
268

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

    
459
                        //A?adimos las extensiones que hayan sido registradas en el driver
460
                        String[] extList = GeoRasterWriter.getDriversExtensions();
461
                        for(int i=0;i<extList.length;i++)
462
                                chooser.addChoosableFileFilter(new WriterFilter(extList[i]));
463

    
464
                        if (chooser.showOpenDialog(decisionTreePanel) != JFileChooser.APPROVE_OPTION)
465
                                return null;
466

    
467
                        String fName = chooser.getSelectedFile().toString();
468
                        String ext = ((WriterFilter)chooser.getFileFilter()).getDescription();
469

    
470
                        ext = ext.toLowerCase().substring(ext.lastIndexOf(".") + 1, ext.length());
471

    
472
                        if ((fName != null) && !fName.equals(""))
473
                                if (!fName.endsWith("." + ext))
474
                                        fName = fName + "." + ext;
475

    
476
                        FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
477
                        path = fName;
478
                } else {
479
                        path = Utilities.createTempDirectory() + File.separator + decisionTreePanel.getOutputOptionsPanel().getJTextNombreCapa().getText() + ".tif";
480
                        decisionTreePanel.getOutputOptionsPanel().updateNewLayerText();
481
                }
482
                return path;
483
        }
484

    
485
        public void end(Object fileName) {
486
                String viewName = PluginServices.getMDIManager().getWindowInfo(decisionTreePanel.getView()).getTitle();
487
                try {
488
                        FLayer lyr = RasterToolsUtil.loadLayer(viewName,(String)fileName,null);
489
                        /*
490
                         * Asignar la leyenda a la nueva capa:
491
                         */
492
                        ArrayList colorItems = new ArrayList();
493
                        ColorItem colorItem = null;
494
                        HashMap classColors = decisionTreePanel.getDecisionTree().getColorTable();
495
                        for (Iterator iter = classColors.keySet().iterator(); iter.hasNext();) {
496
                                Integer classId = (Integer) iter.next();
497
                                colorItem = new ColorItem();
498
                                colorItem.setColor((Color)classColors.get(classId));
499
                                colorItem.setNameClass("Class "+classId.toString());
500
                                colorItem.setValue(classId.intValue());
501
                                colorItems.add(colorItem);
502
                        }
503
                        
504
                        RemoteSensingUtils.setLeyend(lyr, colorItems);
505
                        
506
                } catch (RasterNotLoadException e) {
507
                        RasterToolsUtil.messageBoxError("error_load_layer", this, e);
508
                } catch (FilterTypeException e) {
509
                        RasterToolsUtil.messageBoxError(PluginServices.getText(this, "error_adding_leyend"), this, e);
510
                }
511
        }
512
        
513
        
514
        public void interrupted() {
515
        }
516
}
517

    
518
/**
519
 * @author Nacho Brodin <brodin_ign@gva.es>
520
 * Filtro para el selector de formatos de escritura
521
 */
522
class WriterFilter extends javax.swing.filechooser.FileFilter {
523
        private String                                filter;
524

    
525
        public WriterFilter(String fil) {
526
                this.filter = fil;
527
        }
528

    
529
        public boolean accept(File f) {
530
                return f.isDirectory() || f.getName().toLowerCase().endsWith("." + filter);
531
        }
532

    
533
        public String getDescription() {
534
                return "." + filter;
535
        }
536
}
537

    
538
/**
539
 * Filtro para el selector de expresiones matem?ticas.
540
 * @author Alejandro Mu?oz (alejandro.munoz@uclm.es)
541
 *
542
 */
543
class TreeFileFilter extends FileFilter {
544

    
545
        final static String exp = "tree";
546
        public boolean accept(File f) {
547
                if (f.isDirectory()) {
548
           return true;
549
       }
550
       String s = f.getName();
551
       int i = s.lastIndexOf('.');
552

    
553
       if (i > 0 &&  i < s.length() - 1) {
554
           String extension = s.substring(i+1).toLowerCase();
555
           if (exp.equals(extension)){
556
                   return true;
557
           } else {
558
               return false;
559
           }
560
       }
561
       return false;
562
        }
563

    
564
        public String getDescription() {
565
                 return "Archivos .tree";
566
        }
567
        
568
}