package context.arch.subscriber;
import java.util.concurrent.ConcurrentHashMap;
import context.arch.comm.DataObject;
import context.arch.comm.DataObjects;
import context.arch.storage.Attributes;
/**
* This class is a container for a group of callbacks.
* Callbacks can be added, removed, and found in the container.
*/
public class Callbacks extends ConcurrentHashMap<String, Callback> {
private static final long serialVersionUID = -8878636503751586244L;
/**
* Tag for a widget's callbacks
*/
public static final String CALLBACKS = "callbacks";
/**
* Empty constructor
*/
public Callbacks() {
super();
}
/**
* Constructor that takes a DataObject as a parameter. The DataObject
* must contain the tag <CALLBACKS>. It stores the encoded data.
*
* @param data DataObject that contains the callback info
*/
public Callbacks(DataObject data) {
super();
DataObject calls = data.getDataObject(CALLBACKS);
DataObjects v = calls.getChildren();
for (int i=0; i<v.size(); i++) {
addCallback(new Callback((DataObject)v.elementAt(i)));
}
}
/**
* Converts to a DataObject.
*
* @return Callbacks object converted to an <CALLBACKS> DataObject
*/
public DataObject toDataObject() {
DataObjects v = new DataObjects();
for (Callback c : values()) {
v.add(c.toDataObject());
}
return new DataObject(CALLBACKS,v);
}
/**
* Adds the given Callback object to the container.
*
* @param callback Callback to add
*/
public void addCallback(Callback callback) {
put(callback.getName(), callback);
}
/**
* Adds the given callback name and attributes to the container.
*
* @param name Name of the callback to add
* @param attributes Attributes of the callback being added
*/
public void addCallback(String name, Attributes attributes) {
put(name, new Callback(name, attributes));
}
/**
* Adds the given Callbacks object to the container.
*
* @param callbacks Callbacks to add
*/
public void addCallbacks(Callbacks callbacks) {
putAll(callbacks);
}
}