package hep.aida.ref;
import hep.aida.ICloud1D;
import hep.aida.ICloud2D;
import hep.aida.ICloud3D;
import hep.aida.IDataPointSet;
import hep.aida.IFunction;
import hep.aida.IHistogram1D;
import hep.aida.IHistogram2D;
import hep.aida.IHistogram3D;
import hep.aida.IProfile1D;
import hep.aida.IProfile2D;
import hep.aida.ITuple;
import hep.aida.ref.event.Connectable;
/**
* An object which can be stored in a tree.
* Implementation of IManagedObject.
*
* @author The AIDA Team at SLAC
*
*/
public class ManagedObject extends hep.aida.ref.event.AIDAObservable implements Connectable, hep.aida.dev.IDevManagedObject {
private String name;
protected boolean fillable;
private static final Class[] managedClasses = {IHistogram1D.class,IHistogram2D.class,IHistogram3D.class,
ICloud1D.class,ICloud2D.class,ICloud3D.class,
IProfile1D.class,IProfile2D.class,
IDataPointSet.class,
IFunction.class,
ITuple.class};
/**
* Creates a new instance of ManagedObject.
* @param name The name of the ManagedObject as it will appear in the Tree.
*
*/
public ManagedObject(String name) {
this.name = name;
fillable = true;
}
/**
* If ManagedObject is fillable, it can modified.
* othervisw throws ReadOnlyException.
*/
public void setFillable(boolean fillable) {
this.fillable = fillable;
}
public boolean isFillable() {
return fillable;
}
/**
* Get the name of this ManagedObject.
* Names can only be changed using the ITree.mv().
* @return The name of the ManagedObject.
*
*/
public String name() {
return name;
}
/**
* Set the name of this ManagedObject.
* @param name The new name of the ManagedObject.
*
*/
public void setName(String name) {
this.name = name;
}
public String type() {
return typeForClass(getClass());
}
public static String typeForClass(Class c) {
for ( int i = 0; i < managedClasses.length; i++ )
if ( managedClasses[i].isAssignableFrom(c))
return managedClasses[i].getName().substring( managedClasses[i].getName().lastIndexOf(".")+1 );
return "IUnknown";
}
}