source: josm/trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java@ 5904

Last change on this file since 5904 was 5617, checked in by simon04, 12 years ago

see #8254 - new imagery entry wms_endpoint: Store WMS endpoint only, select layers at usage

  • Property svn:eol-style set to native
File size: 5.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.actions;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Dimension;
7import java.awt.event.ActionEvent;
8import java.io.IOException;
9import java.net.MalformedURLException;
10import javax.swing.Action;
11import javax.swing.ImageIcon;
12import javax.swing.JOptionPane;
13import javax.swing.JScrollPane;
14import org.openstreetmap.josm.Main;
15import org.openstreetmap.josm.data.imagery.ImageryInfo;
16import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
17import org.openstreetmap.josm.gui.ExtendedDialog;
18import org.openstreetmap.josm.gui.actionsupport.AlignImageryPanel;
19import org.openstreetmap.josm.gui.layer.ImageryLayer;
20import org.openstreetmap.josm.io.imagery.WMSImagery;
21import org.openstreetmap.josm.gui.preferences.imagery.WMSLayerTree;
22import org.openstreetmap.josm.tools.ImageProvider;
23
24public class AddImageryLayerAction extends JosmAction implements AdaptableAction {
25
26 private static final int MAX_ICON_SIZE = 24;
27 private final ImageryInfo info;
28
29 public AddImageryLayerAction(ImageryInfo info) {
30 super(info.getMenuName(), /* ICON */"imagery_menu", tr("Add imagery layer {0}",info.getName()), null, false, false);
31 putValue("toolbar", "imagery_" + info.getToolbarName());
32 this.info = info;
33 installAdapters();
34
35 // change toolbar icon from if specified
36 try {
37 if (info.getIcon() != null) {
38 ImageIcon i = new ImageProvider(info.getIcon()).setOptional(true).
39 setMaxHeight(MAX_ICON_SIZE).setMaxWidth(MAX_ICON_SIZE).get();
40 if (i != null) {
41 putValue(Action.SMALL_ICON, i);
42 }
43 }
44 } catch (Exception ex) {
45 throw new RuntimeException(ex.getMessage(), ex);
46 }
47 }
48
49 @Override
50 public void actionPerformed(ActionEvent e) {
51 if (!isEnabled()) return;
52 try {
53 final ImageryInfo infoToAdd = ImageryType.WMS_ENDPOINT.equals(info.getImageryType())
54 ? getWMSLayerInfo() : info;
55 if (infoToAdd != null) {
56 Main.main.addLayer(ImageryLayer.create(infoToAdd));
57 AlignImageryPanel.addNagPanelIfNeeded();
58 }
59 } catch (IllegalArgumentException ex) {
60 if (ex.getMessage() == null || ex.getMessage().isEmpty()) {
61 throw ex;
62 } else {
63 JOptionPane.showMessageDialog(Main.parent,
64 ex.getMessage(), tr("Error"),
65 JOptionPane.ERROR_MESSAGE);
66 }
67 }
68 }
69
70 protected ImageryInfo getWMSLayerInfo() {
71 try {
72 assert (ImageryType.WMS_ENDPOINT.equals(info.getImageryType()));
73 final WMSImagery wms = new WMSImagery();
74 wms.attemptGetCapabilities(info.getUrl());
75
76 System.out.println(wms.getLayers());
77 final WMSLayerTree tree = new WMSLayerTree();
78 tree.updateTree(wms);
79
80 if (1 != new ExtendedDialog(Main.parent, tr("Select WMS layers"), new String[]{tr("Add layers"), tr("Cancel")}) {{
81 final JScrollPane scrollPane = new JScrollPane(tree.getLayerTree());
82 setContent(scrollPane);
83 scrollPane.setPreferredSize(new Dimension(400, 400));
84 }}.showDialog().getValue()) {
85 return null;
86 }
87
88 String url = wms.buildGetMapUrl(tree.getSelectedLayers());
89 return new ImageryInfo(info.getName(), url, "wms", info.getEulaAcceptanceRequired(), info.getCookies());
90 } // exception handling from AddWMSLayerPanel.java
91 catch (MalformedURLException ex) {
92 JOptionPane.showMessageDialog(Main.parent, tr("Invalid service URL."),
93 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
94 } catch (IOException ex) {
95 JOptionPane.showMessageDialog(Main.parent, tr("Could not retrieve WMS layer list."),
96 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
97 } catch (WMSImagery.WMSGetCapabilitiesException ex) {
98 JOptionPane.showMessageDialog(Main.parent, tr("Could not parse WMS layer list."),
99 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
100 System.err.println("Could not parse WMS layer list. Incoming data:");
101 System.err.println(ex.getIncomingData());
102 }
103 return null;
104 }
105
106 protected boolean isLayerAlreadyPresent() {
107 if (Main.isDisplayingMapView()) {
108 for (ImageryLayer layer : Main.map.mapView.getLayersOfType(ImageryLayer.class)) {
109 if (info.equals(layer.getInfo())) {
110 return true;
111 }
112 }
113 }
114 return false;
115 }
116
117 @Override
118 protected void updateEnabledState() {
119 // never enable blacklisted entries. Do not add same imagery layer twice (fix #2519)
120 if (info.isBlacklisted() /*|| isLayerAlreadyPresent()*/) { // FIXME check disabled to allow several instances with different settings (see #7981)
121 setEnabled(false);
122 } else if (info.getImageryType() == ImageryType.TMS || info.getImageryType() == ImageryType.BING || info.getImageryType() == ImageryType.SCANEX) {
123 setEnabled(true);
124 } else if (Main.isDisplayingMapView() && !Main.map.mapView.getAllLayers().isEmpty()) {
125 setEnabled(true);
126 } else {
127 setEnabled(false);
128 }
129 }
130}
Note: See TracBrowser for help on using the repository browser.