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 | 85 | nbrodin | /* 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 | } |