source: josm/trunk/src/org/openstreetmap/josm/io/session/ImagerySessionExporter.java@ 12604

Last change on this file since 12604 was 12604, checked in by bastiK, 7 years ago

fixed #14524 - save imagery layer zoom level to session (if needed)

  • Property svn:eol-style set to native
File size: 4.8 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.io.session;
3
4import java.awt.Component;
5import java.awt.GridBagLayout;
6import java.io.IOException;
7import java.util.HashMap;
8import java.util.LinkedHashMap;
9import java.util.Map;
10
11import javax.swing.JLabel;
12import javax.swing.JPanel;
13import javax.swing.SwingConstants;
14
15import org.openstreetmap.josm.data.Preferences;
16import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
17import org.openstreetmap.josm.data.imagery.OffsetBookmark;
18import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
19import org.openstreetmap.josm.gui.layer.ImageryLayer;
20import org.openstreetmap.josm.gui.layer.TMSLayer;
21import org.openstreetmap.josm.gui.layer.WMSLayer;
22import org.openstreetmap.josm.gui.layer.WMTSLayer;
23import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings;
24import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport;
25import org.openstreetmap.josm.tools.GBC;
26import org.openstreetmap.josm.tools.Utils;
27import org.w3c.dom.Element;
28
29/**
30 * Session exporter for {@link TMSLayer}, {@link WMSLayer} and {@link WMTSLayer}.
31 * @since 5391
32 */
33public class ImagerySessionExporter extends AbstractSessionExporter<ImageryLayer> {
34
35 /**
36 * Constructs a new {@code ImagerySessionExporter}.
37 * @param layer imagery layer to export
38 */
39 public ImagerySessionExporter(ImageryLayer layer) { // NO_UCD (unused code)
40 super(layer);
41 }
42
43 /**
44 * Constructs a new {@code ImagerySessionExporter}.
45 * @param layer TMS layer to export
46 */
47 public ImagerySessionExporter(TMSLayer layer) { // NO_UCD (unused code)
48 super(layer);
49 }
50
51 /**
52 * Constructs a new {@code ImagerySessionExporter}.
53 * @param layer WMS layer to export
54 */
55 public ImagerySessionExporter(WMSLayer layer) { // NO_UCD (unused code)
56 super(layer);
57 }
58
59 /**
60 * Constructs a new {@code ImagerySessionExporter}.
61 * @param layer WMTS layer to export
62 */
63 public ImagerySessionExporter(WMTSLayer layer) { // NO_UCD (unused code)
64 super(layer);
65 }
66
67 @Override
68 public Component getExportPanel() {
69 final JPanel p = new JPanel(new GridBagLayout());
70 export.setSelected(true);
71 final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT);
72 lbl.setToolTipText(layer.getToolTipText());
73 lbl.setLabelFor(export);
74 p.add(export, GBC.std());
75 p.add(lbl, GBC.std());
76 p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
77 return p;
78 }
79
80 @Override
81 public Element export(ExportSupport support) throws IOException {
82 Element layerElem = support.createElement("layer");
83 layerElem.setAttribute("type", "imagery");
84 layerElem.setAttribute("version", "0.1");
85 ImageryPreferenceEntry e = new ImageryPreferenceEntry(layer.getInfo());
86 Map<String, String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class));
87 Utils.instanceOfThen(layer, AbstractTileSourceLayer.class, tsLayer -> {
88 data.putAll(tsLayer.getDisplaySettings().toPropertiesMap());
89 if (!tsLayer.getDisplaySettings().isAutoZoom()) {
90 data.put("zoom-level", Integer.toString(tsLayer.getZoomLevel()));
91 }
92 });
93 addAttributes(layerElem, data, support);
94 Utils.instanceOfThen(layer, AbstractTileSourceLayer.class, tsLayer -> {
95 OffsetBookmark offset = tsLayer.getDisplaySettings().getOffsetBookmark();
96 if (offset != null) {
97 Map<String, String> offsetProps = offset.toPropertiesMap();
98 Element offsetEl = support.createElement("offset");
99 layerElem.appendChild(offsetEl);
100 addAttributes(offsetEl, offsetProps, support);
101 }
102 });
103 ImageryFilterSettings filters = layer.getFilterSettings();
104 if (filters != null) {
105 Map<String, String> filterProps = new HashMap<>();
106 filters.getProcessors().stream()
107 .flatMap(Utils.castToStream(SessionAwareReadApply.class))
108 .forEach(proc -> filterProps.putAll(proc.toPropertiesMap()));
109 if (!filterProps.isEmpty()) {
110 Element filterEl = support.createElement("filters");
111 layerElem.appendChild(filterEl);
112 addAttributes(filterEl, filterProps, support);
113 }
114 }
115 return layerElem;
116 }
117
118 private static void addAttributes(Element element, Map<String, String> props, ExportSupport support) {
119 for (Map.Entry<String, String> entry : props.entrySet()) {
120 Element attrElem = support.createElement(entry.getKey());
121 element.appendChild(attrElem);
122 attrElem.appendChild(support.createTextNode(entry.getValue()));
123 }
124 }
125}
Note: See TracBrowser for help on using the repository browser.