source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMTSLayerPanel.java@ 13743

Last change on this file since 13743 was 13743, checked in by wiktorn, 6 years ago

Fix bugs spotted by findbugs

  • Property svn:eol-style set to native
File size: 5.3 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.Dimension;
7import java.awt.GridBagLayout;
8import java.io.IOException;
9import java.util.Collections;
10import java.util.List;
11import java.util.Map.Entry;
12
13import javax.swing.JButton;
14import javax.swing.JCheckBox;
15import javax.swing.JLabel;
16import javax.swing.JOptionPane;
17import javax.swing.JPanel;
18import javax.swing.JScrollPane;
19import javax.swing.JTable;
20
21import org.openstreetmap.josm.data.imagery.DefaultLayer;
22import org.openstreetmap.josm.data.imagery.ImageryInfo;
23import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
24import org.openstreetmap.josm.data.imagery.WMTSCapabilities;
25import org.openstreetmap.josm.data.imagery.WMTSTileSource;
26import org.openstreetmap.josm.data.imagery.WMTSTileSource.Layer;
27import org.openstreetmap.josm.data.imagery.WMTSTileSource.WMTSGetCapabilitiesException;
28import org.openstreetmap.josm.tools.GBC;
29import org.openstreetmap.josm.tools.Logging;
30
31/**
32 * Panel for adding WMTS imagery sources
33 * @author Wiktor Niesiobędzki
34 *
35 */
36public class AddWMTSLayerPanel extends AddImageryPanel {
37 private final transient JPanel layerPanel = new JPanel(new GridBagLayout());
38 private transient JTable layerTable;
39 private final JCheckBox setDefaultLayer = new JCheckBox(tr("Set default layer?"));
40 private List<Entry<String, List<Layer>>> layers;
41
42 /**
43 * default constructor
44 */
45 public AddWMTSLayerPanel() {
46 add(new JLabel(tr("{0} Make sure OSM has the permission to use this service", "1.")), GBC.eol());
47 add(new JLabel(tr("{0} Enter GetCapabilities URL", "2.")), GBC.eol());
48 add(rawUrl, GBC.eop().fill());
49 rawUrl.setLineWrap(true);
50 rawUrl.setAlignmentY(TOP_ALIGNMENT);
51 JButton getLayers = new JButton(tr("Get layers"));
52 getLayers.setEnabled(setDefaultLayer.isSelected());
53 setDefaultLayer.addActionListener(e -> {
54 getLayers.setEnabled(setDefaultLayer.isSelected());
55 });
56 add(setDefaultLayer, GBC.eop().fill());
57 add(getLayers, GBC.eop().fill());
58 add(new JLabel(tr("Choose default layer")), GBC.eol().fill());
59 layerPanel.setPreferredSize(new Dimension(250, 100));
60 add(layerPanel, GBC.eol().fill());
61
62 addCommonSettings();
63
64 add(new JLabel(tr("{0} Enter name for this layer", "3.")), GBC.eol());
65 add(name, GBC.eol().fill(GBC.HORIZONTAL));
66 registerValidableComponent(rawUrl);
67
68 getLayers.addActionListener(e -> {
69 try {
70 WMTSCapabilities capabilities = WMTSTileSource.getCapabilities(rawUrl.getText(), getCommonHeaders());
71 layers = WMTSTileSource.groupLayersByNameAndTileMatrixSet(capabilities.getLayers());
72 layerTable = WMTSTileSource.getLayerSelectionPanel(layers);
73 layerPanel.removeAll();
74 JScrollPane scrollPane = new JScrollPane(layerTable);
75 scrollPane.setPreferredSize(new Dimension(100, 100));
76 layerPanel.add(scrollPane, GBC.eol().fill());
77 layerPanel.revalidate();
78 } catch (IOException | WMTSGetCapabilitiesException ex) {
79 JOptionPane.showMessageDialog(
80 getParent(),
81 tr("Error getting layers: {0}", ex.getMessage()),
82 tr("WMTS Error"),
83 JOptionPane.ERROR_MESSAGE);
84 }
85 });
86 }
87
88 @Override
89 protected ImageryInfo getImageryInfo() {
90 ImageryInfo ret = new ImageryInfo(getImageryName(), "wmts:" + sanitize(getImageryRawUrl(), ImageryType.WMTS));
91 if (setDefaultLayer.isSelected()) {
92 if (layerTable == null) {
93 // did not call get capabilities
94 throw new IllegalArgumentException(tr("You need to get fetch layers"));
95 }
96 int index = layerTable.getSelectedRow();
97 if (index < 0) {
98 throw new IllegalArgumentException(tr("Invalid layer selected. Index: {1}", index));
99 }
100 Layer selectedLayer = layers.get(layerTable.convertRowIndexToModel(index)).getValue().get(0);
101 ret.setDefaultLayers(
102 Collections.<DefaultLayer>singletonList(
103 new DefaultLayer(
104 ImageryType.WMTS,
105 selectedLayer.getIdentifier(),
106 selectedLayer.getStyle(),
107 selectedLayer.getTileMatrixSet().getIdentifier()
108 )
109 )
110 );
111 }
112 ret.setCustomHttpHeaders(getCommonHeaders());
113 ret.setGeoreferenceValid(getCommonIsValidGeoreference());
114 ret.setImageryType(ImageryType.WMTS);
115 try {
116 new WMTSTileSource(ret); // check if constructor throws an error
117 } catch (IOException | WMTSGetCapabilitiesException e) {
118 Logging.warn(e);
119 throw new IllegalArgumentException(e); // if so, wrap exception, so proper message will be shown to the user
120 }
121 return ret;
122
123 }
124
125 @Override
126 protected boolean isImageryValid() {
127 return !getImageryName().isEmpty() && !getImageryRawUrl().isEmpty();
128 }
129
130}
Note: See TracBrowser for help on using the repository browser.