Changeset 11216 in josm for trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
- Timestamp:
- 2016-11-04T09:58:50+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java
r11181 r11216 11 11 import java.io.IOException; 12 12 import java.net.MalformedURLException; 13 import java.util.ArrayList; 14 import java.util.Collection; 13 15 import java.util.HashSet; 14 16 import java.util.List; … … 23 25 import org.openstreetmap.josm.data.imagery.ImageryInfo; 24 26 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType; 27 import org.openstreetmap.josm.data.imagery.WMTSTileSource; 25 28 import org.openstreetmap.josm.gui.ExtendedDialog; 26 29 import org.openstreetmap.josm.gui.layer.AlignImageryPanel; … … 31 34 import org.openstreetmap.josm.io.imagery.WMSImagery.LayerDetails; 32 35 import org.openstreetmap.josm.io.imagery.WMSImagery.WMSGetCapabilitiesException; 36 import org.openstreetmap.josm.tools.CheckParameterUtil; 33 37 import org.openstreetmap.josm.tools.GBC; 34 38 import org.openstreetmap.josm.tools.ImageProvider; … … 64 68 } 65 69 66 @Override 67 public void actionPerformed(ActionEvent e) { 68 if (!isEnabled()) return; 70 /** 71 * Converts general ImageryInfo to specific one, that does not need any user action to initialize 72 * see: https://josm.openstreetmap.de/ticket/13868 73 * @param info 74 * @return 75 */ 76 private ImageryInfo convertImagery(ImageryInfo info) { 69 77 try { 70 final ImageryInfo infoToAdd = ImageryType.WMS_ENDPOINT.equals(info.getImageryType()) 71 ? getWMSLayerInfo() : info; 72 if (infoToAdd != null) { 73 Main.getLayerManager().addLayer(ImageryLayer.create(infoToAdd)); 74 AlignImageryPanel.addNagPanelIfNeeded(infoToAdd); 78 switch(info.getImageryType()) { 79 case WMS_ENDPOINT: 80 // convert to WMS type 81 return getWMSLayerInfo(); 82 case WMTS: 83 // specify which layer to use 84 String layerId = new WMTSTileSource(info).userSelectLayer(); 85 if (layerId != null) { 86 ImageryInfo copy = new ImageryInfo(info); 87 Collection<String> defaultLayers = new ArrayList<>(1); 88 defaultLayers.add(layerId); 89 copy.setDefaultLayers(defaultLayers); 90 return copy; 91 } 92 // layer not selected - refuse to add 93 return null; 94 default: 95 return info; 75 96 } 76 } catch (IllegalArgumentException ex) {77 if (ex.getMessage() == null || ex.getMessage().isEmpty() || GraphicsEnvironment.isHeadless()) {78 throw ex;79 } else {80 JOptionPane.showMessageDialog(Main.parent,81 ex.getMessage(), tr("Error"),82 JOptionPane.ERROR_MESSAGE);83 }84 }85 }86 87 protected ImageryInfo getWMSLayerInfo() {88 try {89 assert ImageryType.WMS_ENDPOINT.equals(info.getImageryType());90 final WMSImagery wms = new WMSImagery();91 wms.attemptGetCapabilities(info.getUrl());92 93 final WMSLayerTree tree = new WMSLayerTree();94 tree.updateTree(wms);95 List<String> wmsFormats = wms.getFormats();96 final JComboBox<String> formats = new JComboBox<>(wmsFormats.toArray(new String[wmsFormats.size()]));97 formats.setSelectedItem(wms.getPreferredFormats());98 formats.setToolTipText(tr("Select image format for WMS layer"));99 100 if (!GraphicsEnvironment.isHeadless()) {101 if (1 != new ExtendedDialog(Main.parent, tr("Select WMS layers"), new String[]{tr("Add layers"), tr("Cancel")}) { {102 final JScrollPane scrollPane = new JScrollPane(tree.getLayerTree());103 scrollPane.setPreferredSize(new Dimension(400, 400));104 final JPanel panel = new JPanel(new GridBagLayout());105 panel.add(scrollPane, GBC.eol().fill());106 panel.add(formats, GBC.eol().fill(GBC.HORIZONTAL));107 setContent(panel);108 } }.showDialog().getValue()) {109 return null;110 }111 }112 113 final String url = wms.buildGetMapUrl(114 tree.getSelectedLayers(), (String) formats.getSelectedItem());115 Set<String> supportedCrs = new HashSet<>();116 boolean first = true;117 StringBuilder layersString = new StringBuilder();118 for (LayerDetails layer: tree.getSelectedLayers()) {119 if (first) {120 supportedCrs.addAll(layer.getProjections());121 first = false;122 }123 layersString.append(layer.name);124 layersString.append(", ");125 supportedCrs.retainAll(layer.getProjections());126 }127 128 ImageryInfo ret = new ImageryInfo(info.getName(), url, "wms", info.getEulaAcceptanceRequired(), info.getCookies());129 if (layersString.length() > 2) {130 ret.setName(ret.getName() + ' ' + layersString.substring(0, layersString.length() - 2));131 }132 ret.setServerProjections(supportedCrs);133 return ret;134 97 } catch (MalformedURLException ex) { 135 98 if (!GraphicsEnvironment.isHeadless()) { … … 155 118 156 119 @Override 120 public void actionPerformed(ActionEvent e) { 121 if (!isEnabled()) return; 122 try { 123 final ImageryInfo infoToAdd = convertImagery(info); 124 if (infoToAdd != null) { 125 Main.getLayerManager().addLayer(ImageryLayer.create(infoToAdd)); 126 AlignImageryPanel.addNagPanelIfNeeded(infoToAdd); 127 } 128 } catch (IllegalArgumentException ex) { 129 if (ex.getMessage() == null || ex.getMessage().isEmpty() || GraphicsEnvironment.isHeadless()) { 130 throw ex; 131 } else { 132 JOptionPane.showMessageDialog(Main.parent, 133 ex.getMessage(), tr("Error"), 134 JOptionPane.ERROR_MESSAGE); 135 } 136 } 137 } 138 139 protected ImageryInfo getWMSLayerInfo() throws IOException, WMSGetCapabilitiesException { 140 CheckParameterUtil.ensureThat(ImageryType.WMS_ENDPOINT.equals(info.getImageryType()), "wms_endpoint imagery type expected"); 141 142 final WMSImagery wms = new WMSImagery(); 143 wms.attemptGetCapabilities(info.getUrl()); 144 145 final WMSLayerTree tree = new WMSLayerTree(); 146 tree.updateTree(wms); 147 List<String> wmsFormats = wms.getFormats(); 148 final JComboBox<String> formats = new JComboBox<>(wmsFormats.toArray(new String[wmsFormats.size()])); 149 formats.setSelectedItem(wms.getPreferredFormats()); 150 formats.setToolTipText(tr("Select image format for WMS layer")); 151 152 if (!GraphicsEnvironment.isHeadless()) { 153 if (1 != new ExtendedDialog(Main.parent, tr("Select WMS layers"), new String[]{tr("Add layers"), tr("Cancel")}) { { 154 final JScrollPane scrollPane = new JScrollPane(tree.getLayerTree()); 155 scrollPane.setPreferredSize(new Dimension(400, 400)); 156 final JPanel panel = new JPanel(new GridBagLayout()); 157 panel.add(scrollPane, GBC.eol().fill()); 158 panel.add(formats, GBC.eol().fill(GBC.HORIZONTAL)); 159 setContent(panel); 160 } }.showDialog().getValue()) { 161 return null; 162 } 163 } 164 165 final String url = wms.buildGetMapUrl( 166 tree.getSelectedLayers(), (String) formats.getSelectedItem()); 167 Set<String> supportedCrs = new HashSet<>(); 168 boolean first = true; 169 StringBuilder layersString = new StringBuilder(); 170 for (LayerDetails layer: tree.getSelectedLayers()) { 171 if (first) { 172 supportedCrs.addAll(layer.getProjections()); 173 first = false; 174 } 175 layersString.append(layer.name); 176 layersString.append(", "); 177 supportedCrs.retainAll(layer.getProjections()); 178 } 179 180 ImageryInfo ret = new ImageryInfo(info.getName(), url, "wms", info.getEulaAcceptanceRequired(), info.getCookies()); 181 if (layersString.length() > 2) { 182 ret.setName(ret.getName() + ' ' + layersString.substring(0, layersString.length() - 2)); 183 } 184 ret.setServerProjections(supportedCrs); 185 return ret; 186 } 187 188 @Override 157 189 protected void updateEnabledState() { 158 190 if (info.isBlacklisted()) {
Note:
See TracChangeset
for help on using the changeset viewer.