001    package com.google.gwt.maps.client.placeslib;
002    
003    import com.google.gwt.core.client.JavaScriptObject;
004    import com.google.gwt.core.client.JsArray;
005    import com.google.gwt.dom.client.Element;
006    import com.google.gwt.maps.client.MapImpl;
007    import com.google.gwt.maps.client.MapWidget;
008    
009    /**
010     * Contains methods related to searching for Places and retrieving details about a Place.
011     * <br><br>
012     * See <a href="https://developers.google.com/maps/documentation/javascript/reference#PlaceSearchRequest">PlaceSearchRequest API Doc</a>
013     */
014    public class PlacesService extends JavaScriptObject {
015    
016      /**
017       * use newInstance();
018       */
019      protected PlacesService() {}
020      
021      /**
022       * Contains methods related to searching for Places and retrieving details about a Place.
023       * @param attrContainer
024       * @param mapWidget
025       */
026      public static final PlacesService newInstance(Element attrContainer, MapWidget mapWidget) {
027        return createJso(attrContainer, mapWidget.getJso());
028      }
029    
030      private static final native PlacesService createJso(Element attrContainer, MapImpl map) /*-{
031        return new $wnd.google.maps.places.PlacesService(attrContainer, map);
032      }-*/;
033      
034      
035      /**
036       * Retrieves details about the Place identified by the given reference.
037       * @param request
038       * @param handler
039       */
040      public final native void getDetails(PlaceDetailsRequest request, PlaceDetailsHandler handler) /*-{
041        var callback = function(result, status) {
042          @com.google.gwt.maps.client.placeslib.PlacesService::processDetailsCallback(Lcom/google/gwt/maps/client/placeslib/PlaceResult;Ljava/lang/String;Lcom/google/gwt/maps/client/placeslib/PlaceDetailsHandler;)(result, status, handler);
043        };
044        this.getDetails(request, callback);
045      }-*/;
046      
047      private static final void processDetailsCallback(PlaceResult result, String status, PlaceDetailsHandler handler) {
048        handler.onCallback(result, PlacesServiceStatus.fromValue(status));
049      }
050      
051      
052      /**
053       * Retrieves a list of Places in a given area. The PlaceResultss passed to the callback are stripped-down versions of a full PlaceResult. A more detailed PlaceResult for each Place can be obtained by sending a Place Details request with the desired Place's reference value.
054       * @param request
055       * @param handler
056       */
057      public final native void search(PlaceSearchRequest request, PlaceSearchHandler handler) /*-{
058        var callback = function (results, status) {
059          @com.google.gwt.maps.client.placeslib.PlacesService::processSearchCallback(Lcom/google/gwt/core/client/JsArray;Ljava/lang/String;Lcom/google/gwt/maps/client/placeslib/PlaceSearchHandler;)(results, status, handler); 
060        };
061        this.search(request, callback);
062      }-*/;
063      
064      private static final void processSearchCallback(JsArray<PlaceResult> results, String status, PlaceSearchHandler handler) {
065        handler.onCallback(results, PlacesServiceStatus.fromValue(status));
066      }
067      
068      
069      
070    }