001    package com.google.gwt.maps.client.placeslib;
002    
003    import com.google.gwt.ajaxloader.client.ArrayHelper;
004    import com.google.gwt.core.client.JavaScriptObject;
005    import com.google.gwt.core.client.JsArrayString;
006    import com.google.gwt.maps.client.base.LatLng;
007    import com.google.gwt.maps.client.base.LatLngBounds;
008    
009    /**
010     * A Place search query to be sent to the PlacesService.
011     * <br><br>
012     * See <a href="https://developers.google.com/maps/documentation/javascript/reference#PlaceSearchRequest">PlaceSearchRequest API Doc</a>
013     */
014    public class PlaceSearchRequest extends JavaScriptObject {
015    
016      /**
017       * use newInstance();
018       */
019      protected PlaceSearchRequest() {}
020      
021      /**
022       * A Place search query to be sent to the PlacesService.
023       */
024      public static final PlaceSearchRequest newInstance() {
025        return JavaScriptObject.createObject().cast();
026      }
027      
028      /**
029       * The bounds within which to search for Places. Both location and radius will be ignored if bounds is set.
030       * @param bounds
031       */
032      public final native void setBounds(LatLngBounds bounds) /*-{
033        this.bounds = bounds;
034      }-*/;
035      
036      /**
037       * The bounds within which to search for Places. Both location and radius will be ignored if bounds is set.
038       */
039      public final native LatLngBounds getBounds() /*-{
040        return this.bounds;
041      }-*/;
042      
043      /**
044       * A term to be matched against all available fields, including but not limited to name, type, and address, as well as customer reviews and other third-party content.
045       * @param keyword
046       */
047      public final native void setKeyword(String keyword) /*-{
048        this.keyword = keyword;
049      }-*/;
050      
051      /**
052       * A term to be matched against all available fields, including but not limited to name, type, and address, as well as customer reviews and other third-party content.
053       */
054      public final native String getKeyword() /*-{
055        return this.keyword;
056      }-*/;
057      
058      /**
059       * The location around which to search for Places.
060       * @param location
061       */
062      public final native void setLocation(LatLng location) /*-{
063        this.location = location;
064      }-*/;
065      
066      /**
067       * The location around which to search for Places.
068       */
069      public final native LatLng getLocation() /*-{
070        return this.location;
071      }-*/;
072      
073      /**
074       * Restricts the Place search results to Places that include this text in the name.
075       * @param name
076       */
077      public final native void setName(String name) /*-{
078        this.name = name;
079      }-*/;
080      
081      /**
082       * Restricts the Place search results to Places that include this text in the name.
083       */
084      public final native String getName() /*-{
085        return this.name;
086      }-*/;
087      
088      /**
089       * The distance from the given location within which to search for Places, in meters. The maximum allowed value is 50000
090       * @param radius
091       */
092      public final native void setRaidus(double radius) /*-{
093        this.radius = radius;
094      }-*/;
095      
096      /**
097       * The distance from the given location within which to search for Places, in meters. The maximum allowed value is 50000
098       */
099      public final native double getRaidus() /*-{
100        return this.radius;
101      }-*/;
102      
103      /**
104       * Restricts the Place search results to Places with a type matching at least one of the specified types in this array. Valid types are given <a href="https://developers.google.com/maps/documentation/places/supported_types">here</a>.
105       * @param types
106       */
107      public final void setTypes(AutocompleteType... types) {
108        if (types == null) {
109          return;
110        }
111        String[] stypes = new String[types.length]; 
112        for (int i=0; i < types.length; i++) {
113          stypes[i] = types[i].value();
114        }
115        JsArrayString a = ArrayHelper.toJsArrayString(stypes);
116        setTypesImpl(a);
117      }
118      
119      private final native void setTypesImpl(JsArrayString types) /*-{
120        this.types = types;
121      }-*/;
122      
123      /**
124       * Restricts the Place search results to Places with a type matching at least one of the specified types in this array. Valid types are given <a href="https://developers.google.com/maps/documentation/places/supported_types">here</a>.
125       */
126      public final AutocompleteType[] getTypes() {
127        JsArrayString at = getTypesImpl();
128        if (at == null) {
129          return null;
130        }
131        AutocompleteType[] types = new AutocompleteType[at.length()]; 
132        for (int i=0; i < at.length(); i++) {
133          types[i] = AutocompleteType.fromValue(at.get(i));
134        }
135        return types;
136      }
137      
138      private final native JsArrayString getTypesImpl() /*-{
139        return this.types;
140      }-*/;
141      
142    }