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.ImageryLayer; 020import org.openstreetmap.josm.gui.layer.Layer; 021import org.openstreetmap.josm.gui.layer.TMSLayer; 022import org.openstreetmap.josm.gui.layer.WMSLayer; 023import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport; 024import org.openstreetmap.josm.tools.GBC; 025import org.w3c.dom.Element; 026 027/** 028 * Session exporter for TMSLayer and WMSLayer. 029 */ 030public class ImagerySessionExporter implements SessionLayerExporter { 031 032 private ImageryLayer layer; 033 private JCheckBox export; 034 035 public ImagerySessionExporter(ImageryLayer layer) { 036 this.layer = layer; 037 } 038 039 public ImagerySessionExporter(TMSLayer layer) { 040 this((ImageryLayer) layer); 041 } 042 043 public ImagerySessionExporter(WMSLayer layer) { 044 this((ImageryLayer) layer); 045 } 046 047 @Override 048 public Collection<Layer> getDependencies() { 049 return Collections.emptySet(); 050 } 051 052 @Override 053 public Component getExportPanel() { 054 final JPanel p = new JPanel(new GridBagLayout()); 055 export = new JCheckBox(); 056 export.setSelected(true); 057 final JLabel lbl = new JLabel(layer.getName(), layer.getIcon(), SwingConstants.LEFT); 058 lbl.setToolTipText(layer.getToolTipText()); 059 p.add(export, GBC.std()); 060 p.add(lbl, GBC.std()); 061 p.add(GBC.glue(1,0), GBC.std().fill(GBC.HORIZONTAL)); 062 return p; 063 } 064 065 @Override 066 public boolean shallExport() { 067 return export.isSelected(); 068 } 069 070 @Override 071 public boolean requiresZip() { 072 return false; 073 } 074 075 @Override 076 public Element export(ExportSupport support) throws IOException { 077 Element layerElem = support.createElement("layer"); 078 layerElem.setAttribute("type", "imagery"); 079 layerElem.setAttribute("version", "0.1"); 080 ImageryPreferenceEntry e = new ImageryPreferenceEntry(layer.getInfo()); 081 Map<String,String> data = new LinkedHashMap<>(Preferences.serializeStruct(e, ImageryPreferenceEntry.class)); 082 if (layer instanceof WMSLayer) { 083 WMSLayer wms = (WMSLayer) layer; 084 data.put("automatic-downloading", Boolean.toString(wms.hasAutoDownload())); 085 data.put("automatically-change-resolution", Boolean.toString(wms.isAutoResolution())); 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 095}