package com.yoursway.commons.commitmodel.demo.properties; import static com.yoursway.utils.broadcaster.BroadcasterFactory.newBroadcaster; import com.yoursway.utils.EventSource; import com.yoursway.utils.broadcaster.Broadcaster; import com.yoursway.utils.dependencies.Dependee; import com.yoursway.utils.dependencies.DependeeListener; import com.yoursway.utils.dependencies.Tracker; import com.yoursway.utils.dependencies.TracksDependencies; public abstract class Property implements Dependee, PropertyBagListener { private final PropertyBag bag; private final String name; public Property(PropertyBag bag, String name) { if (bag == null) throw new NullPointerException("bag is null"); if (name == null) throw new NullPointerException("name is null"); this.bag = bag; this.name = name; bag.events().addListener(this); } @TracksDependencies protected String rawValue() { Tracker.dependsOn(this); return bag.get(name); } protected void rawUpdate(String rawValue, PropertyBagUpdateSession session) { session.put(name, rawValue); } private transient Broadcaster<DependeeListener> broadcaster = newBroadcaster(DependeeListener.class); public EventSource<DependeeListener> dependeeEvents() { return broadcaster; } public void somethingChanged() { broadcaster.fire().changed(this); } }