Ignore:
Timestamp:
2018-05-12T14:18:57+02:00 (6 years ago)
Author:
wiktorn
Message:

Imagery definition refactor

Extend imagery definitions by:

  • allowing setting default layers for WMS_ENDPOINT and WMTS
  • allowing setting minimum expires time for tile for this imagery
  • allowing setting custom headers that will be sent for all requests

(get map, get capabilities) for this imagery

Additional changes in code:

  • use TileJobOptions to pass miscellaneous options to loaders
  • refactor WMSImagery to use SAX parser

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

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java

    r13434 r13733  
    2121import java.util.Set;
    2222import java.util.concurrent.CopyOnWriteArrayList;
     23import java.util.concurrent.TimeUnit;
    2324
    2425import javax.swing.ButtonModel;
     
    158159        TileLoaderFactory cachedLoaderFactory = AbstractCachedTileSourceLayer.getTileLoaderFactory("TMS", TMSCachedTileLoader.class);
    159160        if (cachedLoaderFactory != null) {
    160             cachedLoader = cachedLoaderFactory.makeTileLoader(this, headers);
     161            cachedLoader = cachedLoaderFactory.makeTileLoader(this, headers, TimeUnit.HOURS.toSeconds(1));
    161162        } else {
    162163            cachedLoader = null;
  • trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java

    r13674 r13733  
    203203    // prepared to be moved to the painter
    204204    protected TileCoordinateConverter coordinateConverter;
     205    private final long minimumTileExpire;
    205206
    206207    /**
     
    214215        getFilterSettings().addFilterChangeListener(this);
    215216        getDisplaySettings().addSettingsChangeListener(this);
     217        this.minimumTileExpire = info.getMinimumTileExpire();
    216218    }
    217219
     
    274276        Map<String, String> headers = getHeaders(tileSource);
    275277
    276         tileLoader = getTileLoaderFactory().makeTileLoader(this, headers);
     278        tileLoader = getTileLoaderFactory().makeTileLoader(this, headers, minimumTileExpire);
    277279
    278280        try {
     
    17591761        public PrecacheTask(ProgressMonitor progressMonitor) {
    17601762            this.progressMonitor = progressMonitor;
    1761             this.tileLoader = getTileLoaderFactory().makeTileLoader(this, getHeaders(tileSource));
     1763            this.tileLoader = getTileLoaderFactory().makeTileLoader(this, getHeaders(tileSource), minimumTileExpire);
    17621764            if (this.tileLoader instanceof TMSCachedTileLoader) {
    17631765                ((TMSCachedTileLoader) this.tileLoader).setDownloadExecutor(
  • trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java

    r13244 r13733  
    196196        switch(info.getImageryType()) {
    197197        case WMS:
     198        case WMS_ENDPOINT:
    198199            return new WMSLayer(info);
    199200        case WMTS:
  • trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java

    r13674 r13733  
    2525import org.openstreetmap.josm.data.imagery.TemplatedWMSTileSource;
    2626import org.openstreetmap.josm.data.imagery.WMSCachedTileLoader;
     27import org.openstreetmap.josm.data.imagery.WMSEndpointTileSource;
    2728import org.openstreetmap.josm.data.preferences.BooleanProperty;
    2829import org.openstreetmap.josm.data.preferences.IntegerProperty;
     
    5758    private static final String CACHE_REGION_NAME = "WMS";
    5859
    59     private final List<String> serverProjections;
     60    private List<String> serverProjections;
    6061
    6162    /**
     
    6566    public WMSLayer(ImageryInfo info) {
    6667        super(info);
    67         CheckParameterUtil.ensureThat(info.getImageryType() == ImageryType.WMS, "ImageryType is WMS");
     68        CheckParameterUtil.ensureThat(info.getImageryType() == ImageryType.WMS || info.getImageryType() == ImageryType.WMS_ENDPOINT, "ImageryType is WMS");
    6869        CheckParameterUtil.ensureParameterNotNull(info.getUrl(), "info.url");
    69         TemplatedWMSTileSource.checkUrl(info.getUrl());
     70        if (info.getImageryType() == ImageryType.WMS) {
     71            TemplatedWMSTileSource.checkUrl(info.getUrl());
     72
     73        }
    7074        this.serverProjections = new ArrayList<>(info.getServerProjections());
    7175    }
     
    8993    @Override
    9094    protected AbstractWMSTileSource getTileSource() {
    91         AbstractWMSTileSource tileSource = new TemplatedWMSTileSource(
    92                 info, chooseProjection(Main.getProjection()));
     95        AbstractWMSTileSource tileSource;
     96        if (info.getImageryType() == ImageryType.WMS) {
     97            tileSource = new TemplatedWMSTileSource(info, chooseProjection(Main.getProjection()));
     98        } else {
     99            /*
     100             *  Chicken-and-egg problem. We want to create tile source, but supported projections we can get only
     101             *  from this tile source. So create tilesource first with dummy Main.getProjection(), and then update
     102             *  once we update server projections.
     103             *
     104             *  Thus:
     105             *  * it is not required to provide projections for wms_endpoint imagery types
     106             *  * we always use current definitions returned by server
     107             */
     108            WMSEndpointTileSource endpointTileSource = new WMSEndpointTileSource(info, Main.getProjection());
     109            this.serverProjections = endpointTileSource.getServerProjections();
     110            endpointTileSource.setTileProjection(chooseProjection(Main.getProjection()));
     111            tileSource = endpointTileSource;
     112        }
    93113        info.setAttribution(tileSource);
    94114        return tileSource;
  • trunk/src/org/openstreetmap/josm/gui/layer/WMTSLayer.java

    r12630 r13733  
    1313import org.openstreetmap.josm.data.imagery.WMSCachedTileLoader;
    1414import org.openstreetmap.josm.data.imagery.WMTSTileSource;
     15import org.openstreetmap.josm.data.imagery.WMTSTileSource.WMTSGetCapabilitiesException;
    1516import org.openstreetmap.josm.data.projection.Projection;
    1617import org.openstreetmap.josm.gui.MainApplication;
     
    6465            }
    6566            return null;
    66         } catch (IOException e) {
     67        } catch (IOException | WMTSGetCapabilitiesException e) {
    6768            Logging.warn(e);
    6869            throw new IllegalArgumentException(e);
Note: See TracChangeset for help on using the changeset viewer.