Statistics
| Revision:

gvsig-raster / org.gvsig.raster / trunk / org.gvsig.raster / org.gvsig.raster.app / org.gvsig.raster.app.common / src / main / java / org / gvsig / raster / mainplugin / beans / createlayer / NewLayerPanel.java @ 2861

History | View | Annotate | Download (9.77 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22
package org.gvsig.raster.mainplugin.beans.createlayer;
23

    
24
import java.awt.Component;
25
import java.awt.Dimension;
26
import java.awt.GridBagConstraints;
27
import java.awt.GridBagLayout;
28
import java.awt.Insets;
29
import java.awt.event.ItemEvent;
30
import java.awt.event.ItemListener;
31
import java.io.File;
32
import java.util.ArrayList;
33

    
34
import javax.swing.BorderFactory;
35
import javax.swing.ButtonGroup;
36
import javax.swing.JLabel;
37
import javax.swing.JPanel;
38
import javax.swing.JRadioButton;
39
import javax.swing.JTextField;
40
import javax.swing.filechooser.FileFilter;
41

    
42
import org.gvsig.andami.PluginServices;
43
import org.gvsig.andami.Utilities;
44
import org.gvsig.andami.ui.mdiManager.IWindow;
45
import org.gvsig.fmap.dal.coverage.RasterLocator;
46
import org.gvsig.fmap.dal.coverage.exception.RasterDriverException;
47
import org.gvsig.fmap.dal.coverage.util.FileUtils;
48
import org.gvsig.fmap.dal.coverage.util.PropertyEvent;
49
import org.gvsig.fmap.dal.coverage.util.PropertyListener;
50
import org.gvsig.gui.beans.swing.JFileChooser;
51
import org.gvsig.raster.fmap.layers.FLyrRaster;
52
import org.gvsig.raster.swing.RasterSwingLibrary;
53
import org.gvsig.raster.util.ExtendedFileFilter;
54

    
55
/**
56
 *
57
 * @version 18/06/2008
58
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
59
 */
60
public class NewLayerPanel implements PropertyListener {
61
        private JPanel       panel              = null;
62
        private JRadioButton jRBFileGenerate    = null;
63
        private JRadioButton jRBOpenMemory      = null;
64
        private JTextField   filenameTextField  = null;
65
        private JLabel       labelFilename      = null;
66
        private JPanel       panelNameFile      = null;
67
        private boolean      compress           = false;
68
        private FLyrRaster   lyr                = null;
69
        protected FileUtils  fileUtil           = RasterLocator.getManager().getFileUtils();
70
        
71
        /**
72
         * Constructor de un CreateLayerPanel
73
         */
74
        public NewLayerPanel(FLyrRaster lyr) {
75
                this.lyr = lyr;
76
                initialize();
77
                translate();
78
        }
79

    
80
        /**
81
         * Devuelve el panel principal
82
         * @return
83
         */
84
        public JPanel getJPanel() {
85
                if (panel == null) {
86
                        panel = new JPanel();
87
                }
88
                return panel;
89
        }
90

    
91
        private void initialize() {
92
                ButtonGroup buttonGroup2;
93
                GridBagConstraints gridBagConstraints;
94

    
95
                getJPanel().setLayout(new GridBagLayout());
96

    
97
                getJPanel().setBorder(BorderFactory.createTitledBorder(""));
98
                buttonGroup2 = new ButtonGroup();
99
                buttonGroup2.add(getRadioFileGenerate());
100
                gridBagConstraints = new GridBagConstraints();
101
                gridBagConstraints.anchor = GridBagConstraints.WEST;
102
                gridBagConstraints.insets = new Insets(3, 3, 3, 3);
103
                gridBagConstraints.weightx = 1.0;
104
                getJPanel().add(getRadioFileGenerate(), gridBagConstraints);
105

    
106
                buttonGroup2.add(getRadioOpenMemory());
107
                gridBagConstraints = new GridBagConstraints();
108
                gridBagConstraints.gridx = 0;
109
                gridBagConstraints.gridy = 1;
110
                gridBagConstraints.anchor = GridBagConstraints.WEST;
111
                gridBagConstraints.insets = new Insets(3, 3, 3, 3);
112
                getJPanel().add(getRadioOpenMemory(), gridBagConstraints);
113
        }
114

    
115
        /**
116
         * Seccion donde ir?n todas las traducciones invariables del componente
117
         */
118
        private void translate() {
119
                getRadioFileGenerate().setText(PluginServices.getText(this, "generar_fichero"));
120
                getRadioOpenMemory().setText(PluginServices.getText(this, "abrir_memoria"));
121
                getLabelFilename().setText(PluginServices.getText(this, "nombre_capa") + ":");
122
        }
123

    
124
        /**
125
         * Devuelve el JRadioButton de generar fichero
126
         * @return
127
         */
128
        public JRadioButton getRadioFileGenerate() {
129
                if (jRBFileGenerate == null) {
130
                        jRBFileGenerate = new JRadioButton();
131
                        jRBFileGenerate.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
132
                        jRBFileGenerate.setMargin(new Insets(0, 0, 0, 0));
133
                }
134
                return jRBFileGenerate;
135
        }
136

    
137
        /**
138
         * Devuelve el JRadioButton de Abrir en memoria
139
         * @return
140
         */
141
        public JRadioButton getRadioOpenMemory() {
142
                if (jRBOpenMemory == null) {
143
                        jRBOpenMemory = new JRadioButton();
144
                        jRBOpenMemory.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
145
                        jRBOpenMemory.setMargin(new Insets(0, 0, 0, 0));
146

    
147
                        jRBOpenMemory.addItemListener(new ItemListener() {
148
                                public void itemStateChanged(ItemEvent evt) {
149
                                        jRBOpenMemoryStateChanged(evt);
150
                                }
151
                        });
152
                        jRBOpenMemory.setSelected(true);
153
                }
154
                return jRBOpenMemory;
155
        }
156

    
157
        /**
158
         * This method initializes filenameTextField
159
         *
160
         * @return javax.swing.JTextField
161
         */
162
        private JTextField getFilenameTextField() {
163
                if (filenameTextField == null) {
164
                        filenameTextField = new JTextField();
165
                        filenameTextField.setPreferredSize(new Dimension(150, filenameTextField.getPreferredSize().height));
166
                        fileUtil.addOnlyLayerNameListener(this);
167
                }
168
                return filenameTextField;
169
        }
170

    
171
        /**
172
         * This method initializes jPNameFile
173
         *
174
         * @return javax.swing.JPanel
175
         */
176
        public JPanel getFileNamePanel() {
177
                if (panelNameFile == null) {
178
                        panelNameFile = new JPanel();
179
                        panelNameFile.add(getLabelFilename());
180
                        panelNameFile.add(getFilenameTextField());
181
                        updateNewLayerText();
182
                }
183
                return panelNameFile;
184
        }
185

    
186
        private JLabel getLabelFilename() {
187
                if (labelFilename == null) {
188
                        labelFilename = new JLabel();
189
                }
190
                return labelFilename;
191
        }
192

    
193
        /**
194
         * Establece si esta habilitado o no el cuadro de texto de entrada de nombre de
195
         * fichero
196
         * @param value
197
         */
198
        public void setFilenameEnabled(boolean value) {
199
                getFilenameTextField().setEnabled(value);
200
                getLabelFilename().setEnabled(value);
201
        }
202

    
203
        /**
204
         * Poner los estados de los RadioButton en caso de que cambien de valor
205
         * @param evt
206
         */
207
        protected void jRBOpenMemoryStateChanged(ItemEvent evt) {
208
                if (getRadioOpenMemory().getSelectedObjects() != null) {
209
                        setFilenameEnabled(true);
210
                } else {
211
                        setFilenameEnabled(false);
212
                }
213
        }
214

    
215
        /**
216
         * Especificar el nombre de la nueva capa para el recuadro de texto asignando
217
         * en cada llamada un nombre consecutivo.
218
         */
219
        public void updateNewLayerText() {
220
                getFilenameTextField().setText(fileUtil.getOnlyLayerName());
221
        }
222

    
223
        /**
224
         * Establece el texto de la etiqueta del nombre de fichero
225
         * @param text
226
         */
227
        public void setLabelFilename(String text) {
228
                getLabelFilename().setText(text);
229
        }
230

    
231
        /**
232
         * Asigna un valor para el par?metro que informa de si el raster de salida hay
233
         * que comprimirlo o no. Este valor es necesario cuando el raster de salida
234
         * es mayor de 4G ya que no se puede crear un tiff tan grande.
235
         * @param compress true para comprimir el raster de salida y false para no hacerlo.
236
         */
237
        public void setCompress(boolean compress) {
238
                this.compress = compress;
239
        }
240

    
241
        /**
242
         * Devuelve la ruta del fichero donde se va a guardar, en caso de guardarse
243
         * en memoria, calcula el nombre sin preguntar y devuelve la ruta.
244
         * @return
245
         */
246
        public String getFileSelected() {
247
                String path = "";
248
                if (getRadioFileGenerate().isSelected()) {
249
                        JFileChooser chooser = new JFileChooser("NEW_LAYER_RASTER_PANEL", JFileChooser.getLastPath("NEW_LAYER_RASTER_PANEL", null));
250
                        chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
251

    
252
                        // A?adimos las extensiones que hayan sido registradas en el driver
253
                        ArrayList<String> extList = new ArrayList<String>();
254
                        try {
255
                                extList = RasterLocator.getManager().getProviderServices().getExtensionsSupported(
256
                                                        lyr.getDataStore().getDataType()[0], 
257
                                                        lyr.getDataStore().getBandCount());
258
                        } catch (RasterDriverException e2) {
259
                                RasterSwingLibrary.messageBoxError("error_extensiones_soportadas", chooser, e2);
260
                                return null;
261
                        }
262

    
263
                        FileFilter selected = null;
264
                        for (int i = 0; i < extList.size(); i++) {
265
                                FileFilter filter = new ExtendedFileFilter((String) extList.get(i));
266
                                if (extList.get(i).equals("tif")) {
267
                                        selected = filter;
268
                                }
269
                                chooser.addChoosableFileFilter(filter);
270
                        }
271
                        if (selected != null)
272
                                chooser.setFileFilter(selected);
273

    
274
                        // Cargamos el panel de propiedades en el selector
275
                        chooser.setAcceptAllFileFilterUsed(false);
276

    
277
                        IWindow w = PluginServices.getMDIManager().getActiveWindow();
278

    
279
                        if (!(w instanceof Component))
280
                                w = null;
281

    
282
                         if (chooser.showSaveDialog((Component) w) != JFileChooser.APPROVE_OPTION)
283
                                 return null;
284

    
285
                        JFileChooser.setLastPath("NEW_LAYER_RASTER_PANEL", chooser.getSelectedFile());
286

    
287
                        ExtendedFileFilter fileFilter = (ExtendedFileFilter) chooser.getFileFilter();
288
                        path = fileFilter.getNormalizedFilename(chooser.getSelectedFile());
289
                } else {
290

    
291
                        String file = getFilenameTextField().getText();
292
                        if (file.compareTo(fileUtil.getOnlyLayerName()) == 0)
293
                                fileUtil.usesOnlyLayerName();
294

    
295
                        if (!compress)
296
                                path = Utilities.createTempDirectory() + File.separator + file + ".tif";
297
                        else
298
                                path = Utilities.createTempDirectory() + File.separator + file + ".jp2";
299
                        updateNewLayerText();
300
                }
301
                return path;
302
        }
303

    
304
        /**
305
         * Cuando alguien ha cambiado la propiedad del nombre de la
306
         * capa se actualiza autom?ticamente
307
         */
308
        public void actionValueChanged(PropertyEvent e) {
309
                updateNewLayerText();
310
        }
311

    
312
}