source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/imagery/WMSLayerTree.java@ 11289

Last change on this file since 11289 was 8840, checked in by Don-vip, 9 years ago

sonar - squid:S3052 - Fields should not be initialized to default values

  • Property svn:eol-style set to native
File size: 5.1 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.Component;
7import java.util.LinkedList;
8import java.util.List;
9
10import javax.swing.JOptionPane;
11import javax.swing.JTree;
12import javax.swing.event.TreeSelectionEvent;
13import javax.swing.event.TreeSelectionListener;
14import javax.swing.tree.DefaultMutableTreeNode;
15import javax.swing.tree.DefaultTreeCellRenderer;
16import javax.swing.tree.DefaultTreeModel;
17import javax.swing.tree.MutableTreeNode;
18import javax.swing.tree.TreePath;
19
20import org.openstreetmap.josm.io.imagery.WMSImagery;
21
22/**
23 * The layer tree of a WMS server.
24 */
25public class WMSLayerTree {
26 private final MutableTreeNode treeRootNode = new DefaultMutableTreeNode();
27 private final DefaultTreeModel treeData = new DefaultTreeModel(treeRootNode);
28 private final JTree layerTree = new JTree(treeData);
29 private final List<WMSImagery.LayerDetails> selectedLayers = new LinkedList<>();
30 private boolean previouslyShownUnsupportedCrsError;
31
32 /**
33 * Returns the root node.
34 * @return The root node
35 */
36 public MutableTreeNode getTreeRootNode() {
37 return treeRootNode;
38 }
39
40 /**
41 * Returns the {@code JTree}.
42 * @return The {@code JTree}
43 */
44 public JTree getLayerTree() {
45 return layerTree;
46 }
47
48 /**
49 * Returns the list of selected layers.
50 * @return the list of selected layers
51 */
52 public List<WMSImagery.LayerDetails> getSelectedLayers() {
53 return selectedLayers;
54 }
55
56 /**
57 * Constructs a new {@code WMSLayerTree}.
58 */
59 public WMSLayerTree() {
60 layerTree.setCellRenderer(new LayerTreeCellRenderer());
61 layerTree.addTreeSelectionListener(new WMSTreeSelectionListener());
62 }
63
64 void addLayersToTreeData(MutableTreeNode parent, List<WMSImagery.LayerDetails> layers) {
65 for (WMSImagery.LayerDetails layerDetails : layers) {
66 DefaultMutableTreeNode treeNode = new DefaultMutableTreeNode(layerDetails);
67 addLayersToTreeData(treeNode, layerDetails.children);
68 treeData.insertNodeInto(treeNode, parent, 0);
69 }
70 }
71
72 /**
73 * Updates the whole tree with the given WMS imagery info.
74 * @param wms The imagery info for a given WMS server
75 */
76 public void updateTree(WMSImagery wms) {
77 treeRootNode.setUserObject(wms.getServiceUrl().getHost());
78 updateTreeList(wms.getLayers());
79 }
80
81 /**
82 * Updates the list of WMS layers.
83 * @param layers The list of layers to add to the root node
84 */
85 public void updateTreeList(List<WMSImagery.LayerDetails> layers) {
86 addLayersToTreeData(getTreeRootNode(), layers);
87 getLayerTree().expandRow(0);
88 getLayerTree().expandRow(1);
89 }
90
91 private static class LayerTreeCellRenderer extends DefaultTreeCellRenderer {
92 @Override
93 public Component getTreeCellRendererComponent(JTree tree, Object value,
94 boolean sel, boolean expanded, boolean leaf, int row,
95 boolean hasFocus) {
96 super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf,
97 row, hasFocus);
98 DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) value;
99 Object userObject = treeNode.getUserObject();
100 if (userObject instanceof WMSImagery.LayerDetails) {
101 WMSImagery.LayerDetails layer = (WMSImagery.LayerDetails) userObject;
102 setEnabled(layer.isSupported());
103 }
104 return this;
105 }
106 }
107
108 private class WMSTreeSelectionListener implements TreeSelectionListener {
109
110 @Override
111 public void valueChanged(TreeSelectionEvent e) {
112 TreePath[] selectionRows = layerTree.getSelectionPaths();
113 if (selectionRows == null) {
114 return;
115 }
116
117 selectedLayers.clear();
118 for (TreePath i : selectionRows) {
119 Object userObject = ((DefaultMutableTreeNode) i.getLastPathComponent()).getUserObject();
120 if (userObject instanceof WMSImagery.LayerDetails) {
121 WMSImagery.LayerDetails detail = (WMSImagery.LayerDetails) userObject;
122 if (!detail.isSupported()) {
123 layerTree.removeSelectionPath(i);
124 if (!previouslyShownUnsupportedCrsError) {
125 JOptionPane.showMessageDialog(null, tr("That layer does not support any of JOSM''s projections,\n" +
126 "so you can not use it. This message will not show again."),
127 tr("WMS Error"), JOptionPane.ERROR_MESSAGE);
128 previouslyShownUnsupportedCrsError = true;
129 }
130 } else if (detail.ident != null) {
131 selectedLayers.add(detail);
132 }
133 }
134 }
135 layerTree.firePropertyChange("selectedLayers", /*dummy values*/ false, true);
136 }
137 }
138}
Note: See TracBrowser for help on using the repository browser.