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.Collection; 008import java.util.Collections; 009import java.util.LinkedHashMap; 010import java.util.Map; 011 012import javax.swing.JCheckBox; 013import javax.swing.JLabel; 014import javax.swing.JPanel; 015import javax.swing.SwingConstants; 016 017import org.openstreetmap.josm.data.Preferences; 018import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry; 019import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer; 020import org.openstreetmap.josm.gui.layer.ImageryLayer; 021import org.openstreetmap.josm.gui.layer.Layer; 022import org.openstreetmap.josm.gui.layer.TMSLayer; 023import org.openstreetmap.josm.gui.layer.WMSLayer; 024import org.openstreetmap.josm.gui.layer.WMTSLayer; 025import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport; 026import org.openstreetmap.josm.tools.GBC; 027import org.w3c.dom.Element; 028 029/** 030 * Session exporter for TMSLayer and WMSLayer. 031 */ 032public class ImagerySessionExporter implements SessionLayerExporter { 033 034 private ImageryLayer layer; 035 private JCheckBox export; 036 037 public ImagerySessionExporter(ImageryLayer layer) { 038 this.layer = layer; 039 } 040 041 public ImagerySessionExporter(TMSLayer layer) { 042 this((ImageryLayer) layer); 043 } 044 045 public ImagerySessionExporter(WMSLayer layer) { 046 this((ImageryLayer) layer); 047 } 048 049 public ImagerySessionExporter(WMTSLayer layer) { 050 this((ImageryLayer) layer); 051 } 052 053 @Override 054 public Collection<Layer> getDependencies() { 055 return Collections.emptySet(); 056 } 057 058 @Override 059 public Component getExportPanel() { 060 final JPanel p = new JPanel(new GridBagLayout()); 061 export = new JCheckBox(); 062 export.setSelected(true); 063 final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT); 064 lbl.setToolTipText(layer.getToolTipText()); 065 lbl.setLabelFor(export); 066 p.add(export, GBC.std()); 067 p.add(lbl, GBC.std()); 068 p.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL)); 069 return p; 070 } 071 072 @Override 073 public boolean shallExport() { 074 return export.isSelected(); 075 } 076 077 @Override 078 public boolean requiresZip() { 079 return false; 080 } 081 082 @Override 083 public Element export(ExportSupport support) throws IOException { 084 Element layerElem = support.createElement("layer"); 085 layerElem.setAttribute("type", "imagery"); 086 layerElem.setAttribute("version", "0.1"); 087 ImageryPreferenceEntry e = new ImageryPreferenceEntry(layer.getInfo()); 088 Map<String, String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class)); 089 if (layer instanceof AbstractTileSourceLayer) { 090 AbstractTileSourceLayer tsLayer = (AbstractTileSourceLayer) layer; 091 data.put("automatic-downloading", Boolean.toString(tsLayer.autoLoad)); 092 data.put("automatically-change-resolution", Boolean.toString(tsLayer.autoZoom)); 093 data.put("show-errors", Boolean.toString(tsLayer.showErrors)); 094 } 095 data.put("dx", String.valueOf(layer.getDx())); 096 data.put("dy", String.valueOf(layer.getDy())); 097 for (Map.Entry<String, String> entry : data.entrySet()) { 098 Element attrElem = support.createElement(entry.getKey()); 099 layerElem.appendChild(attrElem); 100 attrElem.appendChild(support.createTextNode(entry.getValue())); 101 } 102 return layerElem; 103 } 104 105}