package com.yoursway.commons.preferences.core;
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 PreferenceSetting implements Dependee, PreferenceContainerListener {
private final PreferenceContainer container;
private final String name;
public PreferenceSetting(PreferenceContainer container, String name) {
if (container == null)
throw new NullPointerException("bag is null");
if (name == null)
throw new NullPointerException("name is null");
this.container = container;
this.name = name;
container.events().addListener(this);
}
@TracksDependencies
protected String rawValue() {
Tracker.dependsOn(this);
return container.get(name);
}
protected void setRawValue(String newValue) {
container.set(name, newValue);
}
private transient Broadcaster<DependeeListener> broadcaster = newBroadcaster(DependeeListener.class);
public EventSource<DependeeListener> dependeeEvents() {
return broadcaster;
}
public void somethingChanged() {
broadcaster.fire().changed(this);
}
}