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