Changeset 3826 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2011-01-28T00:49:15+01:00 (13 years ago)
Author:
framm
Message:

Add a "blacklisted" property to imagery layers; set this property from a
compiled-in list of regular expressions; disable blacklisted entries in
the Imagery menu.

Location:
trunk/src/org/openstreetmap/josm
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/AddImageryLayerAction.java

    r3733 r3826  
    3131    @Override
    3232    protected void updateEnabledState() {
    33         setEnabled(info.getImageryType() == ImageryType.TMS
    34                 || info.getImageryType() == ImageryType.BING
    35                 || (Main.map != null && Main.map.mapView != null
    36                         && !Main.map.mapView.getAllLayers().isEmpty()));
     33        // never enable blacklisted entries.
     34        if (info.isBlacklisted()) {
     35            setEnabled(false);
     36        } else if (info.getImageryType() == ImageryType.TMS || info.getImageryType() == ImageryType.BING) {
     37            setEnabled(true);
     38        } else if (Main.map != null && Main.map.mapView != null && !Main.map.mapView.getAllLayers().isEmpty()) {
     39            setEnabled(true);
     40        } else {
     41            setEnabled(false);
     42        }
    3743    }
    3844}
  • trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java

    r3720 r3826  
    66
    77/**
    8  * Class that stores info about a WMS server.
     8 * Class that stores info about an image background layer.
    99 *
    1010 * @author Frederik Ramm <frederik@remote.org>
    1111 */
    1212public class ImageryInfo implements Comparable<ImageryInfo> {
     13
    1314    public enum ImageryType {
    1415        WMS("wms"),
     
    2627    }
    2728
     29    private final static String[] BLACKLIST_REGEXES = {
     30        // These entries are for Google tile servers (names and IPV4 numbers)
     31        ".*\\.google\\.com/.*",
     32        ".*209\\.85\\.2\\d\\d.*",
     33        ".*209\\.85\\.1[3-9]\\d.*",
     34        ".*209\\.85\\.12[89].*"
     35    };
     36
    2837    String name;
    29     String url=null;
     38    String url = null;
    3039    String cookies = null;
    3140    public final String eulaAcceptanceRequired;
     
    3342    double pixelPerDegree = 0.0;
    3443    int maxZoom = 0;
     44    private boolean blacklisted = false;
    3545
    3646    public ImageryInfo(String name) {
     
    4151    public ImageryInfo(String name, String url) {
    4252        this.name=name;
    43         setURL(url);
     53        setUrl(url);
    4454        this.eulaAcceptanceRequired = null;
    4555    }
     
    4757    public ImageryInfo(String name, String url, String eulaAcceptanceRequired) {
    4858        this.name=name;
    49         setURL(url);
     59        setUrl(url);
    5060        this.eulaAcceptanceRequired = eulaAcceptanceRequired;
    5161    }
     
    5363    public ImageryInfo(String name, String url, String eulaAcceptanceRequired, String cookies) {
    5464        this.name=name;
    55         setURL(url);
     65        setUrl(url);
    5666        this.cookies=cookies;
    5767        this.eulaAcceptanceRequired = eulaAcceptanceRequired;
     
    6070    public ImageryInfo(String name, String url, String cookies, double pixelPerDegree) {
    6171        this.name=name;
    62         setURL(url);
     72        setUrl(url);
    6373        this.cookies=cookies;
    6474        this.pixelPerDegree=pixelPerDegree;
     
    7181        String e4 = null;
    7282        if(url != null && !url.isEmpty()) {
    73             e2 = getFullURL();
     83            e2 = getFullUrl();
    7484        }
    7585        if(cookies != null && !cookies.isEmpty()) {
     
    110120        this.name=array.get(0);
    111121        if(array.size() >= 2) {
    112             setURL(array.get(1));
     122            setUrl(array.get(1));
    113123        }
    114124        if(array.size() >= 3) {
     
    160170    }
    161171
    162     public void setURL(String url) {
     172    public void setUrl(String url) {
     173
     174        // determine if URL is on blacklist and flag accordingly.
     175        blacklisted = false;
     176        for (String blacklistRegex : BLACKLIST_REGEXES) {
     177            if (url.matches(blacklistRegex)) {
     178                blacklisted = true;
     179                System.err.println("layer '" + name + "' uses blacklisted URL");
     180                break;
     181            }
     182        }
     183
    163184        for (ImageryType type : ImageryType.values()) {
    164185            if (url.startsWith(type.getUrlString() + ":")) {
     
    182203    }
    183204
    184     public String getURL() {
     205    public String getUrl() {
    185206        return this.url;
    186207    }
     
    198219    }
    199220
    200     public String getFullURL() {
     221    public String getFullUrl() {
    201222        return imageryType.getUrlString() + ":" + url;
    202223    }
     
    229250        return url != null && url.contains("{") && url.contains("}");
    230251    }
     252
     253    public boolean isBlacklisted() {
     254        return blacklisted;
     255    }
    231256}
  • trunk/src/org/openstreetmap/josm/data/imagery/ImageryLayerInfo.java

    r3737 r3826  
    2020
    2121public class ImageryLayerInfo {
     22
    2223    public static final ImageryLayerInfo instance = new ImageryLayerInfo();
    2324    ArrayList<ImageryInfo> layers = new ArrayList<ImageryInfo>();
    2425    ArrayList<ImageryInfo> defaultLayers = new ArrayList<ImageryInfo>();
    25     private final static String[] DEFAULT_LAYER_SITES
    26     = { "http://josm.openstreetmap.de/maps"};
     26
     27    private final static String[] DEFAULT_LAYER_SITES = {
     28        "http://josm.openstreetmap.de/maps"
     29    };
    2730
    2831    public void load() {
     
    3235        for(Collection<String> c : Main.pref.getArray("imagery.layers",
    3336                Collections.<Collection<String>>emptySet())) {
    34             layers.add(new ImageryInfo(c));
     37            add(new ImageryInfo(c));
    3538        }
    3639
     
    6063                        String url = val[2];
    6164                        String eulaAcceptanceRequired = null;
     65
    6266                        if (val.length == 4) {
    6367                            // 4th parameter optional for license agreement (EULA)
    6468                            eulaAcceptanceRequired = val[3];
    6569                        }
     70
    6671                        defaultLayers.add(new ImageryInfo(name, url, eulaAcceptanceRequired));
    6772
    68                         if(force) {
     73                        if (force) {
    6974                            defaultsSave.add(url);
    70                             if(!defaults.contains(url)) {
    71                                 for(ImageryInfo i : layers) {
    72                                     if ((i.getImageryType() == ImageryType.WMS && url.equals(i.getURL()))
    73                                             || url.equals(i.getFullURL())) {
     75                            if (!defaults.contains(url)) {
     76                                for (ImageryInfo i : layers) {
     77                                    if ((i.getImageryType() == ImageryType.WMS && url.equals(i.getUrl()))
     78                                            || url.equals(i.getFullUrl())) {
    7479                                        force = false;
    7580                                    }
    7681                                }
    77                                 if(force) {
    78                                     layers.add(new ImageryInfo(name, url));
     82                                if (force) {
     83                                    add(new ImageryInfo(name, url));
    7984                                }
    8085                            }
  • trunk/src/org/openstreetmap/josm/gui/bbox/SlippyMapBBoxChooser.java

    r3777 r3826  
    9999            List<TileSource> sources = new ArrayList<TileSource>();
    100100            for (ImageryInfo info : ImageryLayerInfo.instance.getLayers()) {
    101                 if (existingSlippyMapUrls.contains(info.getURL())) {
     101                if (existingSlippyMapUrls.contains(info.getUrl())) {
    102102                    continue;
    103103                }
  • trunk/src/org/openstreetmap/josm/gui/layer/TMSLayer.java

    r3787 r3826  
    232232    public static TileSource getTileSource(ImageryInfo info) {
    233233        if (info.getImageryType() == ImageryType.TMS) {
    234             if(ImageryInfo.isUrlWithPatterns(info.getURL()))
    235                 return new TemplatedTMSTileSource(info.getName(), info.getURL(), info.getMaxZoom());
     234            if(ImageryInfo.isUrlWithPatterns(info.getUrl()))
     235                return new TemplatedTMSTileSource(info.getName(), info.getUrl(), info.getMaxZoom());
    236236            else
    237                 return new TMSTileSource(info.getName(),info.getURL(), info.getMaxZoom());
     237                return new TMSTileSource(info.getName(),info.getUrl(), info.getMaxZoom());
    238238        } else if (info.getImageryType() == ImageryType.BING)
    239239            return new BingAerialTileSource();
  • trunk/src/org/openstreetmap/josm/gui/layer/WMSLayer.java

    r3809 r3826  
    124124        resolution = mv.getDist100PixelText();
    125125
    126         if(info.getURL() != null) {
    127             WMSGrabber.getProjection(info.getURL(), true);
     126        if(info.getUrl() != null) {
     127            WMSGrabber.getProjection(info.getUrl(), true);
    128128            startGrabberThreads();
    129             if(info.getImageryType() == ImageryType.WMS && !ImageryInfo.isUrlWithPatterns(info.getURL())) {
    130                 if (!(info.getURL().endsWith("&") || info.getURL().endsWith("?"))) {
    131                     if (!confirmMalformedUrl(info.getURL())) {
    132                         System.out.println(tr("Warning: WMS layer deactivated because of malformed base url ''{0}''", info.getURL()));
     129            if(info.getImageryType() == ImageryType.WMS && !ImageryInfo.isUrlWithPatterns(info.getUrl())) {
     130                if (!(info.getUrl().endsWith("&") || info.getUrl().endsWith("?"))) {
     131                    if (!confirmMalformedUrl(info.getUrl())) {
     132                        System.out.println(tr("Warning: WMS layer deactivated because of malformed base url ''{0}''", info.getUrl()));
    133133                        usesInvalidUrl = true;
    134134                        setName(getName() + tr("(deactivated)"));
     
    200200
    201201    @Override public void paint(Graphics2D g, final MapView mv, Bounds b) {
    202         if(info.getURL() == null || (usesInvalidUrl && !isInvalidUrlConfirmed)) return;
     202        if(info.getUrl() == null || (usesInvalidUrl && !isInvalidUrlConfirmed)) return;
    203203
    204204        settingsChanged = false;
     
    628628                    oos.writeDouble(info.getPixelPerDegree());
    629629                    oos.writeObject(info.getName());
    630                     oos.writeObject(info.getFullURL());
     630                    oos.writeObject(info.getFullUrl());
    631631                    oos.writeObject(images);
    632632                    oos.close();
     
    667667                info.setPixelPerDegree(ois.readDouble());
    668668                doSetName((String)ois.readObject());
    669                 info.setURL((String) ois.readObject());
     669                info.setUrl((String) ois.readObject());
    670670                images = (GeorefImage[][])ois.readObject();
    671671                ois.close();
     
    680680                settingsChanged = true;
    681681                mv.repaint();
    682                 if(info.getURL() != null)
     682                if(info.getUrl() != null)
    683683                {
    684684                    startGrabberThreads();
  • trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java

    r3816 r3826  
    587587                    return info.getName();
    588588                case 1:
    589                     return info.getFullURL();
     589                    return info.getFullUrl();
    590590                case 2:
    591591                    return (info.getImageryType() == ImageryType.WMS || info.getImageryType() == ImageryType.HTML) ?
     
    605605                    break;
    606606                case 1:
    607                     info.setURL((String)o);
     607                    info.setUrl((String)o);
    608608                    break;
    609609                case 2:
     
    654654                    return info.getName();
    655655                case 1:
    656                     return info.getFullURL();
     656                    return info.getFullUrl();
    657657                }
    658658                return null;
  • trunk/src/org/openstreetmap/josm/gui/preferences/ImagerySettingsMigration.java

    r3720 r3826  
    128128        HashSet<String> existingUrls = new HashSet<String>();
    129129        for (ImageryInfo info : layerInfo.getLayers()) {
    130             existingUrls.add(info.getFullURL());
     130            existingUrls.add(info.getFullUrl());
    131131        }
    132132        for(Collection<String> c : Main.pref.getArray("wmslayers",
    133133                Collections.<Collection<String>>emptySet())) {
    134134            ImageryInfo info = new ImageryInfo(c);
    135             if (!existingUrls.contains(info.getFullURL())) {
     135            if (!existingUrls.contains(info.getFullUrl())) {
    136136                layerInfo.add(info);
    137137            }
  • trunk/src/org/openstreetmap/josm/io/imagery/WMSGrabber.java

    r3808 r3826  
    4343    public WMSGrabber(MapView mv, WMSLayer layer) {
    4444        super(mv, layer);
    45         this.baseURL = layer.getInfo().getURL();
     45        this.baseURL = layer.getInfo().getUrl();
    4646        /* URL containing placeholders? */
    4747        urlWithPatterns = ImageryInfo.isUrlWithPatterns(baseURL);
Note: See TracChangeset for help on using the changeset viewer.