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