package org.holoeverywhere.addon;
/**
* Basic type-specified addon holder
*
* @param <T> class which this addon can handle
*/
public abstract class IAddonBase<T> {
private T mObject;
private IAddon mParent;
/**
* Only for system usage, don't call it!
*/
public final void attach(T object, IAddon parent) {
if (mObject != null || object == null || mParent != null || parent == null) {
throw new IllegalStateException();
}
mParent = parent;
onAttach(mObject = object);
}
/**
* @return Object associated with this addon instance
*/
public T get() {
return mObject;
}
/**
* @return Addon container
*/
public final IAddon getParent() {
return mParent;
}
/**
* Called when addon attached to object
*/
protected void onAttach(T object) {
}
}