]> gitweb.fperrin.net Git - GpsPrune.git/blob - tim/prune/gui/map/MapSourceLibrary.java
df30219b9f944a21b438cc1e71f8ed51720c18f1
[GpsPrune.git] / tim / prune / gui / map / MapSourceLibrary.java
1 package tim.prune.gui.map;
2
3 import java.util.ArrayList;
4
5 import tim.prune.config.Config;
6
7 /**
8  * Class to hold a library for all the map sources
9  * and provide access to each one
10  */
11 public abstract class MapSourceLibrary
12 {
13         /** list of map sources */
14         private static ArrayList<MapSource> _sourceList = null;
15         /** Number of fixed sources */
16         private static int _numFixedSources = 0;
17
18         // Static block to initialise source list
19         static
20         {
21                 _sourceList = new ArrayList<MapSource>();
22                 addFixedSources();
23                 _numFixedSources = _sourceList.size();
24                 addConfigSources();
25         }
26
27         /** Private constructor to block instantiation */
28         private MapSourceLibrary() {}
29
30
31         /** @return number of fixed sources which shouldn't be deleted */
32         public static int getNumFixedSources() {
33                 return _numFixedSources;
34         }
35
36         /**
37          * Initialise source list by adding bare minimum
38          */
39         private static void addFixedSources()
40         {
41                 _sourceList.add(new OsmMapSource("Mapnik", "http://tile.openstreetmap.org/"));
42                 _sourceList.add(new OsmMapSource("Osma", "http://tah.openstreetmap.org/Tiles/tile/"));
43                 _sourceList.add(new OsmMapSource("Cyclemap", "http://andy.sandbox.cloudmade.com/tiles/cycle/"));
44                 _sourceList.add(new OsmMapSource("Reitkarte", "http://topo.geofabrik.de/hills/",
45                         "http://topo.openstreetmap.de/topo/", 18));
46                 _sourceList.add(new MffMapSource("Mapsforfree", "http://maps-for-free.com/layer/relief/", ".jpg",
47                         "http://maps-for-free.com/layer/water/", ".gif", 11));
48                 _sourceList.add(new CloudmadeMapSource("Pale Dawn", "998", 18));
49         }
50
51         /**
52          * Add custom sources from Config to the library
53          */
54         private static void addConfigSources()
55         {
56                 String configString = Config.getConfigString(Config.KEY_MAPSOURCE_LIST);
57                 if (configString != null && configString.length() > 10)
58                 {
59                         // Loop over sources in string, separated by vertical bars
60                         int splitPos = configString.indexOf('|');
61                         while (splitPos > 0)
62                         {
63                                 String sourceString = configString.substring(0, splitPos);
64                                 MapSource source = OsmMapSource.fromConfig(sourceString);
65                                 if (source == null) {source = CloudmadeMapSource.fromConfig(sourceString);}
66                                 if (source != null) {
67                                         _sourceList.add(source);
68                                 }
69                                 configString = configString.substring(splitPos+1);
70                                 splitPos = configString.indexOf('|');
71                         }
72                 }
73         }
74
75         /**
76          * @return current number of sources
77          */
78         public static int getNumSources() {
79                 return _sourceList.size();
80         }
81
82         /**
83          * Add the given MapSource to the list (at the end)
84          * @param inSource MapSource object
85          */
86         public static void addSource(MapSource inSource) {
87                 // Check whether source is already there?  Check whether valid?
88                 _sourceList.add(inSource);
89         }
90
91         /**
92          * @param inIndex source index number
93          * @return corresponding map source object
94          */
95         public static MapSource getSource(int inIndex)
96         {
97                 // Check whether within range
98                 if (inIndex < 0 || inIndex >= _sourceList.size()) {return null;}
99                 return _sourceList.get(inIndex);
100         }
101
102         /**
103          * Delete the specified source
104          * @param inIndex index of source to delete
105          */
106         public static void deleteSource(int inIndex)
107         {
108                 if (inIndex >= _numFixedSources) {
109                         _sourceList.remove(inIndex);
110                 }
111         }
112
113         /**
114          * Check whether the given name already exists in the library (case-insensitive)
115          * @param inName name to check
116          * @return true if already exists, false otherwise
117          */
118         public static boolean hasSourceName(String inName)
119         {
120                 if (inName == null) {return false;}
121                 String checkName = inName.toLowerCase().trim();
122                 for (int i=0; i<getNumSources(); i++)
123                 {
124                         String name = getSource(i).getName().toLowerCase();
125                         if (name.equals(checkName)) {return true;}
126                 }
127                 return false;
128         }
129
130         /**
131          * @return String containing all custom-added sources as a |-separated list
132          */
133         public static String getConfigString()
134         {
135                 StringBuilder builder = new StringBuilder();
136                 for (int i=getNumFixedSources(); i<getNumSources(); i++) {
137                         builder.append(getSource(i).getConfigString()).append('|');
138                 }
139                 return builder.toString();
140         }
141 }