1 /* Copyright (c) 2010-2014 Samsung Electronics Co., Ltd. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <maps_service.h>
18 #include <maps_error.h>
19 #include <maps_plugin.h>
20 #include <maps_address.h>
21 #include <maps_place_plugin.h>
22 #include <maps_route_plugin.h>
25 #include <maps_object.h>
28 static int dummy_geocode_request_id = 101;
29 static char __provider_key[1024] = { 0 };
31 /*----------------------------------------------------------------------------*/
34 EXPORT_API int maps_plugin_init(maps_plugin_h *plugin)
36 return MAPS_ERROR_NONE;
39 EXPORT_API int maps_plugin_shutdown(maps_plugin_h plugin)
41 return MAPS_ERROR_NONE;
44 EXPORT_API int maps_plugin_get_info(maps_plugin_info_h *info)
46 /*g_print("\n\nplugin maps_plugin_get_info\n\n"); */
47 maps_plugin_info_create(info);
48 maps_plugin_info_set_provider_name(*info, "Maps Provider");
49 return MAPS_ERROR_NONE;
52 /*----------------------------------------------------------------------------*/
57 EXPORT_API int maps_plugin_set_provider_key(const char *map_key)
59 g_return_val_if_fail(map_key, MAPS_ERROR_INVALID_PARAMETER);
60 g_snprintf(__provider_key, 1024, "%s", map_key);
61 return MAPS_ERROR_NONE;
64 EXPORT_API int maps_plugin_get_provider_key(char **map_key)
66 g_return_val_if_fail(map_key, MAPS_ERROR_INVALID_PARAMETER);
67 *map_key = g_strndup(__provider_key, 1024);
68 return MAPS_ERROR_NONE;
71 EXPORT_API int maps_plugin_get_preference(maps_item_hashtable_h *preference)
73 return MAPS_ERROR_NONE;
76 EXPORT_API int maps_plugin_set_preference(maps_item_hashtable_h preference)
78 return MAPS_ERROR_NONE;
81 EXPORT_API int maps_plugin_is_service_supported(maps_service_e service,
85 case MAPS_SERVICE_GEOCODE:
86 case MAPS_SERVICE_GEOCODE_INSIDE_AREA:
87 case MAPS_SERVICE_GEOCODE_BY_STRUCTURED_ADDRESS:
88 case MAPS_SERVICE_REVERSE_GEOCODE:
89 case MAPS_SERVICE_SEARCH_PLACE:
90 case MAPS_SERVICE_SEARCH_PLACE_BY_AREA:
91 case MAPS_SERVICE_SEARCH_PLACE_BY_ADDRESS:
92 case MAPS_SERVICE_SEARCH_ROUTE:
93 case MAPS_SERVICE_SEARCH_ROUTE_WAYPOINTS:
94 case MAPS_SERVICE_CANCEL_REQUEST:
96 return MAPS_ERROR_NONE;
99 return MAPS_ERROR_NOT_SUPPORTED;
103 EXPORT_API int maps_plugin_is_data_supported(maps_service_data_e data,
107 case MAPS_PLACE_ADDRESS:
108 case MAPS_PLACE_RATING:
109 case MAPS_PLACE_CATEGORIES:
110 case MAPS_PLACE_ATTRIBUTES:
111 case MAPS_PLACE_CONTACTS:
112 case MAPS_PLACE_EDITORIALS:
113 case MAPS_PLACE_REVIEWS:
114 case MAPS_PLACE_IMAGE:
115 case MAPS_PLACE_SUPPLIER:
116 case MAPS_PLACE_RELATED:
117 case MAPS_ROUTE_PATH:
118 case MAPS_ROUTE_SEGMENTS_PATH:
119 case MAPS_ROUTE_SEGMENTS_MANEUVERS:
121 return MAPS_ERROR_NONE;
124 return MAPS_ERROR_NOT_SUPPORTED;
129 EXPORT_API int maps_plugin_geocode(const char *address,
130 const maps_item_hashtable_h preference,
131 maps_service_geocode_cb callback,
132 void *user_data, int *request_id)
134 g_return_val_if_fail(address, MAPS_ERROR_INVALID_PARAMETER);
135 g_return_val_if_fail(callback, MAPS_ERROR_INVALID_PARAMETER);
136 g_return_val_if_fail(request_id, MAPS_ERROR_INVALID_PARAMETER);
137 /*g_return_val_if_fail(preference, MAPS_ERROR_INVALID_PARAMETER);*/
139 *request_id = dummy_geocode_request_id++;
141 /* For testing purposes */
142 bool no_need_callback = false;
143 maps_item_hashtable_contains(preference, "no_need_callback",
145 if (no_need_callback)
146 return MAPS_ERROR_NONE;
148 coordinates c(11.1, 22.2);
149 callback(MAPS_ERROR_NONE, *request_id, 0, 1, c.clone(), user_data);
150 return MAPS_ERROR_NONE;
153 EXPORT_API int maps_plugin_geocode_inside_area(const char *address,
154 const maps_area_h bounds,
155 const maps_item_hashtable_h
157 maps_service_geocode_cb callback,
158 void *user_data, int *request_id)
160 g_return_val_if_fail(address, MAPS_ERROR_INVALID_PARAMETER);
161 g_return_val_if_fail(bounds, MAPS_ERROR_INVALID_PARAMETER);
162 g_return_val_if_fail(callback, MAPS_ERROR_INVALID_PARAMETER);
163 g_return_val_if_fail(request_id, MAPS_ERROR_INVALID_PARAMETER);
164 /*g_return_val_if_fail(preference, MAPS_ERROR_INVALID_PARAMETER);*/
166 *request_id = dummy_geocode_request_id++;
168 /* For testing purposes */
169 bool no_need_callback = false;
170 maps_item_hashtable_contains(preference, "no_need_callback",
172 if (no_need_callback)
173 return MAPS_ERROR_NONE;
175 coordinates c(11.1, 22.2);
176 callback(MAPS_ERROR_NONE, *request_id, 0, 1, c.clone(), user_data);
177 return MAPS_ERROR_NONE;
180 EXPORT_API int maps_plugin_geocode_by_structured_address(const maps_address_h
182 const maps_preference_h
184 maps_service_geocode_cb
189 g_return_val_if_fail(address, MAPS_ERROR_INVALID_PARAMETER);
190 g_return_val_if_fail(callback, MAPS_ERROR_INVALID_PARAMETER);
191 g_return_val_if_fail(request_id, MAPS_ERROR_INVALID_PARAMETER);
192 g_return_val_if_fail(preference, MAPS_ERROR_INVALID_PARAMETER);
194 *request_id = dummy_geocode_request_id++;
196 /* For testing purposes */
197 bool no_need_callback = false;
198 maps_item_hashtable_contains(preference, "no_need_callback",
200 if (no_need_callback)
201 return MAPS_ERROR_NONE;
203 coordinates c(11.1, 22.2);
204 callback(MAPS_ERROR_NONE, *request_id, 0, 1, c.clone(), user_data);
205 return MAPS_ERROR_NONE;
208 EXPORT_API int maps_plugin_reverse_geocode(double latitude, double longitude,
209 const maps_item_hashtable_h
211 maps_service_reverse_geocode_cb
216 g_return_val_if_fail(request_id, MAPS_ERROR_INVALID_PARAMETER);
217 g_return_val_if_fail(preference, MAPS_ERROR_INVALID_PARAMETER);
219 *request_id = dummy_geocode_request_id++;
221 /* For testing purposes */
222 bool no_need_callback = false;
223 maps_item_hashtable_contains(preference, "no_need_callback",
225 if (no_need_callback)
226 return MAPS_ERROR_NONE;
229 maps_address_set_building_number(a, "12");
230 maps_address_set_street(a, "Na Boyishti");
231 callback(MAPS_ERROR_NONE, *request_id, 0, 1, a.clone(), user_data);
232 return MAPS_ERROR_NONE;
235 EXPORT_API int maps_plugin_search_place(const maps_coordinates_h position,
237 const maps_place_filter_h filter,
238 maps_preference_h preference,
239 maps_service_search_place_cb callback,
240 void *user_data, int *request_id)
243 *request_id = dummy_geocode_request_id++;
245 /* For testing purposes */
246 bool no_need_callback = false;
247 maps_item_hashtable_contains(preference, "no_need_callback",
249 if (no_need_callback)
250 return MAPS_ERROR_NONE;
253 maps_place_set_id(p, "1722/12");
254 maps_place_set_name(p, "U Kalicha");
255 callback(MAPS_ERROR_NONE, *request_id, 0, 1, p.clone(), user_data);
257 return MAPS_ERROR_NONE;
260 EXPORT_API int maps_plugin_search_place_by_area(const maps_area_h boundary,
261 const maps_place_filter_h
263 maps_preference_h preference,
264 maps_service_search_place_cb
270 *request_id = dummy_geocode_request_id++;
272 /* For testing purposes */
273 bool no_need_callback = false;
274 maps_item_hashtable_contains(preference, "no_need_callback",
276 if (no_need_callback)
277 return MAPS_ERROR_NONE;
280 maps_place_set_id(p, "1722/12");
281 maps_place_set_name(p, "U Kalicha");
282 callback(MAPS_ERROR_NONE, *request_id, 0, 1, p.clone(), user_data);
283 return MAPS_ERROR_NONE;
286 EXPORT_API int maps_plugin_search_place_by_address(const char *address,
287 const maps_area_h boundary,
288 const maps_place_filter_h
290 maps_preference_h preference,
291 maps_service_search_place_cb
297 *request_id = dummy_geocode_request_id++;
299 /* For testing purposes */
300 bool no_need_callback = false;
301 maps_item_hashtable_contains(preference, "no_need_callback",
303 if (no_need_callback)
304 return MAPS_ERROR_NONE;
307 maps_place_set_id(p, "1722/12");
308 maps_place_set_name(p, "U Kalicha");
309 callback(MAPS_ERROR_NONE, *request_id, 0, 1, p.clone(), user_data);
310 return MAPS_ERROR_NONE;
313 EXPORT_API int maps_plugin_search_route(const maps_coordinates_h origin,
314 const maps_coordinates_h destination,
315 maps_preference_h preference,
316 maps_service_search_route_cb callback,
321 /*g_print("Maps Plugin Search Route\n\n"); */
322 *request_id = dummy_geocode_request_id++;
324 /* For testing purposes */
325 bool no_need_callback = false;
326 maps_item_hashtable_contains(preference, "no_need_callback",
328 if (no_need_callback)
329 return MAPS_ERROR_NONE;
333 item_list <route_maneuver> maneuvers;
334 route_maneuver m1, m2;
338 item_list <route_segment> segments;
339 route_segment s1, s2;
341 maps_route_segment_set_origin(s1, coordinates(11.1, 12.1));
342 maps_route_segment_set_destination(s1, coordinates(21.1, 22.1));
344 maps_route_segment_set_origin(s2, coordinates(11.1, 12.1));
345 maps_route_segment_set_destination(s2, coordinates(21.1, 22.1));
347 maps_route_segment_set_maneuvers(s1, maneuvers);
348 maps_route_segment_set_maneuvers(s2, maneuvers);
352 maps_route_set_segments(route, segments);
354 callback(MAPS_ERROR_NONE, *request_id, 0, 1, route.clone(), user_data);
355 return MAPS_ERROR_NONE;
358 EXPORT_API int maps_plugin_search_route_waypoints(const maps_coordinates_h *
361 maps_preference_h preference,
362 maps_service_search_route_cb
367 *request_id = dummy_geocode_request_id++;
369 /* For testing purposes */
370 bool no_need_callback = false;
371 maps_item_hashtable_contains(preference, "no_need_callback",
373 if (no_need_callback)
374 return MAPS_ERROR_NONE;
378 item_list <route_maneuver> maneuvers;
379 route_maneuver m1, m2;
383 item_list <route_segment> segments;
384 route_segment s1, s2;
386 maps_route_segment_set_origin(s1, coordinates(11.1, 12.1));
387 maps_route_segment_set_destination(s1, coordinates(21.1, 22.1));
389 maps_route_segment_set_origin(s2, coordinates(11.1, 12.1));
390 maps_route_segment_set_destination(s2, coordinates(21.1, 22.1));
392 maps_route_segment_set_maneuvers(s1, maneuvers);
393 maps_route_segment_set_maneuvers(s2, maneuvers);
397 maps_route_set_segments(route, segments);
399 callback(MAPS_ERROR_NONE, *request_id, 0, 1, route.clone(), user_data);
400 return MAPS_ERROR_NONE;
403 EXPORT_API int maps_plugin_cancel_request(int request_id)
405 return MAPS_ERROR_NONE;