001 package com.google.gwt.maps.client.adsense;
002
003 import com.google.gwt.core.client.JavaScriptObject;
004 import com.google.gwt.dom.client.Element;
005 import com.google.gwt.event.shared.HandlerRegistration;
006 import com.google.gwt.maps.client.MapImpl;
007 import com.google.gwt.maps.client.MapWidget;
008 import com.google.gwt.maps.client.controls.ControlPosition;
009 import com.google.gwt.maps.client.events.MapEventType;
010 import com.google.gwt.maps.client.events.MapHandlerRegistration;
011 import com.google.gwt.maps.client.events.channelnumber.ChannelNumberChangeEventFormatter;
012 import com.google.gwt.maps.client.events.channelnumber.ChannelNumberChangeMapHandler;
013 import com.google.gwt.maps.client.events.format.FormatChangeEventFormatter;
014 import com.google.gwt.maps.client.events.format.FormatChangeMapHandler;
015 import com.google.gwt.maps.client.events.mapchange.MapChangeEventFormatter;
016 import com.google.gwt.maps.client.events.mapchange.MapChangeMapHandler;
017 import com.google.gwt.maps.client.events.position.PositionChangeEventFormatter;
018 import com.google.gwt.maps.client.events.position.PositionChangeMapHandler;
019 import com.google.gwt.maps.client.mvc.MVCObject;
020
021 /**
022 * Implements AdSense for Content advertising on an associated map. To use an
023 * AdUnit, you must obtain and specify an AdSense for Content publisher ID
024 * within the AdUnit's constructor options. This class extends MVCObject.
025 * <br><br>
026 * See <a href="https://developers.google.com/maps/documentation/javascript/reference#AdUnit">AdUnit API Doc</a>
027 */
028 public class AdUnitImpl extends MVCObject<AdUnitImpl> {
029
030 private final static native JavaScriptObject createJso(Element container, AdUnitOptions options) /*-{
031 return new $wnd.google.maps.adsense.AdUnit(container, options);
032 }-*/;
033
034 /**
035 * Creates an AdSense for Content display ad on the associated map.
036 *
037 * @param options
038 */
039 public final static AdUnitImpl newInstance(Element container, AdUnitOptions options) {
040 return createJso(container, options).cast();
041 }
042
043 /**
044 * use newInstance();
045 */
046 protected AdUnitImpl() {}
047
048 /**
049 * This event is fired when the AdUnit's channelNumber property changes.
050 * @param handler
051 */
052 public final HandlerRegistration addChannelNumberChangeHandler(ChannelNumberChangeMapHandler handler) {
053 return MapHandlerRegistration.addHandler(this, MapEventType.CHANNELNUMBER_CHANGED, handler, new ChannelNumberChangeEventFormatter());
054 }
055
056 /**
057 * This event is fired when the AdUnit's format property changes.
058 * @param handler
059 */
060 public final HandlerRegistration addFormatChangeHandler(FormatChangeMapHandler handler) {
061 return MapHandlerRegistration.addHandler(this, MapEventType.FORMAT_CHANGED, handler, new FormatChangeEventFormatter());
062 }
063
064 /**
065 * This event is fired when the AdUnit's map property changes.
066 * @param handler
067 */
068 public final HandlerRegistration addMapChangeHandler(MapChangeMapHandler handler) {
069 return MapHandlerRegistration.addHandler(this, MapEventType.MAP_CHANGED, handler, new MapChangeEventFormatter());
070 }
071
072 /**
073 * This event is fired when the AdUnit's position property changes.
074 * @param handler
075 */
076 public final HandlerRegistration addPositionChangeHandler(PositionChangeMapHandler handler) {
077 return MapHandlerRegistration.addHandler(this, MapEventType.POSITION_CHANGED, handler, new PositionChangeEventFormatter());
078 }
079
080 /**
081 * Returns the channel number in use by this AdUnit.
082 */
083 public final native String getChannelNumber() /*-{
084 return this.getChannelNumber();
085 }-*/;
086
087 /**
088 * Returns the containing element of the AdUnit.
089 */
090 public final native Element getContainer() /*-{
091 return this.getContainer();
092 }-*/;
093
094 /**
095 * Returns the format in use by this AdUnit.
096 */
097 public final native AdFormat getFormat() /*-{
098 return this.getFormat();
099 }-*/;
100
101 /**
102 * Returns the map to which this AdUnit's ads are targeted.
103 */
104 public final MapWidget getMap() {
105 return MapWidget.newInstance(getMapImpl());
106 }
107
108 private final native MapImpl getMapImpl() /*-{
109 return this.getMap();
110 }-*/;
111
112 /**
113 * Returns the ControlPosition at which this AdUnit is displayed on the map.
114 */
115 public final ControlPosition getPosition() {
116 return ControlPosition.fromValue(getPositionImpl());
117 }
118
119 private final native int getPositionImpl() /*-{
120 return this.getPosition();
121 }-*/;
122
123 /**
124 * Returns the specified AdSense For Content publisher ID.
125 */
126 public final native String getPublisherId() /*-{
127 return this.getPublisherId();
128 }-*/;
129
130 /**
131 * Specifies the channel number for this AdUnit. Channel numbers are optional and can be created for Google AdSense tracking.
132 * @param channelNumber
133 */
134 public final native void setChannelNumber(String channelNumber) /*-{
135 this.channelNumber = channelNumber;
136 }-*/;
137
138 /**
139 * Specifies the display format for this AdUnit.
140 * @param format
141 */
142 public final native void setFormat(AdFormat format) /*-{
143 this.setFormat(format);
144 }-*/;
145
146 /**
147 * Associates this AdUnit with the specified map. Ads will be targeted to the map's viewport. The map must be specified in order to display ads.
148 * @param mapWidget
149 */
150 public final void setMap(MapWidget mapWidget) {
151 setMapImpl(mapWidget.getJso());
152 }
153
154 private final native void setMapImpl(MapImpl map) /*-{
155 this.setMap(map);
156 }-*/;
157
158 /**
159 * Sets the ControlPosition at which to display the AdUnit on the map. If the position is set to null, the AdUnit is removed from the map.
160 * @param position {@link ControlPosition}
161 */
162 public final void setPosition(ControlPosition position) {
163 setPositionImpl(position.value());
164 }
165
166 private final native void setPositionImpl(int position) /*-{
167 this.setPosition(position);
168 }-*/;
169
170 }