source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMSLayerPanel.java@ 6070

Last change on this file since 6070 was 6070, checked in by stoecker, 11 years ago

see #8853 remove tabs, trailing spaces, windows line ends, strange characters

  • Property svn:eol-style set to native
File size: 6.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences.imagery;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.event.ActionEvent;
7import java.awt.event.ActionListener;
8import java.awt.event.ItemEvent;
9import java.awt.event.ItemListener;
10import java.beans.PropertyChangeEvent;
11import java.beans.PropertyChangeListener;
12import java.io.IOException;
13import java.net.MalformedURLException;
14import java.net.URL;
15
16import javax.swing.DefaultComboBoxModel;
17import javax.swing.JButton;
18import javax.swing.JCheckBox;
19import javax.swing.JComboBox;
20import javax.swing.JLabel;
21import javax.swing.JOptionPane;
22import javax.swing.JScrollPane;
23
24import org.openstreetmap.josm.data.imagery.ImageryInfo;
25import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser;
26import org.openstreetmap.josm.gui.widgets.JosmTextArea;
27import org.openstreetmap.josm.io.imagery.WMSImagery;
28import org.openstreetmap.josm.tools.GBC;
29import org.openstreetmap.josm.tools.Utils;
30
31public class AddWMSLayerPanel extends AddImageryPanel {
32
33 private final WMSImagery wms = new WMSImagery();
34 private final JCheckBox endpoint = new JCheckBox(tr("Store WMS endpoint only, select layers at usage"));
35 private final WMSLayerTree tree = new WMSLayerTree();
36 private final JComboBox formats = new JComboBox();
37 private final JLabel wmsInstruction;
38 private final JosmTextArea wmsUrl = new JosmTextArea(3, 40);
39 private final JButton showBounds = new JButton(tr("Show bounds"));
40
41 /**
42 * Constructs a new {@code AddWMSLayerPanel}.
43 */
44 public AddWMSLayerPanel() {
45
46 add(new JLabel(tr("1. Enter service URL")), GBC.eol());
47 add(rawUrl, GBC.eol().fill());
48 rawUrl.setLineWrap(true);
49 JButton getLayers = new JButton(tr("Get layers"));
50 add(getLayers, GBC.eop().fill());
51
52 add(new JLabel(tr("2. Select layers")), GBC.eol());
53 add(endpoint, GBC.eol().fill());
54 add(new JScrollPane(tree.getLayerTree()), GBC.eol().fill().weight(1, 100));
55
56 showBounds.setEnabled(false);
57 add(new JScrollPane(showBounds), GBC.eop().fill());
58
59 add(new JLabel(tr("3. Select image format")), GBC.eol());
60 add(formats, GBC.eol().fill());
61
62 add(wmsInstruction = new JLabel(tr("4. Verify generated WMS URL")), GBC.eol());
63 add(wmsUrl, GBC.eop().fill());
64 wmsUrl.setLineWrap(true);
65
66 add(new JLabel(tr("5. Enter name for this layer")), GBC.eol());
67 add(name, GBC.eop().fill());
68
69 getLayers.addActionListener(new ActionListener() {
70 @Override
71 public void actionPerformed(ActionEvent e) {
72 try {
73 wms.attemptGetCapabilities(rawUrl.getText());
74 tree.updateTree(wms);
75 formats.setModel(new DefaultComboBoxModel(wms.getFormats().toArray()));
76 } catch (MalformedURLException ex) {
77 JOptionPane.showMessageDialog(getParent(), tr("Invalid service URL."),
78 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
79 } catch (IOException ex) {
80 JOptionPane.showMessageDialog(getParent(), tr("Could not retrieve WMS layer list."),
81 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
82 } catch (WMSImagery.WMSGetCapabilitiesException ex) {
83 JOptionPane.showMessageDialog(getParent(), tr("Could not parse WMS layer list."),
84 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
85 System.err.println("Could not parse WMS layer list. Incoming data:");
86 System.err.println(ex.getIncomingData());
87 }
88 }
89 });
90
91 endpoint.addItemListener(new ItemListener() {
92 @Override
93 public void itemStateChanged(ItemEvent e) {
94 tree.getLayerTree().setEnabled(!endpoint.isSelected());
95 showBounds.setEnabled(!endpoint.isSelected());
96 wmsInstruction.setEnabled(!endpoint.isSelected());
97 formats.setEnabled(!endpoint.isSelected());
98 wmsUrl.setEnabled(!endpoint.isSelected());
99 if (endpoint.isSelected()) {
100 URL url = wms.getServiceUrl();
101 if (url != null) {
102 name.setText(url.getHost());
103 }
104 } else {
105 onLayerSelectionChanged();
106 }
107 }
108 });
109
110 tree.getLayerTree().addPropertyChangeListener("selectedLayers", new PropertyChangeListener() {
111 @Override
112 public void propertyChange(PropertyChangeEvent evt) {
113 onLayerSelectionChanged();
114 }
115 });
116
117 formats.addActionListener(new ActionListener() {
118 @Override
119 public void actionPerformed(ActionEvent e) {
120 onLayerSelectionChanged();
121 }
122 });
123
124 showBounds.addActionListener(new ActionListener() {
125 @Override
126 public void actionPerformed(ActionEvent e) {
127 if (tree.getSelectedLayers().get(0).bounds != null) {
128 SlippyMapBBoxChooser mapPanel = new SlippyMapBBoxChooser();
129 mapPanel.setBoundingBox(tree.getSelectedLayers().get(0).bounds);
130 JOptionPane.showMessageDialog(null, mapPanel, tr("Show Bounds"), JOptionPane.PLAIN_MESSAGE);
131 } else {
132 JOptionPane.showMessageDialog(null, tr("No bounding box was found for this layer."),
133 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
134 }
135 }
136 });
137
138 registerValidableComponent(endpoint);
139 registerValidableComponent(rawUrl);
140 registerValidableComponent(wmsUrl);
141 }
142
143 protected final void onLayerSelectionChanged() {
144 if (wms.getServiceUrl() != null) {
145 wmsUrl.setText(wms.buildGetMapUrl(tree.getSelectedLayers(), (String) formats.getSelectedItem()));
146 name.setText(wms.getServiceUrl().getHost() + ": " + Utils.join(", ", tree.getSelectedLayers()));
147 }
148 showBounds.setEnabled(tree.getSelectedLayers().size() == 1);
149 }
150
151 @Override
152 public ImageryInfo getImageryInfo() {
153 final ImageryInfo info;
154 if (endpoint.isSelected()) {
155 info = new ImageryInfo(getImageryName(), getImageryRawUrl());
156 info.setImageryType(ImageryInfo.ImageryType.WMS_ENDPOINT);
157 } else {
158 info = wms.toImageryInfo(getImageryName(), tree.getSelectedLayers());
159 info.setUrl(getWmsUrl());
160 }
161 return info;
162 }
163
164 protected final String getWmsUrl() {
165 return sanitize(wmsUrl.getText());
166 }
167
168 protected boolean isImageryValid() {
169 if (getImageryName().isEmpty()) {
170 return false;
171 }
172 if (endpoint.isSelected()) {
173 return !getImageryRawUrl().isEmpty();
174 } else {
175 return !getWmsUrl().isEmpty();
176 }
177 }
178}
Note: See TracBrowser for help on using the repository browser.