Changeset 9658 in josm for trunk


Ignore:
Timestamp:
2016-01-27T22:27:54+01:00 (9 years ago)
Author:
stoecker
Message:

see #12313 - support mirror URLs in editor compare and JOSM imagery loader

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/scripts/sync_editor_imagery_index.groovy

    r9653 r9658  
    4545
    4646    static def options
    47    
     47
    4848    /**
    4949     * Main method.
     
    5353        def script = new sync_editor_imagery_index()
    5454        script.loadSkip()
     55        script.start()
    5556        script.loadJosmEntries()
    5657        script.loadEIIEntries()
    5758        script.checkInOneButNotTheOther()
    5859        script.checkCommonEntries()
     60        script.end()
    5961        if(outputStream != null) {
    6062            outputStream.close();
     
    6971     */
    7072    static void parse_command_line_arguments(args) {
    71         def cli = new CliBuilder()
     73        def cli = new CliBuilder(width: 160)
    7274        cli.o(longOpt:'output', args:1, argName: "output", "Output file, - prints to stdout (default: -)")
    7375        cli.e(longOpt:'eii_input', args:1, argName:"eii_input", "Input file for the editor imagery index (json). Default is $eiiInputFile (current directory).")
     
    7577        cli.s(longOpt:'shorten', "shorten the output, so it is easier to read in a console window")
    7678        cli.n(longOpt:'noskip', argName:"noskip", "don't skip known entries")
     79        cli.x(longOpt:'xhtmlbody', argName:"xhtmlbody", "create XHTML body for display in a web page")
     80        cli.X(longOpt:'xhtml', argName:"xhtml", "create XHTML for display in a web page")
    7781        cli.m(longOpt:'nomissingeii', argName:"nomissingeii", "don't show missing editor imagery index entries")
    7882        cli.h(longOpt:'help', "show this help")
     
    99103            return;
    100104        /* TMS proxies for our wms */
    101         skipEntries["  Czech CUZK:KM tiles proxy - http://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png"] = 1
    102         skipEntries["  [CH] Stadt Zürich Luftbild 2011 - http://mapproxy.sosm.ch:8080/tiles/zh_luftbild2011/EPSG900913/{z}/{x}/{y}.png?origin=nw"] = 1
    103         skipEntries["  [CH] Übersichtsplan Zürich - http://mapproxy.sosm.ch:8080/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw"] = 1
    104         skipEntries["  [CH] Kanton Solothurn 25cm (SOGIS 2011-2014) - http://mapproxy.osm.ch:8080/tiles/sogis2014/EPSG900913/{z}/{x}/{y}.png?origin=nw"] = 1
     105        skipEntries["-  Czech CUZK:KM tiles proxy - http://osm-{switch:a,b,c}.zby.cz/tiles_cuzk.php/{zoom}/{x}/{y}.png"] = 1
     106        skipEntries["-  [CH] Stadt Zürich Luftbild 2011 - http://mapproxy.sosm.ch:8080/tiles/zh_luftbild2011/EPSG900913/{z}/{x}/{y}.png?origin=nw"] = 1
     107        skipEntries["-  [CH] Übersichtsplan Zürich - http://mapproxy.sosm.ch:8080/tiles/zh_uebersichtsplan/EPSG900913/{zoom}/{x}/{y}.png?origin=nw"] = 1
     108        skipEntries["-  [CH] Kanton Solothurn 25cm (SOGIS 2011-2014) - http://mapproxy.osm.ch:8080/tiles/sogis2014/EPSG900913/{z}/{x}/{y}.png?origin=nw"] = 1
    105109        /* URL style mismatch */
    106110        skipEntries["+++ EII-URL uses {z} instead of {zoom}: http://cyberjapandata.gsi.go.jp/xyz/ort/{z}/{x}/{y}.jpg"] = 1
     
    116120
    117121        skipEntries["+++ EII-URL is not unique: http://geolittoral.application.equipement.gouv.fr/wms/metropole?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=ortholittorale&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    118         skipEntries["  Streets NRW Geofabrik.de - http://tools.geofabrik.de/osmi/view/strassennrw/wxs?REQUEST=GetMap&SERVICE=wms&VERSION=1.1.1&FORMAT=image/png&SRS={proj}&STYLES=&LAYERS=unzugeordnete_strassen,kreisstrassen_ast,kreisstrassen,landesstrassen_ast,landesstrassen,bundesstrassen_ast,bundesstrassen,autobahnen_ast,autobahnen,endpunkte&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    119         skipEntries["  Czech UHUL:ORTOFOTO - http://geoportal2.uhul.cz/cgi-bin/oprl.asp?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&LAYERS=Ortofoto_cb&STYLES=default&FORMAT=image/jpeg&TRANSPARENT=TRUE&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    120         skipEntries["  Czech ÚHUL:ORTOFOTO tiles proxy - http://osm-{switch:a,b,c}.zby.cz/tiles_uhul.php/{zoom}/{x}/{y}.jpg"] = 1
    121         skipEntries["  [CH] Kanton Solothurn 25cm (SOGIS 2011-2014) - http://www.sogis1.so.ch/cgi-bin/sogis/sogis_orthofoto.wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Orthofoto_SO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    122         skipEntries["  [CH] Kanton Solothurn Infrarot 12.5cm (SOGIS 2011) - http://www.sogis1.so.ch/cgi-bin/sogis/sogis_ortho.wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Orthofoto11_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    123         skipEntries["  [CH] Stadt Bern 10cm/25cm (2008) - http://map.bern.ch/arcgis/services/Orthofoto_2008/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0,1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    124         skipEntries["  [EE] Estonia Basemap (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    125         skipEntries["  [EE] Estonia Forestry (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    126         skipEntries["  [EE] Estonia Hillshading (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    127         skipEntries["  [EE] Estonia Ortho (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?VERSION=1.1.1&REQUEST=GetMap&LAYERS=of10000&SRS={proj}&FORMAT=image/jpeg&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    128         skipEntries["  Hamburg (DK5) - http://gateway.hamburg.de/OGCFassade/HH_WMS_Geobasisdaten.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    129         skipEntries["  Hamburg (40 cm) - http://gateway.hamburg.de/OGCFassade/HH_WMS_DOP40.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     122        skipEntries["-  Streets NRW Geofabrik.de - http://tools.geofabrik.de/osmi/view/strassennrw/wxs?REQUEST=GetMap&SERVICE=wms&VERSION=1.1.1&FORMAT=image/png&SRS={proj}&STYLES=&LAYERS=unzugeordnete_strassen,kreisstrassen_ast,kreisstrassen,landesstrassen_ast,landesstrassen,bundesstrassen_ast,bundesstrassen,autobahnen_ast,autobahnen,endpunkte&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     123        skipEntries["-  Czech UHUL:ORTOFOTO - http://geoportal2.uhul.cz/cgi-bin/oprl.asp?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS={proj}&LAYERS=Ortofoto_cb&STYLES=default&FORMAT=image/jpeg&TRANSPARENT=TRUE&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     124        skipEntries["-  Czech ÚHUL:ORTOFOTO tiles proxy - http://osm-{switch:a,b,c}.zby.cz/tiles_uhul.php/{zoom}/{x}/{y}.jpg"] = 1
     125        skipEntries["-  [CH] Kanton Solothurn 25cm (SOGIS 2011-2014) - http://www.sogis1.so.ch/cgi-bin/sogis/sogis_orthofoto.wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=Orthofoto_SO&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     126        skipEntries["-  [CH] Kanton Solothurn Infrarot 12.5cm (SOGIS 2011) - http://www.sogis1.so.ch/cgi-bin/sogis/sogis_ortho.wms?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=Orthofoto11_CIR&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     127        skipEntries["-  [CH] Stadt Bern 10cm/25cm (2008) - http://map.bern.ch/arcgis/services/Orthofoto_2008/MapServer/WMSServer?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=0,1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     128        skipEntries["-  [EE] Estonia Basemap (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=pohi_vr2&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     129        skipEntries["-  [EE] Estonia Forestry (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=cir_ngr&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     130        skipEntries["-  [EE] Estonia Hillshading (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=reljeef&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     131        skipEntries["-  [EE] Estonia Ortho (Maaamet) - http://kaart.maaamet.ee/wms/alus-geo?VERSION=1.1.1&REQUEST=GetMap&LAYERS=of10000&SRS={proj}&FORMAT=image/jpeg&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     132        skipEntries["-  Hamburg (DK5) - http://gateway.hamburg.de/OGCFassade/HH_WMS_Geobasisdaten.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=1&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
     133        skipEntries["-  Hamburg (40 cm) - http://gateway.hamburg.de/OGCFassade/HH_WMS_DOP40.aspx?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=0&STYLES=&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 1
    130134        skipEntries["  name differs: http://wms.openstreetmap.fr/tms/1.0.0/tours_2013/{zoom}/{x}/{y}"] = 3
    131135        skipEntries["  name differs: http://wms.openstreetmap.fr/tms/1.0.0/tours/{zoom}/{x}/{y}"] = 3
     
    135139        skipEntries["  name differs: http://ooc.openstreetmap.org/os1/{zoom}/{x}/{y}.jpg"] = 3
    136140        skipEntries["  name differs: http://www.gisnet.lv/cgi-bin/osm_latvia?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=piekraste&SRS={proj}&WIDTH={width}&height={height}&BBOX={bbox}"] = 3
    137         skipEntries["  name differs: http://tms.cadastre.openstreetmap.fr/*/tout/{z}/{x}/{y}.png"] = 3
     141        skipEntries["  name differs: http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png"] = 3
    138142        skipEntries["  name differs: http://{switch:a,b,c}.tiles.mapbox.com/v4/enf.e0b8291e/{zoom}/{x}/{y}.png?access_token=pk.eyJ1Ijoib3BlbnN0cmVldG1hcCIsImEiOiJhNVlHd29ZIn0.ti6wATGDWOmCnCYen-Ip7Q"] = 3
    139143        skipEntries["  name differs: http://geo.nls.uk/mapdata2/os/25_inch/scotland_1/{zoom}/{x}/{y}.png"] = 3
    140144        skipEntries["  name differs: http://geo.nls.uk/mapdata3/os/6_inch_gb_1900/{zoom}/{x}/{y}.png"] = 3
    141         skipEntries["  maxzoom differs: [DE] Bavaria (2 m) - http://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=adv_dop200c&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 3
    142145        skipEntries["  name differs: http://geoserver.infobex.hu/Budapest2014/IST/{zoom}/{x}/{y}.jpg"] = 3
    143146        skipEntries["  name differs: http://mapproxy.openmap.lt/ort10lt/g/{zoom}/{x}/{y}.jpeg"] = 3
    144147        skipEntries["  name differs: http://e.tile.openstreetmap.hu/ortofoto2000/{zoom}/{x}/{y}.jpg"] = 3
    145         skipEntries["  name differs: http://tms.cadastre.openstreetmap.fr/*/tout/{zoom}/{x}/{y}.png"] = 3
     148        skipEntries["  maxzoom differs: [DE] Bavaria (2 m) - http://geodaten.bayern.de/ogc/ogc_dop200_oa.cgi?FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=adv_dop200c&SRS={proj}&WIDTH={width}&HEIGHT={height}&BBOX={bbox}"] = 3
    146149        skipEntries["  minzoom differs: [AU] LPI NSW Administrative Boundaries County - http://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=County&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE"] = 3
    147150        skipEntries["  minzoom differs: [AU] LPI NSW Administrative Boundaries NPWS Reserve - http://maps.six.nsw.gov.au/arcgis/services/public/NSW_Administrative_Boundaries/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS={proj}&BBOX={bbox}&WIDTH={width}&HEIGHT={height}&LAYERS=NPWSReserve&STYLES=&FORMAT=image/png32&DPI=96&MAP_RESOLUTION=96&FORMAT_OPTIONS=dpi:96&TRANSPARENT=TRUE"] = 3
     
    156159    }
    157160
    158     void myprintln(String s) {
    159         if(skipEntries.containsKey(s)) {
    160             skipCount = skipEntries.get(s)
    161         }
    162         if(skipCount) {
    163             skipCount -= 1;
    164             return
    165         }
     161    void myprintlnfinal(String s) {
    166162        if(outputStream != null) {
    167163            outputStream.write(s);
     
    169165        } else {
    170166            println s;
     167        }
     168    }
     169
     170    void myprintln(String s) {
     171        if(skipEntries.containsKey(s)) {
     172            skipCount = skipEntries.get(s)
     173            skipEntries.remove(s)
     174        }
     175        if(skipCount) {
     176            skipCount -= 1;
     177            if(options.xhtmlbody || options.xhtml) {
     178                s = "<pre style=\"margin:3px;color:green\">"+s.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")+"</pre>"
     179            } else {
     180                return
     181            }
     182        } else if(options.xhtmlbody || options.xhtml) {
     183            String color = s.startsWith("***") ? "black" : (s.startsWith("+ ") ? "blue" : "red")
     184            s = "<pre style=\"margin:3px;color:"+color+"\">"+s.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;")+"</pre>"
     185        }
     186        myprintlnfinal(s)
     187    }
     188
     189    void start() {
     190        if (options.xhtml) {
     191            myprintlnfinal "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"
     192            myprintlnfinal "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/><title>JOSM - EII differences</title></head><body>\n"
     193        }
     194    }
     195
     196    void end() {
     197        for (def s: skipEntries.keySet()) {
     198            myprintln "+++ Obsolete skip entry: " + s
     199        }
     200        if (options.xhtml) {
     201            myprintlnfinal "</body></html>\n"
    171202        }
    172203    }
     
    199230        for (def e : josmEntries) {
    200231            def url = getUrl(e)
     232            if (url.contains("{z}")) {
     233                myprintln "+++ JOSM-URL uses {z} instead of {zoom}: "+url
     234                url = url.replace("{z}","{zoom}")
     235            }
    201236            if (josmUrls.containsKey(url)) {
    202237                myprintln "+++ JOSM-URL is not unique: "+url
    203238            } else {
    204239              josmUrls.put(url, e)
     240            }
     241            for (def m : e.getMirrors()) {
     242                url = getUrl(m)
     243                if (josmUrls.containsKey(url)) {
     244                    myprintln "+++ JOSM-Mirror-URL is not unique: "+url
     245                } else {
     246                  josmUrls.put(url, m)
     247                }
    205248            }
    206249        }
     
    222265        def l1 = inOneButNotTheOther(eiiUrls, josmUrls)
    223266        myprintln "*** URLs found in EII but not in JOSM (${l1.size()}): ***"
    224         if (l1.isEmpty()) {
    225             myprintln "  -"
    226         } else {
     267        if (!l1.isEmpty()) {
    227268            for (def l : l1)
    228                 myprintln l
     269                myprintln "-"+l
    229270        }
    230271
     
    233274        def l2 = inOneButNotTheOther(josmUrls, eiiUrls)
    234275        myprintln "*** URLs found in JOSM but not in EII (${l2.size()}): ***"
    235         if (l2.isEmpty()) {
    236             myprintln "  -"
    237         } else {
     276        if (!l2.isEmpty()) {
    238277            for (def l : l2)
    239                 myprintln l
     278                myprintln "+" + l
    240279        }
    241280    }
  • trunk/src/org/openstreetmap/josm/data/imagery/ImageryInfo.java

    r9619 r9658  
    145145        }
    146146    }
    147 
    148147
    149148    /** original name of the imagery entry in case of translation call, for multiple languages English when possible */
     
    186185    /** country code of the imagery (for country specific imagery) */
    187186    private String countryCode = "";
     187    /** mirrors of different type for this entry */
     188    private List<ImageryInfo> mirrors = null;
    188189    /** icon used in menu */
    189190    private String icon;
     
    10291030    }
    10301031
     1032    /**
     1033     * Adds a mirror entry. Mirror entries are completed with the data from the master entry
     1034     * and only describe another method to access identical data.
     1035     *
     1036     * @param entry the mirror to be added
     1037     * @since 9658
     1038     */
     1039    public void addMirror(ImageryInfo entry) {
     1040       if (mirrors == null) {
     1041           mirrors = new ArrayList<>();
     1042       }
     1043       mirrors.add(entry);
     1044    }
     1045
     1046    /**
     1047     * Returns the mirror entries. Entries are completed with master entry data.
     1048     *
     1049     * @return the list of mirrors
     1050     * @since 9658
     1051     */
     1052    public List<ImageryInfo> getMirrors() {
     1053       List<ImageryInfo> l = new ArrayList<>();
     1054       if (mirrors != null) {
     1055           for (ImageryInfo i : mirrors) {
     1056               ImageryInfo n = new ImageryInfo(this);
     1057               if (i.defaultMaxZoom != 0) {
     1058                   n.defaultMaxZoom = i.defaultMaxZoom;
     1059               }
     1060               if (i.defaultMinZoom != 0) {
     1061                   n.defaultMinZoom = i.defaultMinZoom;
     1062               }
     1063               if (i.serverProjections != null) {
     1064                   n.serverProjections = i.serverProjections;
     1065               }
     1066               n.url = i.url;
     1067               n.imageryType = i.imageryType;
     1068               if (i.getTileSize() != 0) {
     1069                   n.setTileSize(i.getTileSize());
     1070               }
     1071               l.add(n);
     1072           }
     1073       }
     1074       return l;
     1075    }
    10311076}
  • trunk/src/org/openstreetmap/josm/io/imagery/ImageryReader.java

    r9619 r9658  
    4040        ENTRY,              // inside an entry
    4141        ENTRY_ATTRIBUTE,    // note we are inside an entry attribute to collect the character data
    42         PROJECTIONS,
     42        PROJECTIONS,        // inside projections block of an entry
     43        MIRROR,             // inside an mirror entry
     44        MIRROR_ATTRIBUTE,   // note we are inside an mirror attribute to collect the character data
     45        MIRROR_PROJECTIONS, // inside projections block of an mirror entry
    4346        CODE,
    4447        BOUNDS,
     
    8992
    9093        private ImageryInfo entry;
     94        /** In case of mirror parsing this contains the mirror entry */
     95        private ImageryInfo mirrorEntry;
    9196        private ImageryBounds bounds;
    9297        private Shape shape;
     
    130135                    noTileChecksums = new HashMap<>();
    131136                    metadataHeaders = new HashMap<>();
     137                }
     138                break;
     139            case MIRROR:
     140                if (Arrays.asList(new String[] {
     141                        "type",
     142                        "url",
     143                        "min-zoom",
     144                        "max-zoom",
     145                        "tile-size",
     146                }).contains(qName)) {
     147                    newState = State.MIRROR_ATTRIBUTE;
     148                    lang = atts.getValue("lang");
     149                } else if ("projections".equals(qName)) {
     150                    projections = new ArrayList<>();
     151                    newState = State.MIRROR_PROJECTIONS;
    132152                }
    133153                break;
     
    171191                    projections = new ArrayList<>();
    172192                    newState = State.PROJECTIONS;
     193                } else if ("mirror".equals(qName)) {
     194                    projections = new ArrayList<>();
     195                    newState = State.MIRROR;
     196                    mirrorEntry = new ImageryInfo();
    173197                } else if ("no-tile-header".equals(qName)) {
    174198                    String name = atts.getValue("name");
     
    214238                break;
    215239            case PROJECTIONS:
     240            case MIRROR_PROJECTIONS:
    216241                if ("code".equals(qName)) {
    217242                    newState = State.CODE;
     
    259284                }
    260285                break;
     286            case MIRROR:
     287                if ("mirror".equals(qName)) {
     288                    if (mirrorEntry != null) {
     289                        entry.addMirror(mirrorEntry);
     290                        mirrorEntry = null;
     291                    }
     292                }
     293                break;
     294            case MIRROR_ATTRIBUTE:
     295                if (mirrorEntry != null) {
     296                    switch(qName) {
     297                    case "type":
     298                        boolean found = false;
     299                        for (ImageryType type : ImageryType.values()) {
     300                            if (Objects.equals(accumulator.toString(), type.getTypeString())) {
     301                                mirrorEntry.setImageryType(type);
     302                                found = true;
     303                                break;
     304                            }
     305                        }
     306                        if (!found) {
     307                            mirrorEntry = null;
     308                        }
     309                        break;
     310                    case "url":
     311                        mirrorEntry.setUrl(accumulator.toString());
     312                        break;
     313                    case "min-zoom":
     314                    case "max-zoom":
     315                        Integer val = null;
     316                        try {
     317                            val = Integer.valueOf(accumulator.toString());
     318                        } catch (NumberFormatException e) {
     319                            val = null;
     320                        }
     321                        if (val == null) {
     322                            mirrorEntry = null;
     323                        } else {
     324                            if ("min-zoom".equals(qName)) {
     325                                mirrorEntry.setDefaultMinZoom(val);
     326                            } else {
     327                                mirrorEntry.setDefaultMaxZoom(val);
     328                            }
     329                        }
     330                        break;
     331                    case "tile-size":
     332                        Integer tileSize = null;
     333                        try {
     334                            tileSize = Integer.valueOf(accumulator.toString());
     335                        } catch (NumberFormatException e) {
     336                            tileSize = null;
     337                        }
     338                        if (tileSize == null) {
     339                            mirrorEntry = null;
     340                        } else {
     341                            entry.setTileSize(tileSize.intValue());
     342                        }
     343                        break;
     344                    }
     345                }
     346                break;
    261347            case ENTRY_ATTRIBUTE:
    262348                switch(qName) {
     
    379465                projections = null;
    380466                break;
     467            case MIRROR_PROJECTIONS:
     468                mirrorEntry.setServerProjections(projections);
     469                projections = null;
     470                break;
     471            /* nothing to do for these or the unknown type:
    381472            case NO_TILE:
    382                 break;
    383 
     473            case NO_TILESUM:
     474            case METADATA:
     475            case UNKNOWN:
     476                break;
     477            */
    384478            }
    385479        }
Note: See TracChangeset for help on using the changeset viewer.