Statistics
| Revision:

root / trunk / extensions / extRasterTools-SE / src / org / gvsig / raster / beans / createlayer / NewLayerPanel.java @ 27367

History | View | Annotate | Download (10 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.raster.beans.createlayer;
20

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

    
31
import javax.swing.BorderFactory;
32
import javax.swing.ButtonGroup;
33
import javax.swing.JFileChooser;
34
import javax.swing.JLabel;
35
import javax.swing.JPanel;
36
import javax.swing.JRadioButton;
37
import javax.swing.JTextField;
38
import javax.swing.filechooser.FileFilter;
39

    
40
import org.gvsig.fmap.raster.layers.FLyrRasterSE;
41
import org.gvsig.raster.RasterLibrary;
42
import org.gvsig.raster.dataset.GeoRasterWriter;
43
import org.gvsig.raster.dataset.io.RasterDriverException;
44
import org.gvsig.raster.hierarchy.IRasterGeoOperations;
45
import org.gvsig.raster.util.ExtendedFileFilter;
46
import org.gvsig.raster.util.PropertyEvent;
47
import org.gvsig.raster.util.PropertyListener;
48
import org.gvsig.raster.util.RasterToolsUtil;
49

    
50
import com.iver.andami.PluginServices;
51
import com.iver.andami.Utilities;
52
import com.iver.andami.ui.mdiManager.IWindow;
53
import com.iver.cit.gvsig.addlayer.fileopen.FileOpenWizard;
54
/**
55
 * 
56
 * @version 18/06/2008
57
 * @author BorSanZa - Borja S?nchez Zamorano (borja.sanchez@iver.es)
58
 */
59
public class NewLayerPanel implements PropertyListener {
60
        private static final long serialVersionUID = -8569485642371687008L;
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 FLyrRasterSE lyr                = null;
69
        private boolean      onlyReprojectables = false;
70
        
71
        /**
72
         * Constructor de un CreateLayerPanel
73
         */
74
        public NewLayerPanel(FLyrRasterSE 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(100, filenameTextField.getPreferredSize().height));
166
                        RasterLibrary.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(RasterLibrary.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(FileOpenWizard.getLastPath());
250
                        chooser.setDialogTitle(PluginServices.getText(this, "seleccionar_fichero"));
251

    
252
                        // A?adimos las extensiones que hayan sido registradas en el driver
253
                        ArrayList extList = new ArrayList();
254
                        try {
255
                                extList = GeoRasterWriter.getExtensionsSupported(((IRasterGeoOperations) lyr).getDataType()[0], ((IRasterGeoOperations) lyr).getBandCount(), onlyReprojectables);
256
                        } catch (RasterDriverException e2) {
257
                                RasterToolsUtil.messageBoxError("error_extensiones_soportadas", chooser, e2);
258
                                return null;
259
                        }
260
                        
261
                        FileFilter selected = null;
262
                        for (int i = 0; i < extList.size(); i++) {
263
                                FileFilter filter = new ExtendedFileFilter((String) extList.get(i));
264
                                if (extList.get(i).equals("tif")) {
265
                                        selected = filter;
266
                                }
267
                                chooser.addChoosableFileFilter(filter);
268
                        }
269
                        if (selected != null)
270
                                chooser.setFileFilter(selected);
271

    
272
                        // Cargamos el panel de propiedades en el selector
273
                        chooser.setAcceptAllFileFilterUsed(false);
274
                        
275
                        IWindow w = PluginServices.getMDIManager().getActiveWindow();
276
                        
277
                        if (!(w instanceof Component))
278
                                w = null;
279

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

    
283
                        FileOpenWizard.setLastPath(chooser.getSelectedFile().getPath().substring(0, chooser.getSelectedFile().getPath().lastIndexOf(File.separator)));
284

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

    
289
                        String file = getFilenameTextField().getText();
290
                        if (file.compareTo(RasterLibrary.getOnlyLayerName()) == 0)
291
                                RasterLibrary.usesOnlyLayerName();
292

    
293
                        if (!compress)
294
                                path = Utilities.createTempDirectory() + File.separator + file + ".tif";
295
                        else
296
                                path = Utilities.createTempDirectory() + File.separator + file + ".jp2";
297
                        updateNewLayerText();
298
                }
299
                return path;
300
        }
301
        
302
        /**
303
         * Cuando alguien ha cambiado la propiedad del nombre de la 
304
         * capa se actualiza autom?ticamente
305
         */
306
        public void actionValueChanged(PropertyEvent e) {
307
                updateNewLayerText();
308
        }
309
        
310
        /**
311
         * @param onlyReprojectables the onlyReprojectables to set
312
         */
313
        public void setOnlyReprojectables(boolean onlyReprojectables) {
314
                this.onlyReprojectables = onlyReprojectables;
315
        }
316
}