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}