Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / rastertools / filter / ui / NewOrSaveLayerPanel.java @ 19564

History | View | Annotate | Download (11.2 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 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.ui;
20

    
21
import java.awt.Dimension;
22
import java.awt.GridBagConstraints;
23
import java.awt.GridBagLayout;
24
import java.awt.Insets;
25
import java.awt.event.ItemEvent;
26
import java.awt.event.ItemListener;
27
import java.io.File;
28

    
29
import javax.swing.BorderFactory;
30
import javax.swing.ButtonGroup;
31
import javax.swing.JFileChooser;
32
import javax.swing.JLabel;
33
import javax.swing.JPanel;
34
import javax.swing.JRadioButton;
35
import javax.swing.JTextField;
36

    
37
import org.gvsig.raster.RasterLibrary;
38
import org.gvsig.raster.dataset.GeoRasterWriter;
39
import org.gvsig.raster.util.ExtendedFileFilter;
40
import org.gvsig.raster.util.PropertyEvent;
41
import org.gvsig.raster.util.PropertyListener;
42

    
43
import com.iver.andami.PluginServices;
44
import com.iver.andami.Utilities;
45
import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard;
46
/**
47
 * Panel para unificar las propiedades de generacion de capas nuevas en ficheros
48
 * o solo en visualizacion.
49
 * 
50
 * @version 10/03/2008
51
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
52
 */
53
public class NewOrSaveLayerPanel extends JPanel implements PropertyListener {
54
        private static final long serialVersionUID = 3921564127360827156L;
55
        private JRadioButton jRBOnlyView       = null;
56
        private JRadioButton jRBNewLayer       = null;
57
        private JRadioButton jRBFileGenerate   = null;
58
        private JRadioButton jRBOpenMemory     = null;
59

    
60
        private JPanel       jPNameFile        = null;
61
        private JLabel       labelFilename     = null;
62
        private JTextField   filenameTextField = null;
63
        private boolean      compress          = false;
64

    
65
        /**
66
         * Constructor de un NewOrSaveLayerPanel
67
         */
68
        public NewOrSaveLayerPanel() {
69
                initialize();
70
                translate();
71
        }
72

    
73
        /**
74
         * Seccion donde ir?n todas las traducciones invariables del componente
75
         */
76
        private void translate() {
77
                getRadioOnlyView().setText(PluginServices.getText(this, "solo_visualizacion"));
78
                getRadioNewLayer().setText(PluginServices.getText(this, "capa_nueva"));
79
                getRadioFileGenerate().setText(PluginServices.getText(this, "generar_fichero"));
80
                getRadioOpenMemory().setText(PluginServices.getText(this, "abrir_memoria"));
81
                getLabelFilename().setText(PluginServices.getText(this, "nombre_capa") + ":");
82
        }
83
        
84
        private void initialize() {
85
                ButtonGroup buttonGroup1;
86
                ButtonGroup buttonGroup2;
87
                GridBagConstraints gridBagConstraints;
88

    
89
                setLayout(new GridBagLayout());
90
                
91
                buttonGroup1 = new ButtonGroup();
92
                buttonGroup1.add(getRadioOnlyView());
93

    
94
                gridBagConstraints = new GridBagConstraints();
95
                gridBagConstraints.gridx = 0;
96
                gridBagConstraints.gridy = 0;
97
                gridBagConstraints.anchor = GridBagConstraints.WEST;
98
                gridBagConstraints.insets = new Insets(3, 3, 3, 3);
99
                add(getRadioOnlyView(), gridBagConstraints);
100

    
101
                buttonGroup1.add(getRadioNewLayer());
102

    
103
                gridBagConstraints = new GridBagConstraints();
104
                gridBagConstraints.gridx = 0;
105
                gridBagConstraints.gridy = 1;
106
                gridBagConstraints.anchor = GridBagConstraints.WEST;
107
                gridBagConstraints.insets = new Insets(3, 3, 3, 3);
108
                add(getRadioNewLayer(), gridBagConstraints);
109
                
110
                JPanel jPanel2 = new JPanel();
111
                jPanel2.setLayout(new GridBagLayout());
112

    
113
                jPanel2.setBorder(BorderFactory.createTitledBorder(""));
114
                buttonGroup2 = new ButtonGroup();
115
                buttonGroup2.add(getRadioFileGenerate());
116
                gridBagConstraints = new GridBagConstraints();
117
                gridBagConstraints.anchor = GridBagConstraints.WEST;
118
                gridBagConstraints.insets = new Insets(3, 3, 3, 3);
119
                gridBagConstraints.weightx = 1.0;
120
                jPanel2.add(getRadioFileGenerate(), gridBagConstraints);
121

    
122
                buttonGroup2.add(getRadioOpenMemory());
123
                gridBagConstraints = new GridBagConstraints();
124
                gridBagConstraints.gridx = 0;
125
                gridBagConstraints.gridy = 1;
126
                gridBagConstraints.anchor = GridBagConstraints.WEST;
127
                gridBagConstraints.insets = new Insets(3, 3, 3, 3);
128
                jPanel2.add(getRadioOpenMemory(), gridBagConstraints);
129
                
130
                gridBagConstraints = new GridBagConstraints();
131
                gridBagConstraints.gridx = 0;
132
                gridBagConstraints.gridy = 2;
133
                gridBagConstraints.anchor = GridBagConstraints.WEST;
134
                gridBagConstraints.insets = new Insets(3, 3, 3, 3);
135
                add(jPanel2, gridBagConstraints);
136
        }
137
        
138
        /**
139
         * Poner los estados de los RadioButton en caso de que cambien de valor
140
         * @param evt
141
         */
142
        private void jRBNewLayerStateChanged(ItemEvent evt) {
143
                if (getRadioNewLayer().getSelectedObjects() != null) {
144
                        getRadioFileGenerate().setEnabled(true);
145
                        getRadioOpenMemory().setEnabled(true);
146
                        if (getRadioOpenMemory().getSelectedObjects() != null)
147
                                setFilenameEnabled(true);
148
                        else
149
                                setFilenameEnabled(false);
150
                } else {
151
                        getRadioFileGenerate().setEnabled(false);
152
                        getRadioOpenMemory().setEnabled(false);
153
                        setFilenameEnabled(false);
154
                }
155
        }
156

    
157
        /**
158
         * Poner los estados de los RadioButton en caso de que cambien de valor
159
         * @param evt
160
         */
161
        private void jRBOpenMemoryStateChanged(ItemEvent evt) {
162
                if (getRadioOpenMemory().getSelectedObjects() != null) {
163
                        setFilenameEnabled(true);
164
                } else {
165
                        setFilenameEnabled(false);
166
                }
167
        }
168
        
169
        /**
170
         * Especifica si se generara solo en la vista o se guardara en un fichero
171
         * @param enabled
172
         */
173
        public void setOnlyView(boolean enabled) {
174
                getRadioOnlyView().setSelected(enabled);
175
        }
176

    
177
        /**
178
         * Devuelve el JRadioButton de Abrir en memoria
179
         * @return
180
         */
181
        public JRadioButton getRadioOpenMemory() {
182
                if (jRBOpenMemory == null) {
183
                        jRBOpenMemory = new JRadioButton();
184
                        jRBOpenMemory.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
185
                        jRBOpenMemory.setMargin(new Insets(0, 0, 0, 0));
186

    
187
                        jRBOpenMemory.addItemListener(new ItemListener() {
188
                                public void itemStateChanged(ItemEvent evt) {
189
                                        jRBOpenMemoryStateChanged(evt);
190
                                }
191
                        });
192
                        jRBOpenMemory.setSelected(true);
193
                }
194
                return jRBOpenMemory;
195
        }
196
        
197
        /**
198
         * Devuelve el JRadioButton de generar fichero
199
         * @return
200
         */
201
        public JRadioButton getRadioFileGenerate() {
202
                if (jRBFileGenerate == null) {
203
                        jRBFileGenerate = new JRadioButton();
204
                        jRBFileGenerate.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
205
                        jRBFileGenerate.setMargin(new Insets(0, 0, 0, 0));
206
                }
207
                return jRBFileGenerate;
208
        }
209
        
210
        /**
211
         * Devuelve el JRadioButton de Solo vista
212
         * @return
213
         */
214
        public JRadioButton getRadioOnlyView() {
215
                if (jRBOnlyView == null) {
216
                        jRBOnlyView = new JRadioButton();
217
                        jRBOnlyView.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
218
                        jRBOnlyView.setMargin(new Insets(0, 0, 0, 0));
219
                }
220
                return jRBOnlyView;
221
        }
222
        
223
        /**
224
         * Devuelve el JRadioButton de nueva capa
225
         * @return
226
         */
227
        public JRadioButton getRadioNewLayer() {
228
                if (jRBNewLayer == null) {
229
                        jRBNewLayer = new JRadioButton();
230
                        jRBNewLayer.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
231
                        jRBNewLayer.setMargin(new Insets(0, 0, 0, 0));
232
                        jRBNewLayer.addItemListener(new ItemListener() {
233
                                public void itemStateChanged(ItemEvent evt) {
234
                                        jRBNewLayerStateChanged(evt);
235
                                }
236
                        });
237
                        jRBNewLayer.setSelected(true);
238
                }
239
                return jRBNewLayer;
240
        }
241
        
242
        /**
243
         * This method initializes filenameTextField
244
         *
245
         * @return javax.swing.JTextField
246
         */
247
        public JTextField getFilenameTextField() {
248
                if (filenameTextField == null) {
249
                        filenameTextField = new JTextField();
250
                        filenameTextField.setPreferredSize(new Dimension(150, filenameTextField.getPreferredSize().height));
251
                        RasterLibrary.addOnlyLayerNameListener(this);
252
                }
253
                return filenameTextField;
254
        }
255

    
256
        public JLabel getLabelFilename() {
257
                if (labelFilename == null) {
258
                        labelFilename = new JLabel();
259
                }
260
                return labelFilename;
261
        }
262

    
263
        /**
264
         * This method initializes jPNameFile
265
         *
266
         * @return javax.swing.JPanel
267
         */
268
        public JPanel getFileNamePanel() {
269
                if (jPNameFile == null) {
270
                        jPNameFile = new JPanel();
271
                        jPNameFile.add(getLabelFilename());
272
                        jPNameFile.add(getFilenameTextField());
273
                        updateNewLayerText();
274
                }
275
                return jPNameFile;
276
        }
277
        
278
        
279
        /**
280
         * Especificar el nombre de la nueva capa para el recuadro de texto asignando
281
         * en cada llamada un nombre consecutivo.
282
         */
283
        public void updateNewLayerText() {
284
                getFilenameTextField().setText(RasterLibrary.getOnlyLayerName());
285
        }
286
        
287
        /**
288
         * Establece si esta habilitado o no el cuadro de texto de entrada de nombre de
289
         * fichero
290
         * @param value
291
         */
292
        public void setFilenameEnabled(boolean value) {
293
                getFilenameTextField().setEnabled(value);
294
                getLabelFilename().setEnabled(value);
295
        }
296

    
297
        /**
298
         * Cuando alguien ha cambiado la propiedad del nombre de la 
299
         * capa se actualiza autom?ticamente
300
         */
301
        public void actionValueChanged(PropertyEvent e) {
302
                updateNewLayerText();
303
        }
304
        
305
        /**
306
         * Asigna un valor para el par?metro que informa de si el raster de salida hay
307
         * que comprimirlo o no. Este valor es necesario cuando el raster de salida 
308
         * es mayor de 4G ya que no se puede crear un tiff tan grande.
309
         * @param compress true para comprimir el raster de salida y false para no hacerlo.
310
         */
311
        public void setCompress(boolean compress) {
312
                this.compress = compress;
313
        }
314
        
315
        /**
316
         * Devuelve la ruta del fichero donde se va a guardar, en caso de guardarse
317
         * en memoria, calcula el nombre sin preguntar y devuelve la ruta.
318
         * @return
319
         */
320
        public String getFileSelected() {
321
                String path = "";
322
                if (getRadioFileGenerate().isSelected()) {
323
                        JFileChooser chooser = new JFileChooser(FileOpenWizard.getLastPath());
324
                        chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
325

    
326
                        // A?adimos las extensiones que hayan sido registradas en el driver
327
                        String[] extList = GeoRasterWriter.getDriversExtensions();
328
                        for (int i = 0; i < extList.length; i++)
329
                                chooser.addChoosableFileFilter(new ExtendedFileFilter(extList[i]));
330

    
331
                        if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION)
332
                                return null;
333

    
334
                        FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
335

    
336
                        ExtendedFileFilter fileFilter = (ExtendedFileFilter) chooser.getFileFilter();
337
                        path = fileFilter.getNormalizedFilename(chooser.getSelectedFile());
338
                } else {
339

    
340
                        String file = getFilenameTextField().getText();
341
                        if (file.compareTo(RasterLibrary.getOnlyLayerName()) == 0)
342
                                RasterLibrary.usesOnlyLayerName();
343

    
344
                        if (!compress)
345
                                path = Utilities.createTempDirectory() + File.separator + file + ".tif";
346
                        else
347
                                path = Utilities.createTempDirectory() + File.separator + file + ".jp2";
348
                        updateNewLayerText();
349
                }
350
                return path;
351
        }
352

    
353
}