Statistics
| Revision:

root / trunk / extensions / extRemoteSensing / src / org / gvsig / remotesensing / principalcomponents / gui / PrincipalComponentPanel.java @ 22761

History | View | Annotate | Download (13.1 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

    
41
package org.gvsig.remotesensing.principalcomponents.gui;
42

    
43
import info.clearthought.layout.TableLayout;
44

    
45
import java.awt.BorderLayout;
46
import java.awt.Dimension;
47
import java.awt.FlowLayout;
48
import java.awt.event.ActionEvent;
49
import java.awt.event.ActionListener;
50
import java.awt.event.FocusEvent;
51
import java.awt.event.FocusListener;
52
import java.io.File;
53

    
54
import javax.swing.BorderFactory;
55
import javax.swing.ComboBoxModel;
56
import javax.swing.DefaultComboBoxModel;
57
import javax.swing.ImageIcon;
58
import javax.swing.JButton;
59
import javax.swing.JOptionPane;
60
import javax.swing.JPanel;
61
import javax.swing.JScrollPane;
62
import javax.swing.JTable;
63
import javax.swing.border.CompoundBorder;
64
import javax.swing.border.EmptyBorder;
65
import javax.swing.border.TitledBorder;
66

    
67
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
68
import org.gvsig.gui.beans.buttonspanel.ButtonsPanel;
69
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelEvent;
70
import org.gvsig.gui.beans.buttonspanel.ButtonsPanelListener;
71
import org.gvsig.gui.beans.defaultbuttonspanel.DefaultButtonsPanel;
72
import org.gvsig.raster.IProcessActions;
73
import org.gvsig.raster.RasterLibrary;
74
import org.gvsig.remotesensing.principalcomponents.PCStatisticsProcess;
75

    
76
import com.iver.andami.PluginServices;
77
import com.iver.andami.Utilities;
78
import com.iver.andami.ui.mdiManager.IWindow;
79
import com.iver.andami.ui.mdiManager.WindowInfo;
80
import com.iver.cit.gvsig.fmap.MapContext;
81
import com.iver.cit.gvsig.fmap.layers.FLayers;
82
import com.iver.cit.gvsig.project.documents.view.gui.View;
83
import com.iver.utiles.swing.JComboBox;
84

    
85
/**
86
 * Clase que define la interfaz para  la selecci?n de par?metros para el an?lisis de
87
 * componentes principales. Para la imagen seleccionada se toman las bandas marcadas para el 
88
 * c?lculo de estad?sticas como matriz de varianza-covarianza, autovalores y autovectores.
89
 * 
90
 * @author Alejandro Mu?oz Sanchez (alejandro.munoz@uclm.es)
91
 * @author Diego Guerrero Sevilla (diego.guerrero@uclm.es) 
92
 * @version 22/10/2007  
93
 */
94

    
95
public class PrincipalComponentPanel   extends DefaultButtonsPanel implements IWindow,ActionListener,FocusListener,ButtonsPanelListener, IProcessActions {
96

    
97
        private static final long serialVersionUID = 1L;
98
        private JPanel southPanel;
99
        private JPanel centerPanel;
100
        private BandTableFormat mModeloTabla;
101
        private JPanel panelTodos;
102
        private JButton todos;
103
        private JButton ninguno;
104
        private int wPanel=325;
105
        private int hPanel=350;
106
        private JComboBox comboCapas;
107
        private JPanel  panelImagen;
108
        private JTable jTableBandas;
109
        private JScrollPane scrollbandas;
110
        
111
        private MapContext m_MapContext;
112
        private FLayers layers;
113
        private View view;
114
        private String fileName = null;
115
        private PCStatisticsProcess statisticsProcess = null;
116

    
117

    
118
        /**
119
         * Constructor
120
         * @param vista vista actual de la aplicacion.
121
         */
122
        public PrincipalComponentPanel(View vista) {
123
                super(ButtonsPanel.BUTTONS_ACCEPTCANCEL   );
124
            view = vista;
125
                m_MapContext = vista.getModel().getMapContext();
126
                layers = m_MapContext.getLayers();
127
                Inicializar();
128
        }
129
        
130
        
131
        /**
132
         * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
133
         */
134
        public WindowInfo getWindowInfo() {
135
                WindowInfo m_viewinfo = new WindowInfo(WindowInfo.PALETTE | WindowInfo.RESIZABLE);
136
                //Establecer el tamao del formulario
137
                m_viewinfo.setWidth(wPanel);
138
                m_viewinfo.setHeight(hPanel);
139
                //Establecer el ttulo del formulario
140
                m_viewinfo.setTitle(PluginServices.getText(this,"principal_components"));
141
                //punto X de la pantalla donde se situa
142
                m_viewinfo.setX(300);
143
                return m_viewinfo;
144
        }
145

    
146
        /**
147
         * Inicializaci?n del cuadro de dialogo.
148
         */
149
         private void Inicializar(){
150
                 
151
                BorderLayout bd=new BorderLayout();
152
                this.setLayout(bd);
153
                TitledBorder topBorder = BorderFactory.createTitledBorder((PluginServices.getText(this,"")));
154
                topBorder.setTitlePosition(TitledBorder.TOP);
155
                this.setBorder(new CompoundBorder(topBorder,new EmptyBorder(10,10,10,10)));
156
                this.add(getCenterPanel(), BorderLayout.CENTER);
157
                this.add(getSouthPanel(),BorderLayout.SOUTH);
158
                getBandas();
159
                this.addButtonPressedListener(this);
160
                                
161
                }
162
                  
163
         
164
         /**
165
          * @return panel con los botones aceptar y cancelar
166
          */
167
         public JPanel getSouthPanel() {
168
                if (southPanel==null){
169
                        southPanel=new JPanel();
170
                        FlowLayout f= new FlowLayout();
171
                        southPanel.setLayout(f);
172
                }
173
        return southPanel;
174
         }
175
         
176

    
177
        /**
178
        * @return panel con  panel imagen, tabla de bandas y botones de selecci?n
179
        */
180
        public JPanel getCenterPanel() {
181
                        
182
                if (centerPanel==null){
183
                        centerPanel=new JPanel();        
184
                        TitledBorder topBorder = BorderFactory.createTitledBorder((PluginServices.getText(this,"seleccion_banda")));
185
                        topBorder.setTitlePosition(TitledBorder.TOP);
186
                          
187
                        BorderLayout bd=new BorderLayout();
188
                        JPanel p=new JPanel();
189
                        p.setPreferredSize(new Dimension(275,200));
190
                        p.setLayout(bd);
191
                        p.setBorder(new CompoundBorder(topBorder,new EmptyBorder(5,5,5,5)));
192
                        p.add(getScrollVariables(),BorderLayout.CENTER);
193
                        p.add(getPanelTodos(),BorderLayout.SOUTH);
194
                        centerPanel.add(getPanelImagen());
195
                        centerPanel.add(p);
196
                                                
197
                }
198
                return centerPanel;        
199
        }
200
        
201
         /**
202
         * @return panel con el combo de selecci?n de imagen.
203
         */
204
        public JPanel getPanelImagen() {
205
                
206
                if (panelImagen==null){
207
                        panelImagen=new JPanel();
208
                        TitledBorder topBorder = BorderFactory.createTitledBorder((PluginServices.getText(this,"imagen")));
209
                        topBorder.setTitlePosition(TitledBorder.TOP);
210
                        panelImagen.setBorder(new CompoundBorder(topBorder,new EmptyBorder(2,2,2,2)));
211
                        JPanel p= new JPanel();
212
                                        
213
                        TableLayout thisLayout = new TableLayout(new double[][] {
214
                                        { 250},         
215
                                        {TableLayout.PREFERRED}}); 
216
                                                 
217
                        p.setLayout(thisLayout);
218
                        p.setPreferredSize(new Dimension(250,30));
219
                        p.add(getComboCapas(),"0,0");
220
                        panelImagen.add(p);
221
                }
222
                return panelImagen;
223
        }
224
         
225
        
226
         /**
227
         * @return panel con  botones de seleccion todos/ninguno
228
         */
229
         public JPanel getPanelTodos(){
230
                 
231
                 if (panelTodos==null){
232
                         panelTodos= new JPanel();
233
                         JPanel p = new JPanel();
234
                         p.setLayout(new FlowLayout(FlowLayout.RIGHT,1,1));
235
                         p.add(getTodos());
236
                         p.add(getNinguno());
237
                         p.setPreferredSize(new Dimension(240,30));
238
                         panelTodos.add(p);         
239
                 }         
240
                 return panelTodos;
241
                 
242
                }
243
         
244
         
245
         /**
246
          * @return combo con el nombre de las im?genes cargadas
247
          */
248
        public JComboBox getComboCapas() {
249
                                
250
                if (comboCapas==null){
251
                        ComboBoxModel jComboBoxLayersModel = new 
252
                DefaultComboBoxModel(getLayerNames());
253
                        comboCapas = new JComboBox();
254
                        comboCapas.setModel(jComboBoxLayersModel);
255
                        comboCapas.setEnabled(true);
256
                        comboCapas.addActionListener(this);        
257
                        }        
258
                return comboCapas;
259
        }
260
         
261
         
262

    
263
        
264
        
265
         /**
266
         * @return scroll con tabla de bandas de imagen seleccionada
267
         */
268
        public JScrollPane getScrollVariables() {
269
                        
270
                if (scrollbandas==null){
271
                        scrollbandas=new JScrollPane();                                
272
                }
273
                getTableBands().getColumn("").setPreferredWidth(30);
274
                scrollbandas.setViewportView(getTableBands());
275
                scrollbandas.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
276
                return scrollbandas;        
277
        }
278
         
279

    
280
         /**
281
         * @return array de String con los nombre de las capas cargadas
282
         */
283
         private String[] getLayerNames() {
284
                   
285
                 int i, capasraster=0;
286
                 for (i = 0; i < layers.getLayersCount(); i++) {                      
287
                        if (layers.getLayer(i)instanceof  FLyrRasterSE)
288
                                capasraster++; 
289
                 }
290
                 // Solo se toman las capas raster. 
291
                 String[] sNames = new String[capasraster];
292
                 capasraster=0;
293
                 for (i = 0; i < layers.getLayersCount(); i++) {                      
294
                         if (layers.getLayer(i)instanceof FLyrRasterSE){
295
                                        sNames[capasraster] =layers.getLayer(i).getName();
296
                                        capasraster++;        
297
                         }   
298
                 }
299
                 return sNames;        
300
         }
301

    
302
         
303
         
304
         /**
305
          * @return JTable con bandas de la imagen
306
          */
307
         private JTable getTableBands(){         
308
                 if (jTableBandas==null){
309
                         jTableBandas=new JTable(getModeloTabla());
310
                 }
311
                 return jTableBandas;
312
         }
313
         
314
        
315
         /**
316
         * @see BandTableFormat
317
         * @return modelo de tabla BandTableFormat
318
         */
319
        public BandTableFormat getModeloTabla() {
320
                 if(mModeloTabla==null){
321
                         mModeloTabla=new BandTableFormat(); 
322
                 } 
323
                 return mModeloTabla;        
324
        }
325
         
326

    
327
        /**
328
         * Toma las Bandas de la imagen seleccionada en el combo Imagen
329
         */
330
        public void getBandas(){
331
        
332
             // Antes de insertar se borra lo anterior
333
                 getModeloTabla().LimpiarLista();
334
                 FLyrRasterSE rasterLayer= (FLyrRasterSE)layers.getLayer((String)getComboCapas().getSelectedItem());
335
                 String bandas[]=new String[rasterLayer.getBandCount()];        
336
                 if (layers.getLayer((String)getComboCapas().getSelectedItem()) instanceof  FLyrRasterSE ){
337
                                for (int j=0; j<rasterLayer.getBandCount(); j++){
338
                                        String s=(PluginServices.getText(this,"banda"))+(j+1);
339
                                        bandas[j]=s;
340
                                }        
341
                 }         
342
                // Insertar las bandas el la tabla 
343
                for (int i=0;i<bandas.length;i++)
344
                        getModeloTabla().addRow(bandas[i],true); 
345
                getTableBands().updateUI();
346
         
347
         }
348
         
349
         
350
        public void focusGained(FocusEvent arg0) {
351
                        // TODO Auto-generated method stub                
352
        }
353

    
354
                
355
        public void focusLost(FocusEvent arg0) {
356
                        // TODO Auto-generated method stub                
357
        }
358

    
359

    
360
        /**
361
         * @return JButton seleccion ninguna banda
362
         */
363
        public JButton getNinguno() {
364
                if (ninguno==null){                        
365
                                ImageIcon icono = new ImageIcon(PrincipalComponentCalculusPanel.class.getClassLoader().getResource("images/table_delete.png"));
366
                                ninguno = new JButton(icono);
367
                                ninguno.addActionListener(this);
368
                        }
369
                return ninguno;        
370
        }
371

    
372

    
373
        /**
374
         * @return JButton seleccion todas las bandas
375
         */        
376
        public JButton getTodos() {        
377
                if (todos==null){
378
                        ImageIcon icono = new ImageIcon(PrincipalComponentCalculusPanel.class.getClassLoader().getResource("images/table.png"));
379
                        todos = new JButton(icono);
380
                        todos.addActionListener(this);        
381
                }        
382
                return todos;        
383
        }
384
                        
385
                
386
        
387
        public void accept(){
388
                
389
                if (getModeloTabla().getNumSelected()>0){
390
                        FLyrRasterSE rasterLayer= (FLyrRasterSE)layers.getLayer((String)getComboCapas().getSelectedItem());
391
                        PluginServices.getMDIManager().closeWindow(this);
392
                        statisticsProcess = new PCStatisticsProcess();
393
                        statisticsProcess.addParam("layer",rasterLayer);
394
                        statisticsProcess.addParam("selectedBands",getModeloTabla().getSeleccionadas());
395
                        statisticsProcess.addParam("view", view);
396
                        
397
                        fileName = Utilities.createTempDirectory() + File.separator;
398
                        fileName = fileName + RasterLibrary.getOnlyLayerName() + ".tif";
399
                        RasterLibrary.usesOnlyLayerName();
400
                        
401
                        statisticsProcess.addParam("fileName",fileName);
402
                        
403
                        statisticsProcess.setActions(this);
404
                        statisticsProcess.start();        
405
                }
406
                else{
407
                        
408
                        JOptionPane.showMessageDialog(null,
409
                        PluginServices.getText(this,"no_bandas"), PluginServices.getText(this,"principal_components"),
410
                        JOptionPane.WARNING_MESSAGE);        
411
                }
412
                
413
        }
414
        
415
        /**
416
         * acciones al cerrar
417
         */
418
        public void close(){
419
                try {
420
                        PluginServices.getMDIManager().closeWindow(this);
421
                } catch (ArrayIndexOutOfBoundsException ex) {
422
                // Si la ventana no se puede eliminar no hacemos nada
423
                }
424
        }
425
        
426
        
427
        /*
428
         * (non-Javadoc)
429
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
430
         */        
431
        public void actionPerformed(ActionEvent e) {
432
                
433
                        
434
                        // Check Seleccionar Todo
435
                        if(e.getSource()==getTodos()){
436
                                        getModeloTabla().seleccionarTodas();
437
                                        updateUI();
438
                        }
439
                        if(e.getSource()==getNinguno()){
440
                                        
441
                                        getModeloTabla().seleccionarNinguna();
442
                                        updateUI();
443
                        }
444
                        
445
                        if (e.getSource()==getComboCapas()){
446
                                // Actualizar tabla de bandas  
447
                                getBandas();        
448
                        }        
449
        }
450
        
451
        
452
        public void actionButtonPressed(ButtonsPanelEvent e) {
453
//                 Bot?n de Aceptar
454
                if (e.getButton() == ButtonsPanel.BUTTON_ACCEPT) {
455
                        accept();
456
                        close();
457
                }
458

    
459
                // Bot?n de Aplicar
460
                if (e.getButton() == ButtonsPanel.BUTTON_APPLY) {
461
                        accept();
462
                }
463

    
464
                // Bot?n de Cerrar
465
                if (e.getButton() == ButtonsPanel.BUTTON_CANCEL) {
466
                        close();
467
                }        
468
        }
469

    
470

    
471
        public void end(Object param) {
472
                PrincipalComponentCalculusPanel altPrincipalComponentCalculusPanel = new PrincipalComponentCalculusPanel(view,statisticsProcess);
473
                altPrincipalComponentCalculusPanel.setFilename(fileName);
474
                PluginServices.getMDIManager().addWindow(altPrincipalComponentCalculusPanel);
475
                
476
        }
477

    
478

    
479
        public void interrupted() {
480
                // TODO Auto-generated method stub
481
                
482
        }
483

    
484
        
485
}
486