001    // License: GPL. For details, see LICENSE file.
002    package org.openstreetmap.josm.io.session;
003    
004    import java.awt.Component;
005    import java.awt.GridBagLayout;
006    import java.io.IOException;
007    import java.util.Collection;
008    import java.util.Collections;
009    import java.util.Map;
010    
011    import javax.swing.JCheckBox;
012    import javax.swing.JLabel;
013    import javax.swing.JPanel;
014    import javax.swing.SwingConstants;
015    
016    import org.openstreetmap.josm.data.Preferences;
017    import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryPreferenceEntry;
018    import org.openstreetmap.josm.gui.layer.ImageryLayer;
019    import org.openstreetmap.josm.gui.layer.Layer;
020    import org.openstreetmap.josm.gui.layer.TMSLayer;
021    import org.openstreetmap.josm.gui.layer.WMSLayer;
022    import org.openstreetmap.josm.io.session.SessionWriter.ExportSupport;
023    import org.openstreetmap.josm.tools.GBC;
024    import org.w3c.dom.Element;
025    
026    /**
027     * Session exporter for TMSLayer and WMSLayer.
028     */
029    public class ImagerySessionExporter implements SessionLayerExporter {
030    
031        private ImageryLayer layer;
032    
033        public ImagerySessionExporter(ImageryLayer layer) {
034            this.layer = layer;
035        }
036    
037        public ImagerySessionExporter(TMSLayer layer) {
038            this((ImageryLayer) layer);
039        }
040    
041        public ImagerySessionExporter(WMSLayer layer) {
042            this((ImageryLayer) layer);
043        }
044    
045        private JCheckBox export;
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 = Preferences.serializeStruct(e, ImageryPreferenceEntry.class);
082            for (Map.Entry<String,String> entry : data.entrySet()) {
083                Element attrElem = support.createElement(entry.getKey());
084                layerElem.appendChild(attrElem);
085                attrElem.appendChild(support.createTextNode(entry.getValue()));
086            }
087            return layerElem;
088        }
089    
090    }