001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.io.session; 003 004import java.awt.Component; 005import java.awt.GridBagLayout; 006import java.io.IOException; 007import java.util.LinkedHashMap; 008import java.util.Map; 009 010import javax.swing.JLabel; 011import javax.swing.JPanel; 012import javax.swing.SwingConstants; 013 014import org.openstreetmap.josm.data.Preferences; 015import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry; 016import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer; 017import org.openstreetmap.josm.gui.layer.ImageryLayer; 018import org.openstreetmap.josm.gui.layer.TMSLayer; 019import org.openstreetmap.josm.gui.layer.WMSLayer; 020import org.openstreetmap.josm.gui.layer.WMTSLayer; 021import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport; 022import org.openstreetmap.josm.tools.GBC; 023import org.w3c.dom.Element; 024 025/** 026 * Session exporter for {@link TMSLayer}, {@link WMSLayer} and {@link WMTSLayer}. 027 * @since 5391 028 */ 029public class ImagerySessionExporter extends AbstractSessionExporter<ImageryLayer> { 030 031 /** 032 * Constructs a new {@code ImagerySessionExporter}. 033 * @param layer imagery layer to export 034 */ 035 public ImagerySessionExporter(ImageryLayer layer) { // NO_UCD (unused code) 036 super(layer); 037 } 038 039 /** 040 * Constructs a new {@code ImagerySessionExporter}. 041 * @param layer TMS layer to export 042 */ 043 public ImagerySessionExporter(TMSLayer layer) { // NO_UCD (unused code) 044 super(layer); 045 } 046 047 /** 048 * Constructs a new {@code ImagerySessionExporter}. 049 * @param layer WMS layer to export 050 */ 051 public ImagerySessionExporter(WMSLayer layer) { // NO_UCD (unused code) 052 super(layer); 053 } 054 055 /** 056 * Constructs a new {@code ImagerySessionExporter}. 057 * @param layer WMTS layer to export 058 */ 059 public ImagerySessionExporter(WMTSLayer layer) { // NO_UCD (unused code) 060 super(layer); 061 } 062 063 @Override 064 public Component getExportPanel() { 065 final JPanel p = new JPanel(new GridBagLayout()); 066 export.setSelected(true); 067 final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT); 068 lbl.setToolTipText(layer.getToolTipText()); 069 lbl.setLabelFor(export); 070 p.add(export, GBC.std()); 071 p.add(lbl, GBC.std()); 072 p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL)); 073 return p; 074 } 075 076 @Override 077 public Element export(ExportSupport support) throws IOException { 078 Element layerElem = support.createElement("layer"); 079 layerElem.setAttribute("type", "imagery"); 080 layerElem.setAttribute("version", "0.1"); 081 ImageryPreferenceEntry e = new ImageryPreferenceEntry(layer.getInfo()); 082 Map<String, String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class)); 083 if (layer instanceof AbstractTileSourceLayer) { 084 AbstractTileSourceLayer<?> tsLayer = (AbstractTileSourceLayer<?>) layer; 085 tsLayer.getDisplaySettings().storeTo(data); 086 } 087 for (Map.Entry<String, String> entry : data.entrySet()) { 088 Element attrElem = support.createElement(entry.getKey()); 089 layerElem.appendChild(attrElem); 090 attrElem.appendChild(support.createTextNode(entry.getValue())); 091 } 092 return layerElem; 093 } 094}