1 31 32 package org.antlr.xjlib.foundation; 33 34 import java.lang.reflect.Method ; 35 import java.util.*; 36 37 public class XJObject { 38 39 private List observers = new ArrayList(); 40 private Map keyObservers = new HashMap(); 41 42 public void awake() { 43 44 } 45 46 public void addObserver(Object o) { 47 observers.add(o); 48 } 49 50 public void removeObserver(Object o) { 51 observers.remove(o); 52 } 53 54 public void addObserverForKey(Object o, String key) { 55 List list = (List)keyObservers.get(key); 56 if(list == null) { 57 list = new ArrayList(); 58 keyObservers.put(key, list); 59 } 60 list.add(o); 61 } 62 63 public void removeObserverForKey(Object o, String key) { 64 List list = (List)keyObservers.get(key); 65 if(list == null) 66 return; 67 68 list.remove(o); 69 } 70 71 public void bindObserverForKey(XJObject o, String key) { 72 this.addObserverForKey(o, key); 73 o.addObserverForKey(this, key); 74 } 75 76 public void keyValueChanged(Object sender, String key, Object value) { 77 keyValueChangedToObservers(observers, sender, key, value); 78 keyValueChangedToObservers((ArrayList)keyObservers.get(key), sender, key, value); 79 } 80 81 private void keyValueChangedToObservers(List observers, Object sender, String key, Object value) { 82 if(observers == null) 83 return; 84 85 Iterator iterator = observers.iterator(); 86 while(iterator.hasNext()) { 87 Object observer = iterator.next(); 88 if(observer == sender) 89 continue; 90 91 try { 92 XJObject object = (XJObject)observer; 93 object.observeValueForKey(sender, key, value); 94 } catch(Exception e) { 95 try { 96 Method m = observer.getClass().getMethod("observeValueForKey", new Class [] { Object .class, String .class, Object .class }); 97 m.invoke(observer, new Object [] { sender, key, value }); 98 } catch(Exception e2) { 99 } 100 } 101 } 102 } 103 104 public void observeValueForKey(Object sender, String key, Object value) { 105 106 } 107 } 108 | Popular Tags |