1 package tim.prune.gui.map;
3 import java.util.ArrayList;
5 import tim.prune.config.Config;
8 * Class to hold a library for all the map sources
9 * and provide access to each one
11 public abstract class MapSourceLibrary
13 /** list of map sources */
14 private static ArrayList<MapSource> _sourceList = null;
15 /** Number of fixed sources */
16 private static int _numFixedSources = 0;
18 // Static block to initialise source list
21 _sourceList = new ArrayList<MapSource>();
23 _numFixedSources = _sourceList.size();
27 /** Private constructor to block instantiation */
28 private MapSourceLibrary() {}
31 /** @return number of fixed sources which shouldn't be deleted */
32 public static int getNumFixedSources() {
33 return _numFixedSources;
37 * Initialise source list by adding bare minimum
39 private static void addFixedSources()
41 final String THUNDERFOREST_APIKEY = "c32212f10b13496786b98dc6c42e5c3c";
42 _sourceList.add(new OsmMapSource("Mapnik", "http://[abc].tile.openstreetmap.org/"));
43 OsmMapSource cycleSource = new OsmMapSource("OpenCycleMap", "http://[abc].tile.thunderforest.com/cycle/");
44 cycleSource.setApiKey(THUNDERFOREST_APIKEY);
45 _sourceList.add(cycleSource);
46 OsmMapSource outdoorsSource = new OsmMapSource("Outdoors", "http://[abc].tile.thunderforest.com/outdoors/");
47 outdoorsSource.setApiKey(THUNDERFOREST_APIKEY);
48 _sourceList.add(outdoorsSource);
49 _sourceList.add(new OsmMapSource("Reitkarte", "http://topo[234].wanderreitkarte.de/topo/"));
50 _sourceList.add(new MffMapSource("Mapsforfree", "http://maps-for-free.com/layer/relief/", "jpg",
51 "http://maps-for-free.com/layer/water/", "gif", 11));
52 _sourceList.add(new OsmMapSource("Hikebikemap", "http://[abc].tiles.wmflabs.org/hikebike/",
53 "http://[abc].tiles.wmflabs.org/hillshading/", 18));
54 _sourceList.add(new OsmMapSource("OpenSeaMap", "http://tile.openstreetmap.org/",
55 "http://tiles.openseamap.org/seamark/", 18));
59 * Add custom sources from Config to the library
61 private static void addConfigSources()
63 String configString = Config.getConfigString(Config.KEY_MAPSOURCE_LIST);
64 if (configString != null && configString.length() > 10)
66 // Loop over sources in string, separated by vertical bars
67 int splitPos = configString.indexOf('|');
70 String sourceString = configString.substring(0, splitPos);
71 MapSource source = OsmMapSource.fromConfig(sourceString);
73 _sourceList.add(source);
75 configString = configString.substring(splitPos+1);
76 splitPos = configString.indexOf('|');
82 * @return current number of sources
84 public static int getNumSources() {
85 return _sourceList.size();
89 * Add the given MapSource to the list (at the end)
90 * @param inSource MapSource object
92 public static void addSource(MapSource inSource) {
93 // Check whether source is already there? Check whether valid?
94 _sourceList.add(inSource);
98 * Edit the given MapSource object by replacing with a new one
99 * @param inOriginal existing MapSource object
100 * @param inNewSource new MapSource object
102 public static void editSource(MapSource inOriginal, MapSource inNewSource)
104 // Check whether original source is still there
105 int origPos = _sourceList.indexOf(inOriginal);
107 addSource(inNewSource);
110 _sourceList.set(origPos, inNewSource);
115 * @param inIndex source index number
116 * @return corresponding map source object
118 public static MapSource getSource(int inIndex)
120 // Check whether within range
121 if (inIndex < 0 || inIndex >= _sourceList.size()) {return null;}
122 return _sourceList.get(inIndex);
126 * Delete the specified source
127 * @param inIndex index of source to delete
129 public static void deleteSource(int inIndex)
131 if (inIndex >= _numFixedSources) {
132 _sourceList.remove(inIndex);
137 * Check whether the given name already exists in the library (case-insensitive)
138 * @param inName name to check
139 * @return true if already exists, false otherwise
141 public static boolean hasSourceName(String inName)
143 if (inName == null) {return false;}
144 String checkName = inName.toLowerCase().trim();
145 for (int i=0; i<getNumSources(); i++)
147 String name = getSource(i).getName().toLowerCase();
148 if (name.equals(checkName)) {return true;}
154 * @return String containing all custom-added sources as a |-separated list
156 public static String getConfigString()
158 StringBuilder builder = new StringBuilder();
159 for (int i=getNumFixedSources(); i<getNumSources(); i++) {
160 builder.append(getSource(i).getConfigString()).append('|');
162 return builder.toString();