package tim.prune.gui.map; import java.net.MalformedURLException; import java.net.URL; import tim.prune.Config; /** * Class to hold the config for the map tiles * and retrieve the correct URL prefix */ public class MapTileConfig { /** Index of map server */ private int _index = 0; /** Url for other */ private String _url = null; /** server urls for known maps */ private static final String[] SERVER_URLS = { "http://tile.openstreetmap.org/", // mapnik "http://tah.openstreetmap.org/Tiles/tile/", // osma "http://andy.sandbox.cloudmade.com/tiles/cycle/" // cyclemap }; /** Index of 'other' server with freeform url */ private static final int OTHER_SERVER_NUM = 3; /** * Default constructor using Config */ public MapTileConfig() { _index = Config.getMapServerIndex(); _url = fixUrl(Config.getMapServerUrl()); // reset index wrong or if other url too short if (_index < 0 || _index > OTHER_SERVER_NUM || (_index == OTHER_SERVER_NUM && (_url == null || _url.length() < 5))) { _index = 0; } } /** * @return url */ public String getUrl() { if (_index == OTHER_SERVER_NUM) {return _url;} return SERVER_URLS[_index]; } /** * Checks the given url for having the right prefix and trailing slash * @param inUrl url to check * @return validated url with correct prefix and trailing slash, or null */ private static String fixUrl(String inUrl) { if (inUrl == null || inUrl.equals("")) {return null;} String url = inUrl; // check prefix try { new URL(url); } catch (MalformedURLException e) { // add the http protocol url = "http://" + url; } // check trailing / if (!url.endsWith("/")) { url = url + "/"; } return url; } /** * @param inOther other config object * @return true if the objects are exactly the same */ public boolean equals(MapTileConfig inOther) { // Other object must be non-null and must have same index if (inOther == null || inOther._index != _index) {return false;} // Check url if other selected if (_index == OTHER_SERVER_NUM) { return inOther._url.equals(_url); } // Not other so must match return true; } }