001 package com.google.gwt.maps.client;
002
003 import java.util.ArrayList;
004 import java.util.Iterator;
005
006 import com.google.gwt.ajaxloader.client.AjaxLoader;
007 import com.google.gwt.ajaxloader.client.AjaxLoader.AjaxLoaderOptions;
008
009 /**
010 * Load Maps javascript v3 api
011 *
012 * TODO maybe move to the new loading system they have in google apis
013 */
014 public class LoadApi {
015
016 /**
017 * Note: If you use 3, it will take the newest stable available. Don't want that. We didn't test with that yet!
018 */
019 public final static String API_VERSION = "3.9";
020
021 /**
022 * Libraries not loaded by default <br>
023 * <br>
024 * See <a href=
025 * "https://developers.google.com/maps/documentation/javascript/basics.html#Libraries"
026 * >Libraries API Doc</a>
027 */
028 public static enum LoadLibrary {
029
030 /**
031 * allows your Maps API application to include context-sensitive text
032 * ads, allowing you to share in ad revenue for ads shown to your users.
033 * Consult the AdSense Library documentation for more information.
034 */
035 ADSENSE,
036
037 /**
038 * provides a graphical interface for users to draw polygons,
039 * rectangles, polylines, circles, and markers on the map. Consult the
040 * Drawing Library documentation for more information.
041 */
042 DRAWING,
043
044 /**
045 * geometry includes utility functions for calculating scalar geometric
046 * values (such as distance and area) on the the surface of the earth.
047 * Consult the Geometry Library documentation for more information.
048 */
049 GEOMETRY,
050
051 /**
052 * panoramio contains functionality for adding Panoramio photo layers to
053 * your Maps API application. Consult the Panoramio Layers documentation
054 * for more information.
055 */
056 PANORAMIO,
057
058 /**
059 * weather contains functionality for adding meterological layers to
060 * your Maps API application. Consult the Weather Layers documentation
061 * for more information.
062 */
063 WEATHER,
064
065 /**
066 * places enables your application to search for businesses, geographic
067 * locations, and points of interest near a given location, or as a user
068 * types. Consult the Places Library documentation for more information.
069 */
070 PLACES;
071
072 public String value() {
073 return name().toLowerCase();
074 }
075
076 public static LoadLibrary fromValue(String value) {
077 return valueOf(value.toUpperCase());
078 }
079
080 @Override
081 public String toString() {
082 return name().toLowerCase();
083 }
084 }
085
086 /**
087 * Load Maps javascript v3 api with default libraries. these are not loaded
088 * {@link LoadLibrary}
089 *
090 * @param onLoad
091 * - callback on success
092 * @param sensor
093 * - derive location [true|false]
094 */
095 public static void go(Runnable onLoad, boolean sensor) {
096 load(onLoad, sensor, null, null);
097 }
098
099 /**
100 * loads maps api
101 *
102 * @param onLoad
103 * callback on success
104 * @param loadLibraries
105 * load additional libraries like geometry
106 * @param sensor
107 * derive location [true|false]
108 */
109 public static void go(Runnable onLoad,
110 ArrayList<LoadLibrary> loadLibraries, boolean sensor) {
111 load(onLoad, sensor, loadLibraries, null);
112 }
113
114 /**
115 * Load Maps javascript v3 api
116 *
117 * @param onLoad
118 * callback on success
119 * @param sensor
120 * derive location [true|false]
121 * @param otherParams
122 * add additional params. like "key=YOUR_API_KEY"
123 */
124 public static void go(Runnable onLoad, boolean sensor, String otherParams) {
125 load(onLoad, sensor, null, otherParams);
126 }
127
128 /**
129 * loads maps api
130 *
131 * @param onLoad
132 * callback on success
133 * @param loadLibraries
134 * load additional libraries like geometry
135 * @param sensor
136 * sensor derive location [true|false]
137 * @param otherParams
138 * add additional params. like "key=YOUR_API_KEY"
139 */
140 public static void go(Runnable onLoad,
141 ArrayList<LoadLibrary> loadLibraries, boolean sensor,
142 String otherParams) {
143 load(onLoad, sensor, loadLibraries, otherParams);
144 }
145
146 /**
147 * load the maps library
148 *
149 * @param onLoad
150 * @param sensor
151 * @param loadLibraries
152 * @param otherParams
153 */
154 private static void load(Runnable onLoad, boolean sensor,
155 ArrayList<LoadLibrary> loadLibraries, String otherParams) {
156
157 String op = "sensor=" + sensor;
158 if (otherParams != null) {
159 op += "&" + otherParams;
160 }
161
162 if (loadLibraries != null) {
163 op += "&" + getLibraries(loadLibraries);
164 }
165
166 AjaxLoaderOptions settings = AjaxLoaderOptions.newInstance();
167 settings.setOtherParms(op);
168 AjaxLoader.loadApi("maps", API_VERSION, onLoad, settings);
169 }
170
171 /**
172 * get the url libraries parameter
173 *
174 * @param loadLibraries
175 */
176 private static String getLibraries(ArrayList<LoadLibrary> loadLibraries) {
177 if (loadLibraries == null) {
178 return "";
179 }
180 String s = "libraries=";
181 Iterator<LoadLibrary> itr = loadLibraries.iterator();
182 int i = 0;
183 while (itr.hasNext()) {
184 LoadLibrary ll = itr.next();
185 if (ll != null) {
186 if (i > 0) {
187 s += ",";
188 }
189 s += ll.value();
190 i++;
191 }
192 }
193 return s;
194 }
195
196 /**
197 * private constructor
198 */
199 private LoadApi() {
200 }
201 }