Ignore:
Timestamp:
2018-05-12T14:19:28+02:00 (8 years ago)
Author:
wiktorn
Message:

GUI for imagery definitions refactor

Extend preferences panel by:

  • allowing setting default layers for WMS / WMTS
  • allowing setting minimum expires (expert mode)
  • allowing setting custom headers (expert mode)

See: #15981, #7953, #16224, #15940, #16249

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/preferences/imagery/AddWMTSLayerPanel.java

    r13591 r13734  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.Dimension;
     7import java.awt.GridBagLayout;
    68import java.io.IOException;
     9import java.util.Collections;
     10import java.util.List;
     11import java.util.Map.Entry;
    712
     13import javax.swing.JButton;
     14import javax.swing.JCheckBox;
    815import javax.swing.JLabel;
     16import javax.swing.JOptionPane;
     17import javax.swing.JPanel;
     18import javax.swing.JScrollPane;
     19import javax.swing.JTable;
    920
     21import org.openstreetmap.josm.data.imagery.DefaultLayer;
    1022import org.openstreetmap.josm.data.imagery.ImageryInfo;
    1123import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
     24import org.openstreetmap.josm.data.imagery.WMTSCapabilities;
    1225import org.openstreetmap.josm.data.imagery.WMTSTileSource;
     26import org.openstreetmap.josm.data.imagery.WMTSTileSource.Layer;
     27import org.openstreetmap.josm.data.imagery.WMTSTileSource.WMTSGetCapabilitiesException;
    1328import org.openstreetmap.josm.tools.GBC;
     29import org.openstreetmap.josm.tools.Logging;
    1430
    1531/**
     
    1935 */
    2036public class AddWMTSLayerPanel extends AddImageryPanel {
     37    private final transient JPanel layerPanel = new JPanel(new GridBagLayout());
     38    private transient JTable layerTable = null;
     39    private final JCheckBox setDefaultLayer = new JCheckBox(tr("Set default layer?"));
     40    private List<Entry<String, List<Layer>>> layers;
    2141
    2242    /**
     
    2949        rawUrl.setLineWrap(true);
    3050        rawUrl.setAlignmentY(TOP_ALIGNMENT);
     51        JButton getLayers = new JButton(tr("Get layers"));
     52        getLayers.setEnabled(setDefaultLayer.isSelected());
     53        setDefaultLayer.addActionListener(e -> {
     54                getLayers.setEnabled(setDefaultLayer.isSelected());
     55        });
     56        add(setDefaultLayer, GBC.eop().fill());
     57        add(getLayers, GBC.eop().fill());
     58        add(new JLabel(tr("Choose default layer")), GBC.eol().fill());
     59        layerPanel.setPreferredSize(new Dimension(250, 100));
     60        add(layerPanel, GBC.eol().fill());
     61
     62        addCommonSettings();
     63
    3164        add(new JLabel(tr("{0} Enter name for this layer", "3.")), GBC.eol());
    3265        add(name, GBC.eol().fill(GBC.HORIZONTAL));
    3366        registerValidableComponent(rawUrl);
     67
     68        getLayers.addActionListener(e -> {
     69            try {
     70                WMTSCapabilities capabilities = WMTSTileSource.getCapabilities(rawUrl.getText(), getCommonHeaders());
     71                layers = WMTSTileSource.groupLayersByNameAndTileMatrixSet(capabilities.getLayers());
     72                layerTable = WMTSTileSource.getLayerSelectionPanel(layers);
     73                layerPanel.removeAll();
     74                JScrollPane scrollPane = new JScrollPane(layerTable);
     75                scrollPane.setPreferredSize(new Dimension(100, 100));
     76                layerPanel.add(scrollPane, GBC.eol().fill());
     77                layerPanel.revalidate();
     78            } catch (Exception ex) {
     79                JOptionPane.showMessageDialog(
     80                        getParent(),
     81                        tr("Error getting layers: {0}", ex.getMessage()),
     82                        tr("WMTS Error"),
     83                        JOptionPane.ERROR_MESSAGE);
     84            }
     85        });
    3486    }
    3587
     
    3789    protected ImageryInfo getImageryInfo() {
    3890        ImageryInfo ret = new ImageryInfo(getImageryName(), "wmts:" + sanitize(getImageryRawUrl(), ImageryType.WMTS));
     91        if (setDefaultLayer.isSelected()) {
     92            if (layerTable == null) {
     93                // did not call get capabilities
     94                throw new RuntimeException("TODO");
     95            }
     96            int index = layerTable.getSelectedRow();
     97            if (index < 0) {
     98                throw new RuntimeException("TODO");
     99            }
     100            Layer selectedLayer = layers.get(layerTable.convertRowIndexToModel(index)).getValue().get(0);
     101            ret.setDefaultLayers(
     102                    Collections.<DefaultLayer> singletonList(
     103                            new DefaultLayer(
     104                                    ImageryType.WMTS,
     105                                    selectedLayer.getIdentifier(),
     106                                    selectedLayer.getStyle(),
     107                                    selectedLayer.getTileMatrixSet().getIdentifier()
     108                                    )
     109                            )
     110                    );
     111        }
     112        ret.setCustomHttpHeaders(getCommonHeaders());
     113        ret.setGeoreferenceValid(getCommonIsValidGeoreference());
    39114        ret.setImageryType(ImageryType.WMTS);
    40115        try {
    41116            new WMTSTileSource(ret); // check if constructor throws an error
    42         } catch (IOException e) {
     117        } catch (IOException | WMTSGetCapabilitiesException e) {
     118            Logging.warn(e);
    43119            throw new IllegalArgumentException(e); // if so, wrap exception, so proper message will be shown to the user
    44120        }
Note: See TracChangeset for help on using the changeset viewer.