package hep.aida.dev;
import hep.aida.IManagedObject;
import hep.aida.ITree;
/**
* An interface to a Tree that allows adding nodes.
*/
public interface IDevTree extends ITree, IAddable
{
/**
* Add IManagedObject to the directory.
* If some folders in the path don't exist, can create
* new folders in the tree. Does not overwrite Objects,
* if IManagedObject already exists - do nothing and just
* return with, maybe, a warning.
*
* @param path The path of the diretory in which the object has to be added.
* @param object The IManagedObject to be added.
* @throws IllegalArgumentException if the path is not a directory.
*/
void add(String path, IManagedObject object) throws IllegalArgumentException;
/**
* Is called by the Store to let Tree know that a particular folder has been filled.
* "path" is path to a folder, cannot point to an Object.
* IDevTree relies on this method for its internal book-keeping, so
* Store MUST call "hasBeenFilled" after it fills a particular folder.
*
* @param path The path of the diretory which has been filled by the Store.
* @throws IllegalArgumentException If the path does not exist, or if it is not a directory.
*/
void hasBeenFilled(String path) throws IllegalArgumentException;
/*
* Ability to lock (synchronize) Tree methods maybe needed
* when using Tree in a multi-thread program. User have to
* set the lock Object before useinf it. Default lock=null
*/
void setLock(Object lock);
/*
* Ability to lock (synchronize) Tree methods maybe needed
* when using Tree in a multi-thread program. User have to
* obtain lock object from the Tree and synchronize on it
* Default lock=null
*/
Object getLock();
}