Statistics
| Revision:

gvsig-osm / org.gvsig.raster.osm / trunk / org.gvsig.raster.osm / org.gvsig.raster.osm.swing / org.gvsig.raster.osm.swing.impl / src / main / java / org / gvsig / raster / osm / swing / impl / AddOSMLayerPanelImpl.java @ 85

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

    
24
import java.awt.BorderLayout;
25
import java.awt.FlowLayout;
26
import java.awt.GridBagConstraints;
27
import java.awt.GridBagLayout;
28
import java.awt.Insets;
29
import java.awt.event.ActionEvent;
30
import java.awt.event.ActionListener;
31
import java.awt.event.MouseEvent;
32
import java.awt.event.MouseListener;
33
import java.io.File;
34
import java.io.FileInputStream;
35
import java.io.FileNotFoundException;
36
import java.io.FileOutputStream;
37
import java.io.IOException;
38
import java.util.Collection;
39
import java.util.Iterator;
40
import java.util.Properties;
41

    
42
import javax.swing.BorderFactory;
43
import javax.swing.JButton;
44
import javax.swing.JComponent;
45
import javax.swing.JOptionPane;
46
import javax.swing.JPanel;
47
import javax.swing.JScrollPane;
48
import javax.swing.JTable;
49
import javax.swing.JTextField;
50
import javax.swing.ListSelectionModel;
51
import javax.swing.table.DefaultTableModel;
52

    
53
import org.gvsig.i18n.Messages;
54
import org.gvsig.raster.osm.swing.AddOSMLayerPanel;
55
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
57

    
58
/**
59
 * Panel to add OSM layers
60
 * @author Nacho Brodin (nachobrodin@gmail.com)
61
 */
