001 package com.google.gwt.maps.client.mvc;
002
003 import java.util.HashMap;
004
005 import com.google.gwt.core.client.JavaScriptObject;
006
007 /**
008 * Base class implementing KVO.
009 * <br><br>
010 * See <a href="https://developers.google.com/maps/documentation/javascript/reference#MVCObject">MVCObject API Doc</a>
011 */
012 public class MVCObject<T extends JavaScriptObject> extends JavaScriptObject {
013
014 /**
015 * Base class implementing KVO.
016 * use newInstance();
017 */
018 protected MVCObject() {}
019
020 /**
021 * (Main purpose is for internal use only)
022 * <br>
023 * create instance of MVCObject (inherited class)
024 */
025 public final static <T extends JavaScriptObject> MVCObject<T> createInstanceOfMVCObject() {
026 return createJsoMvcObject().cast();
027 }
028
029 /**
030 * Binds a View to a Model.
031 */
032 private final static native JavaScriptObject createJsoMvcObject() /*-{
033 return $wnd.google.maps.MVCObject();
034 }-*/;
035
036 /**
037 * Binds a View to a Model.
038 * @param key
039 * @param target
040 */
041 public final native void bindTo(String key, MVCObject<T> target) /*-{
042 this.bindTo(key, target);
043 }-*/;
044
045 /**
046 * Binds a View to a Model.
047 * @param key
048 * @param target
049 * @param targetKey
050 */
051 public final native void bindTo(String key, MVCObject<T> target, String targetKey) /*-{
052 this.bindTo(key, target, targetKey);
053 }-*/;
054
055 /**
056 * Binds a View to a Model.
057 * @param key
058 * @param target
059 * @param targetKey
060 * @param noNotify
061 */
062 public final native void bindTo(String key, MVCObject<T> target, String targetKey, boolean noNotify) /*-{
063 this.bindTo(key, target, targetKey, noNotify);
064 }-*/;
065
066 /**
067 * Generic handler for state changes. Override this in derived classes to handle arbitrary state changes.
068 * @param key
069 */
070 public final native void changed(String key) /*-{
071 this.changed(key);
072 }-*/;
073
074 /**
075 * Gets a value.
076 * @param key
077 */
078 public final native T get(String key) /*-{
079 return this.get(key);
080 }-*/;
081
082 /**
083 * Notify all observers of a change on this property. This notifies both objects that are bound to the object's property as well as the object that it is bound to.
084 * @param key
085 */
086 public final native void notify(String key) /*-{
087 this.notify(key);
088 }-*/;
089
090 /**
091 * Sets a value.
092 * @param key
093 * @param value
094 */
095 public final native void set(String key, T value) /*-{
096 this.set(key, value);
097 }-*/;
098
099 /**
100 * Sets a collection of key-value pairs.
101 * @param values
102 */
103 public final native void setValues(HashMap<String, String> values) /*-{
104 this.setValues(values);
105 }-*/;
106
107 /**
108 * Removes a binding. Unbinding will set the unbound property to the current value. The object will not be notified, as the value has not changed.
109 * @param key
110 */
111 public final native void unbind(String key) /*-{
112 this.unbind(key);
113 }-*/;
114
115 /**
116 * Removes all bindings.
117 */
118 public final native void unbindAll() /*-{
119 this.unbindAll();
120 }-*/;
121 }