MobyCentralModel library provides a basic BioMoby Registry model that can be used by other applications that need a coherent model to work with BioMoby repositories. The library contains a several singleton based models and a simple cache system based on XML files.
There are two packages in the library:
|org.inb.biomoby.central.cache.*||This package contains a simple XML file based cache implementation.|
|org.inb.biomoby.central.model.*||Package contains basic BioMoby model singletons.|
The cache is implemented using a JAXB API and accessed through a CacheConfig class. It is possible programmatically change a cache source providing a custom implementation of IMobyCentralCache interface. The default file based implementation MobyCentralFileCache stores a cache in a $HOME/.MobyCentralCache/ directory.
There are several singleton based models available for developer. All they are implemented an abstract AbstractModel so share the same basic methods to work with.
|public Collection<T> getElements();||Get all model elements|
|public T getElement(T element)||Get an element providing a given one as a reference (it uses equals() method, what in our case refer to a name/authority)|
|public boolean addElement(T element);||Adds a new element to the model|
|public boolean removeElement(T element);||Removes an element from the model|
|public boolean updateElement(T element1, T element2);||Updates an element referenced by element1 with information from element2.|
There are three singleton models provided: NamespacesModel, DatatypesModel and ServicesModel. While retrieving an information from BioMoby Registry, models automatically update an internal cache (could be disabled).
Somewhat a special model is a MobyCentralModel given that is does not connect to the BioMoby registry, but rather read a META-INF/MobyCentralList.xml configuration file. Also this model contains a currently selected BioMoby Registry notifying other models when changed (there may be only one active BioMoby Registry at a time).
Also there is a simple event system that provides a notification about a model changes.
To recieve event messages one should implement a ModelListener class and register it with a model using addListener(ModelListener
These three lines would give all services provided by an "INB" repository:
MobyCentral central = new MobyCentral("http://www.inab.org/cgi-bin/MOBY-Central.pl", "http://www.inab.org/MOBY/Central"); MobyCentralModel.instance().setSelectedCentral(central); List<Service> services = ServicesModel().instance().getElements();
If this is a first time the application launches, it would load all the services from the repository filling a cache. Consequent calls will load the information from a cache. To completely reload the cache there is a reload() method.
Even the models contain methods to modify BioMoby Registry they are NOT IMPLEMENTED so it is impossible to harm the registry by misusing the library.