62
public class AddOSMLayerPanelImpl extends JPanel implements AddOSMLayerPanel, MouseListener, ActionListener {
63
        private static final long    serialVersionUID    = 1;
64
        private static final String  separator           = "*";
65
        private Logger               log                 = LoggerFactory.getLogger(AddOSMLayerPanelImpl.class);
66
        private File                 pathToServerList    = null;
67
        private JTextField           textSelectedServer  = null;
68
        private JTable               tableServerList     = null;
69
        private String               propertiesFileName  = "osmservers.properties";
70
        private JPanel               buttonsPanel        = null;
71
        private JPanel               selectedServerPanel = null;
72
        private String[]             columnNames         = null;
73
        private JButton              addServerButton     = null;
74
        private JButton              updateServerButton  = null;
75
        private JButton              removeServerButton  = null;
76
        private AddServerPanel       serverPanel         = null;
77
        private MouseListener        mouseListener       = null;
78
        
79
        public AddOSMLayerPanelImpl(File pathToServerList) {
80
                if(pathToServerList != null)
81
                        this.pathToServerList = pathToServerList;
82
                else 
83
                        this.pathToServerList = new File(System.getProperty("user.home"));
84
                columnNames = new String[]{
85
                        Messages.getText("name"),
86
                        Messages.getText("url"),
87
                        Messages.getText("levels"),
88
                        Messages.getText("format"),};
89
                init();
90
        }
91
        
92
        private void init() {
93
                GridBagConstraints gridBagConstraints;
94
                setLayout(new GridBagLayout());
95
                
96
                gridBagConstraints = new GridBagConstraints();
97
                gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
98
                gridBagConstraints.gridx = 0;
99
                gridBagConstraints.gridy = 0;
100
                gridBagConstraints.weightx = 1.0;
101
                gridBagConstraints.insets = new Insets(2, 2, 2, 2);
102
                
103
                add(getJPanelSelectedServer(), gridBagConstraints);
104
                
105
                gridBagConstraints.fill = GridBagConstraints.BOTH;
106
                gridBagConstraints.gridx = 0;
107
                gridBagConstraints.gridy = 1;
108
                gridBagConstraints.weightx = 1.0;
109
                gridBagConstraints.weighty = 1.0;
110
                
111
                JScrollPane scrollPane = new JScrollPane(getJTableServerList());
112
                add(scrollPane, gridBagConstraints);
113
                
114
                gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
115
                gridBagConstraints.gridx = 0;
116
                gridBagConstraints.gridy = 2;
117
                gridBagConstraints.weightx = 1.0;
118
                gridBagConstraints.weighty = 0.0;
119
                
120
                add(getAddServerPanel(), gridBagConstraints);
121
                
122
                gridBagConstraints.gridy = 3;
123
                add(getJPanelButtonsPanel(), gridBagConstraints);
124
        }
125
        
126
        private JPanel getJPanelButtonsPanel() {
127
                if(buttonsPanel == null) {
128
                        FlowLayout fl = new FlowLayout();
129
                        buttonsPanel = new JPanel(fl);
130
                        updateServerButton = new JButton(Messages.getText("update_server"));
131
                        updateServerButton.addActionListener(this);
132
                        addServerButton = new JButton(Messages.getText("add_server"));
133
                        addServerButton.addActionListener(this);
134
                        removeServerButton = new JButton(Messages.getText("remove_server"));
135
                        removeServerButton.addActionListener(this);
136
                        buttonsPanel.add(updateServerButton, fl);
137
                        buttonsPanel.add(addServerButton, fl);
138
                        buttonsPanel.add(removeServerButton, fl);
139
                }
140
                return buttonsPanel;
141
        }
142
        
143
        private JPanel getJPanelSelectedServer() {
144
                if(selectedServerPanel == null) {
145
                        selectedServerPanel = new JPanel(new BorderLayout());
146
                        selectedServerPanel.setBorder(BorderFactory.createTitledBorder(Messages.getText("server")));
147
                        selectedServerPanel.add(getJTextFieldSelectedServer(), BorderLayout.CENTER);
148
                }
149
                return selectedServerPanel;
150
        }
151

    
152
        private JTextField getJTextFieldSelectedServer() {
153
                if(textSelectedServer == null) {
154
                        textSelectedServer = new JTextField();
155
                        textSelectedServer.setEditable(false);
156
                }
157
                return textSelectedServer;
158
        }
159
        
160
        private JTable getJTableServerList() {
161
                if(tableServerList == null) {
162
                        DefaultTableModel model = null;
163
                        try {
164
                                Object[][] objs = loadServerListFromProperties();
165
                                model = new DefaultTableModel(objs, columnNames);
166
                                tableServerList = new JTable(model);
167
                                tableServerList.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
168
                                tableServerList.getColumnModel().getColumn(2).setMaxWidth(50);
169
                                tableServerList.getColumnModel().getColumn(3).setMaxWidth(50);
170
                        } catch (FileNotFoundException e) {
171
                                log.debug("Properties file to store servers has not been located");
172
                        } catch (IOException e) {
173
                                log.debug("Error reading properties file which stores servers");
174
                        }
175
                        if(tableServerList == null) {
176
                                model = new DefaultTableModel(null, columnNames);
177
                                tableServerList = new JTable(model);
178
                        }
179
                        ListSelectionModel selectionModel = tableServerList.getSelectionModel();  
180
                selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
181
                        tableServerList.addMouseListener(this);
182
                }
183
                return tableServerList;
184
        }
185
        
186
        private Object[][] loadServerListFromProperties() throws FileNotFoundException, IOException {
187
                if(!new File(getPropertiesFilePath()).exists())
188
                        return null;
189
                Properties prop = new Properties();
190
                prop.load(new FileInputStream(getPropertiesFilePath()));
191
                Collection<Object> collect = prop.values();
192
                if(collect == null)
193
                        return null;
194
                
195
                Iterator<Object> it = collect.iterator();
196
                Object[][] result = new Object[collect.size()][4];
197
                
198
                int cont = 0;
199
                while(it.hasNext()) {
200
                        String value = (String)it.next();
201
                        result[cont] = value.split("\\" + separator);
202
                        cont ++;
203
                }
204
                return result;
205
        }
206
        
207
        
208
        /*private void addServerToProperties(List<String> line) throws FileNotFoundException, IOException {
209
                if(!new File(getPropertiesFile()).exists())
210
                        if(!new File(getPropertiesFile()).createNewFile())
211
                                return;
212
                if(line == null || line.size() != 4)
213
                        return;
214
                
215
                Properties prop = new Properties();
216
                prop.setProperty(line.get(0), 
217
                                line.get(0) + ":" + line.get(1) + ":" + line.get(2) + ":" + line.get(3));
218
                prop.store(new FileOutputStream(getPropertiesFile()), null);
219
        }*/
220

    
221
        private void addServerToProperties(String name, String url, String levels, String format) {
222
                        try {
223
                                if(!new File(getPropertiesFilePath()).exists())
224
                                        if(!new File(getPropertiesFilePath()).createNewFile())
225
                                                return;
226

    
227
                                Properties prop = new Properties();
228
                                prop.load(new FileInputStream(getPropertiesFilePath()));
229
                                prop.setProperty(getKeyFromName(name), name + separator + url + separator + levels + separator + format);
230
                                prop.store(new FileOutputStream(getPropertiesFilePath()), null);
231
                        } catch (FileNotFoundException e1) {
232
                                JOptionPane.showMessageDialog(this, Messages.getText("cannot_add_to_file"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
233
                                log.info(Messages.getText("cannot_add_to_file"), e1);
234
                        } catch (IOException e1) {
235
                                JOptionPane.showMessageDialog(this, Messages.getText("cannot_add_to_file"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
236
                                log.info(Messages.getText("cannot_add_to_file"), e1);
237
                        }
238
        }
239
        
240
        private void removeServerFromProperties(String name) {
241
                        try {
242
                                if(!new File(getPropertiesFilePath()).exists())
243
                                        return;
244

    
245
                                Properties prop = new Properties();
246
                                prop.load(new FileInputStream(getPropertiesFilePath()));
247
                                prop.remove(getKeyFromName(name));
248
                                prop.store(new FileOutputStream(getPropertiesFilePath()), null);
249
                        } catch (FileNotFoundException e1) {
250
                                JOptionPane.showMessageDialog(this, Messages.getText("cannot_remove_from_file"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
251
                                log.info(Messages.getText("cannot_remove_from_file"), e1);
252
                        } catch (IOException e1) {
253
                                JOptionPane.showMessageDialog(this, Messages.getText("cannot_remove_from_file"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
254
                                log.info(Messages.getText("cannot_remove_from_file"), e1);
255
                        }
256
        }
257
        
258
        
259
        public String getPropertiesFilePath() {
260
                return pathToServerList.getAbsolutePath() + File.separator + propertiesFileName;
261
        }
262

    
263
        public void mouseClicked(MouseEvent e) {
264
                
265
        }
266

    
267
        public void mouseEntered(MouseEvent e) {
268
                
269
        }
270

    
271
        public void mouseExited(MouseEvent e) {
272
                
273
        }
274

    
275
        public void mousePressed(MouseEvent e) {
276
                if(e.getSource() == getJTableServerList()) {
277
                        if(getJTableServerList().getSelectedRow() != -1) {
278
                                int selectedRow = getJTableServerList().getSelectedRow();
279
                                String name = (String)getJTableServerList().getModel().getValueAt(selectedRow, 0);
280
                                String url = (String)getJTableServerList().getModel().getValueAt(selectedRow, 1);
281
                                String levels = (String)getJTableServerList().getModel().getValueAt(selectedRow, 2);
282
                                String format = (String)getJTableServerList().getModel().getValueAt(selectedRow, 3);
283
                                getJTextFieldSelectedServer().setText(name);
284
                                getAddServerPanel().getJTextFieldName().setText(name);
285
                                getAddServerPanel().getJTextFieldURL().setText(url);
286
                                getAddServerPanel().getJTextFieldLevels().setText(levels);
287
                                getAddServerPanel().getJTextFieldFormat().setText(format);
288
                                if(mouseListener != null)
289
                                        mouseListener.mousePressed(e);
290
                        }
291
                }
292
        }
293

    
294
        public void mouseReleased(MouseEvent e) {
295
                
296
        }
297
        
298
        public void addMouseListener(MouseListener listener) {
299
                this.mouseListener = listener;
300
        }
301
        
302
        public JComponent getComponent() {
303
                return this;
304
        }
305

    
306
        public void actionPerformed(ActionEvent e) {
307
                if(e.getSource() == updateServerButton) {
308
                        if(getJTableServerList().getSelectedRow() == -1) {
309
                                JOptionPane.showMessageDialog(this, Messages.getText("row_not_selected"), Messages.getText("Info"), JOptionPane.INFORMATION_MESSAGE);
310
                                return;
311
                        }
312
                        
313
                        if(getAddServerPanel().check()) {
314
                                String name = getAddServerPanel().getJTextFieldName().getText();
315
                                String url = getAddServerPanel().getJTextFieldURL().getText();
316
                                String levels = getAddServerPanel().getJTextFieldLevels().getText();
317
                                String format = getAddServerPanel().getJTextFieldFormat().getText();
318
                                
319
                                int updateRow = getJTableServerList().getSelectedRow();
320
                                if(updateRow < 0) {
321
                                        JOptionPane.showMessageDialog(this, Messages.getText("row_not_selected"), Messages.getText("Info"), JOptionPane.INFORMATION_MESSAGE);
322
                                        return;
323
                                }
324
                                int res = JOptionPane.showConfirmDialog(this, Messages.getText("update_existing_row"), Messages.getText("Info"), JOptionPane.INFORMATION_MESSAGE);
325
                                if(res == JOptionPane.YES_OPTION) {
326
                                        String nameToRemove = (String)getJTableServerList().getModel().getValueAt(updateRow, 0);
327
                                        removeServerFromProperties(nameToRemove);
328
                                        ((DefaultTableModel)getJTableServerList().getModel()).removeRow(updateRow);
329
                                        ((DefaultTableModel)getJTableServerList().getModel()).addRow(new Object[]{name, url, levels, format});
330
                                        addServerToProperties(name, url, levels, format);
331
                                } 
332
                                return;        
333
                        } else {
334
                                JOptionPane.showMessageDialog(this, Messages.getText("format_not_valid"), Messages.getText("Info"), JOptionPane.INFORMATION_MESSAGE);
335
                        }
336
                                
337
                }
338
                
339
                if(e.getSource() == addServerButton) {
340
                        if(getAddServerPanel().check()) {
341
                                String name = getAddServerPanel().getJTextFieldName().getText();
342
                                String url = getAddServerPanel().getJTextFieldURL().getText();
343
                                String levels = getAddServerPanel().getJTextFieldLevels().getText();
344
                                String format = getAddServerPanel().getJTextFieldFormat().getText();
345
                                
346
                                int updateRow = existsServerInList(name);
347
                                if(updateRow != -1) {
348
                                        JOptionPane.showMessageDialog(this, Messages.getText("server_exists"), Messages.getText("Info"), JOptionPane.INFORMATION_MESSAGE);
349
                                        return;
350
                                }
351
                                ((DefaultTableModel)getJTableServerList().getModel()).addRow(new Object[]{name, url, levels, format});
352
                                addServerToProperties(name, url, levels, format);
353
                                return;
354
                        } else {
355
                                JOptionPane.showMessageDialog(this, Messages.getText("format_not_valid"), Messages.getText("Info"), JOptionPane.INFORMATION_MESSAGE);
356
                        }
357
                }
358
                
359
                if(e.getSource() == removeServerButton) {
360
                        int selected = getJTableServerList().getSelectedRow();
361
                        if(selected != -1) {
362
                                int res = JOptionPane.showConfirmDialog(this, Messages.getText("remove_existing_row"), Messages.getText("Info"), JOptionPane.INFORMATION_MESSAGE);
363
                                if(res == JOptionPane.YES_OPTION) {
364
                                        String name = (String)getJTableServerList().getModel().getValueAt(selected, 0);
365
                                        ((DefaultTableModel)getJTableServerList().getModel()).removeRow(selected);
366
                                        getJTextFieldSelectedServer().setText("");
367
                                        removeServerFromProperties(name);
368
                                }
369
                        }
370
                }
371
         }
372
        
373
        /**
374
         * Returns -1 if the element does not exists in the table and its position if exists
375
         * @param name
376
         * @return
377
         */
378
        private int existsServerInList(String name) {
379
                for (int i = 0; i < getJTableServerList().getRowCount(); i++) {
380
                        String value = (String)getJTableServerList().getModel().getValueAt(i, 0);
381
                        if(value.equals(name))
382
                                return i;
383
                }
384
                return -1;
385
        }
386
        
387
        private String getKeyFromName(String name) {
388
                return name.replace(' ', '_');
389
        }
390
        
391
        private AddServerPanel getAddServerPanel() {
392
                if(serverPanel == null) {
393
                        serverPanel = new AddServerPanel(separator);
394
                }
395
                return serverPanel;
396
        }
397

    
398
        public String getPropertiesFileName() {
399
                return propertiesFileName;
400
        }
401
        
402
        public boolean areSettingsValid() {
403
                return         getJTableServerList().getSelectedRow() != -1 && 
404
                                getJTextFieldSelectedServer().getText() != null && 
405
                                !getJTextFieldSelectedServer().getText().equals("");
406
        }
407

    
408
        public String getSelectedFormat() {
409
                if(getSelectedName() == null)
410
                        return null;
411
                for (int i = 0; i < getJTableServerList().getRowCount(); i++) {
412
                        String value = (String)getJTableServerList().getModel().getValueAt(i, 0);
413
                        if(value.equals(getSelectedName()))
414
                                return (String)getJTableServerList().getModel().getValueAt(i, 3);
415
                }
416
                return null;
417
        }
418

    
419
        public String getSelectedLevel() {
420
                if(getSelectedName() == null)
421
                        return null;
422
                for (int i = 0; i < getJTableServerList().getRowCount(); i++) {
423
                        String value = (String)getJTableServerList().getModel().getValueAt(i, 0);
424
                        if(value.equals(getSelectedName()))
425
                                return (String)getJTableServerList().getModel().getValueAt(i, 2);
426
                }
427
                return null;
428
        }
429

    
430
        public String getSelectedName() {
431
                return getJTextFieldSelectedServer().getText();
432
        }
433

    
434
        public String getSelectedURL() {
435
                if(getSelectedName() == null)
436
                        return null;
437
                for (int i = 0; i < getJTableServerList().getRowCount(); i++) {
438
                        String value = (String)getJTableServerList().getModel().getValueAt(i, 0);
439
                        if(value.equals(getSelectedName()))
440
                                return (String)getJTableServerList().getModel().getValueAt(i, 1);
441
                }
442
                return null;
443
        }
444
}