Changeset 3826 in josm


Ignore:
Timestamp:
Jan 28, 2011 12:49:15 AM (2 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.