001    package com.google.gwt.maps.client.services;
002    
003    import com.google.gwt.core.client.JavaScriptObject;
004    import com.google.gwt.maps.client.workaround.WorkAroundUtils;
005    
006    /**
007     * A service for computing distances between multiple origins and destinations.
008     * <br><br>
009     * See <a href="https://developers.google.com/maps/documentation/javascript/reference#DistanceMatrixService">DistanceMatrixService API Doc</a>
010     */
011    public class DistanceMatrixService extends JavaScriptObject {
012    
013      /**
014       * use newInstance();
015       */
016      protected DistanceMatrixService() {}
017      
018      /**
019       * Creates a new instance of a DistanceMatrixService that sends distance matrix queries to Google servers.
020       */
021      public static final DistanceMatrixService newInstance() {
022        JavaScriptObject jso = createJso();
023        WorkAroundUtils.removeGwtObjectId(jso);
024        return jso.cast();
025      }
026      
027      private static final native JavaScriptObject createJso() /*-{
028        return new $wnd.google.maps.DistanceMatrixService();
029      }-*/;
030      
031      public final native void getDistanceMatrix(DistanceMatrixRequest request, DistanceMatrixRequestHandler handler) /*-{
032        var callback = function(response, status) {
033          @com.google.gwt.maps.client.services.DistanceMatrixService::getDistanceMatrixImpl(Lcom/google/gwt/maps/client/services/DistanceMatrixResponse;Ljava/lang/String;Lcom/google/gwt/maps/client/services/DistanceMatrixRequestHandler;)(response, status, handler);
034        };
035        this.getDistanceMatrix(request, callback);
036      }-*/;
037      
038      private static final void getDistanceMatrixImpl(DistanceMatrixResponse response, String status, DistanceMatrixRequestHandler handler) {
039        handler.onCallback(response, DistanceMatrixStatus.fromValue(status));
040      }
041      
042    }