Statistics
| Revision:

gvsig-raster / org.gvsig.raster / trunk / org.gvsig.raster / org.gvsig.raster.swing / org.gvsig.raster.swing.impl / src / main / java / org / gvsig / raster / swing / impl / newlayer / CreateNewLayerPanelImpl.java @ 1836

History | View | Annotate | Download (8.57 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.swing.impl.newlayer;
23

    
24
import java.awt.BorderLayout;
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.List;
33

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

    
42
import org.gvsig.i18n.Messages;
43
import org.gvsig.raster.swing.impl.openfile.OpenFileContainerImpl;
44
import org.gvsig.raster.swing.newlayer.CreateNewLayerPanel;
45
import org.gvsig.raster.swing.newlayer.FileNameManagement;
46
import org.gvsig.raster.swing.openfile.OpenFileContainer;
47

    
48
/**
49
 * Panel to create a new layer. This panel gives the option to select a file
50
 * or open in memory.
51
 * @author Nacho Brodin (nachobrodin@gmail.com)
52
 */
53
public class CreateNewLayerPanelImpl extends JPanel implements CreateNewLayerPanel {
54
        private static final long    serialVersionUID     = -8569485642371687008L;
55
        private JRadioButton         jRBFileGenerate      = null;
56
        private JRadioButton         jRBOpenMemory        = null;
57
        private JTextField           filenameTextField    = null;
58
        private JLabel               labelFilename        = null;
59
        private JPanel               panelNameFile        = null;
60
        private List<String>         extList              = null;
61
        private FileNameManagement   fileNameManagement   = null;
62
        private OpenFileContainer    openFileContainer    = null;
63
        
64
        public CreateNewLayerPanelImpl(FileNameManagement fileNameManagement, String tittle) {
65
                this.fileNameManagement = fileNameManagement;
66
                this.extList = fileNameManagement.getPrefixSupported();
67
                initialize(tittle);
68
                translate();
69
                
70
                getFileSelectorPanel().setPath(fileNameManagement.getDefaultFilePath());
71
                updateNewLayerText();
72
        }
73
        
74
        public CreateNewLayerPanelImpl(FileNameManagement fileNameManagement) {
75
                this(fileNameManagement, "");
76
        }
77

    
78

    
79
        private void initialize(String tittle) {
80
                ButtonGroup buttonGroup2;
81
                buttonGroup2 = new ButtonGroup();
82
                buttonGroup2.add(getRadioFileGenerate());
83
                buttonGroup2.add(getRadioOpenMemory());
84
                
85
                setLayout(new GridBagLayout());
86
                setBorder(BorderFactory.createTitledBorder(tittle));
87
                
88
                GridBagConstraints gridBagConstraints = new GridBagConstraints();
89
                gridBagConstraints.fill = GridBagConstraints.BOTH;
90
                gridBagConstraints.weightx = 1.0D;
91
                gridBagConstraints.anchor = GridBagConstraints.WEST;
92
                gridBagConstraints.insets = new Insets(2, 2, 5, 2);
93
                
94
                add(getRadioFileGenerate(), gridBagConstraints);
95
                
96
                gridBagConstraints.gridy = 1;
97
                gridBagConstraints.insets = new Insets(2, 25, 5, 2);
98
                add((JComponent)getFileSelectorPanel(), gridBagConstraints);
99

    
100
                gridBagConstraints.gridy = 2;
101
                gridBagConstraints.anchor = GridBagConstraints.WEST;
102
                gridBagConstraints.insets = new Insets(2, 2, 2, 2);
103
                add(getRadioOpenMemory(), gridBagConstraints);
104
                
105
                gridBagConstraints.gridy = 3;
106
                gridBagConstraints.insets = new Insets(2, 25, 2, 2);
107
                add(getFileNamePanel(), gridBagConstraints);
108
        }
109

    
110
        /**
111
         * Seccion donde ir?n todas las traducciones invariables del componente
112
         */
113
        private void translate() {
114
                getRadioFileGenerate().setText(Messages.getText( "generar_fichero"));
115
                getRadioOpenMemory().setText(Messages.getText( "abrir_memoria"));
116
                getLabelFilename().setText(Messages.getText( "nombre_capa") + ":");
117
        }
118

    
119
        /**
120
         * Devuelve el JRadioButton de generar fichero
121
         * @return
122
         */
123
        public JRadioButton getRadioFileGenerate() {
124
                if (jRBFileGenerate == null) {
125
                        jRBFileGenerate = new JRadioButton();
126
                        jRBFileGenerate.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
127
                        jRBFileGenerate.setMargin(new Insets(0, 0, 0, 0));
128
                }
129
                return jRBFileGenerate;
130
        }
131

    
132
        /**
133
         * Devuelve el JRadioButton de Abrir en memoria
134
         * @return
135
         */
136
        public JRadioButton getRadioOpenMemory() {
137
                if (jRBOpenMemory == null) {
138
                        jRBOpenMemory = new JRadioButton();
139
                        jRBOpenMemory.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
140
                        jRBOpenMemory.setMargin(new Insets(0, 0, 0, 0));
141

    
142
                        jRBOpenMemory.addItemListener(new ItemListener() {
143
                                public void itemStateChanged(ItemEvent evt) {
144
                                        jRBOpenMemoryStateChanged(evt);
145
                                }
146
                        });
147
                        jRBOpenMemory.setSelected(true);
148
                }
149
                return jRBOpenMemory;
150
        }
151

    
152
        /**
153
         * This method initializes filenameTextField
154
         *
155
         * @return javax.swing.JTextField
156
         */
157
        private JTextField getFilenameTextField() {
158
                if (filenameTextField == null) {
159
                        filenameTextField = new JTextField();
160
                        filenameTextField.setPreferredSize(new Dimension(0, filenameTextField.getPreferredSize().height));
161
                }
162
                return filenameTextField;
163
        }
164

    
165
        public OpenFileContainer getFileSelectorPanel() {
166
                if (openFileContainer == null) {
167
                        openFileContainer = new OpenFileContainerImpl(
168
                                        false, 
169
                                        extList, 
170
                                        fileNameManagement.getDefaultFilePath());
171
                }
172
                return openFileContainer;
173
        }
174

    
175
        
176
        public JPanel getFileNamePanel() {
177
                if (panelNameFile == null) {
178
                        panelNameFile = new JPanel();
179
                        panelNameFile.setLayout(new BorderLayout());
180
                        panelNameFile.add(getLabelFilename(), BorderLayout.WEST);
181
                        panelNameFile.add(getFilenameTextField(), BorderLayout.CENTER);
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
                        getFileSelectorPanel().setEnabled(false);
210
                        setFilenameEnabled(true);
211
                } else {
212
                        getFileSelectorPanel().setEnabled(true);
213
                        setFilenameEnabled(false);
214
                }
215
        }
216

    
217
        /**
218
         * Establece el texto de la etiqueta del nombre de fichero
219
         * @param text
220
         */
221
        public void setLabelFilename(String text) {
222
                getLabelFilename().setText(text);
223
        }
224

    
225
        /*
226
         * (non-Javadoc)
227
         * @see org.gvsig.raster.swing.newlayer.CreateNewLayerPanel#getFileSelected()
228
         */
229
        public String getFileSelected() {
230
                boolean isDir = false;
231
                if (getRadioFileGenerate().isSelected()) {
232
                        String path = getFileSelectorPanel().getFile().getAbsolutePath();
233
                        if(new File(path).isDirectory()) {
234
                                isDir = true;
235
                        } else {
236
                                return path.substring(path.lastIndexOf(File.separator) + 1, path.length());
237
                        }
238
                } 
239
                
240
                if (!getRadioFileGenerate().isSelected() || isDir) {
241
                        String file = getFilenameTextField().getText();
242
                        if (file.compareTo(fileNameManagement.getUniqueLayerName()) == 0)
243
                                fileNameManagement.usesUniqueLayerName();
244
                        updateNewLayerText();
245
                        return file;
246
                }
247
                return null;
248
        }
249
        
250
        /*
251
         * (non-Javadoc)
252
         * @see org.gvsig.raster.swing.newlayer.CreateNewLayerPanel#getDirectorySelected()
253
         */
254
        public String getDirectorySelected() {
255
                if (getRadioFileGenerate().isSelected()) {
256
                        String path = getFileSelectorPanel().getFile().getAbsolutePath();
257
                        if(new File(path).isDirectory()) {
258
                                return path;
259
                        } else {
260
                                return new File(path).getParent();
261
                        }
262
                }
263
                return System.getProperty("java.io.tmpdir");
264
        }
265
        
266
        /**
267
         * Especificar el nombre de la nueva capa para el recuadro de texto asignando
268
         * en cada llamada un nombre consecutivo.
269
         */
270
        public void updateNewLayerText() {
271
                getFilenameTextField().setText(fileNameManagement.getUniqueLayerName());
272
        }
273

    
274
}