001// License: GPL. For details, see Readme.txt file.
002package org.openstreetmap.gui.jmapviewer.tilesources;
003
004import java.awt.Image;
005import java.io.ByteArrayInputStream;
006import java.io.IOException;
007
008import javax.imageio.ImageIO;
009import javax.xml.bind.DatatypeConverter;
010
011public class AbstractMapQuestTileSource extends AbstractOsmTileSource {
012
013    // MapQuest logo in base64: http://developer.mapquest.com/content/osm/mq_logo.png
014    private static final String LOGO_BASE64 = 
015            "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJl"+
016            "YWR5ccllPAAAAZtJREFUeNpi/P//P0PPcYf/DGSAEssDjIzdx+zJ0gwDLMQqVBWyZVAStGRgBMK33x8wnH62"+
017            "kngD+DmkGBwUshn42SXA/P8M/xg+/3rDcOPNPuIMMJeKAmv+8OMpw7ffHxikeLUZXBTzgez3DEzEGMDGzAmm"+
018            "jz5ewLDqWiHE6UwcDHxsYhAXsLPwMFhKxzIIccozPP18ieHhx3MMGsKOYP7td4fBzgUBN+ViBkeFLDD7zbf7"+
019            "DK++3WFgAMXC448X/uMDV17t+H/r7UEM8VNPl/8Hu0CGTx9s6tXXOxhEuJQYxLnVgK44w/Dzz1cGNWF7BlGg"+
020            "2KJLqQzCQBcxMbEw/P77g0FTxBkYJs8gXgCFKiMwOLbf6WDQF/djcFUqAvv33fdHYAM4WPjAFrz9/hAeLsef"+
021            "LALT4EBkhIYlMxMrAxerIJjNCdTExy4OZv/59xNnAKPEAh+bBNAQSMwKcsgAQ5odzBbilGNghcYE1pS4+14f"+
022            "MKq4GP79/w1OHCC/v/x6Exzv+x9MhbiOEeh3LAZQnBeYGCgEjJRmZ4AAAwCE6rplT3Ba/gAAAABJRU5ErkJg"+
023            "gg==";
024
025    protected static final String MAPQUEST_ATTRIBUTION = "Tiles Courtesy of MapQuest ";
026
027    protected static final String MAPQUEST_WEBSITE = "http://www.mapquest.com";
028
029    private static final int NUMBER_OF_SERVERS = 4;
030    
031    private int SERVER_NUM = 1;
032
033    public AbstractMapQuestTileSource(String name, String base_url) {
034        super(name, base_url);
035    }
036
037    @Override
038    public String getBaseUrl() {
039        String url = String.format(this.baseUrl, SERVER_NUM);
040        SERVER_NUM = (SERVER_NUM % NUMBER_OF_SERVERS) + 1;
041        return url;
042    }
043
044    @Override
045    public TileUpdate getTileUpdate() {
046        return TileUpdate.IfModifiedSince;
047    }
048
049    @Override
050    public Image getAttributionImage() {
051        try {
052            return ImageIO.read(new ByteArrayInputStream(DatatypeConverter.parseBase64Binary(LOGO_BASE64)));
053        } catch (IOException e) {
054            e.printStackTrace();
055            return null;
056        }
057    }
058
059    @Override
060    public String getAttributionImageURL() {
061        return MAPQUEST_WEBSITE;
062    }
063
064    /* (non-Javadoc)
065     * @see org.openstreetmap.gui.jmapviewer.tilesources.AbstractOsmTileSource#getTermsOfUseURL()
066     */
067    @Override
068    public String getTermsOfUseURL() {
069        return "http://developer.mapquest.com/web/products/open/map#terms";
070    }
071}