use of org.apache.stanbol.ontologymanager.registry.api.model.RegistryItem in project stanbol by apache.
the class TestRegistryManager method testCachingCentralised.
/**
* Verifies that by instantiating a new {@link RegistryManager} with a centralised caching policy and
* loading two registries, they share the same cache ontology manager.
*
* @throws Exception
*/
@Test
public void testCachingCentralised() throws Exception {
// Change the caching policy and setup a new registry manager.
configuration.put(RegistryManager.CACHING_POLICY, CachingPolicy.CENTRALISED);
regman = new RegistryManagerImpl(offline, provider, configuration);
// Check that the configuration was set.
assertNotNull(regman);
assertSame(CachingPolicy.CENTRALISED, regman.getCachingPolicy());
// All registries must have the same cache.
Iterator<Library> it = regman.getLibraries().iterator();
OntologyProvider<?> cache = it.next().getCache();
while (it.hasNext()) assertSame(cache, it.next().getCache());
// Now "touch" a library.
Registry reg;
do reg = regman.getRegistries().iterator().next(); while (!reg.hasChildren());
assertNotNull(reg);
// There has to be at least one non-empty lib from the test ontologies.
Library lib = null;
RegistryItem[] children = reg.getChildren();
for (int i = 0; i < children.length && lib == null; i++) if (children[i] instanceof Library)
lib = (Library) (children[i]);
assertNotNull(lib);
// Touch the library. Also test that the listener system works.
assertFalse(lib.getOntologies(OWLOntology.class).isEmpty());
}
use of org.apache.stanbol.ontologymanager.registry.api.model.RegistryItem in project stanbol by apache.
the class LibraryImpl method getOntologies.
@Override
public <O> Set<O> getOntologies(Class<O> returnType) throws RegistryContentException {
/*
* Note that this implementation is not synchronized. Listeners may indefinitely be notified before or
* after the rest of this method is executed. If listeners call loadOntologies(), they could still get
* a RegistryContentException, which however they can catch by calling loadOntologies() and
* getOntologies() in sequence.
*/
fireContentRequested(this);
// If no listener has saved the day by loading the ontologies by now, an exception will be thrown.
if (!loaded)
throw new LibraryContentNotLoadedException(this);
Set<O> ontologies = new HashSet<O>();
for (RegistryItem child : getChildren()) {
if (child instanceof RegistryOntology) {
O o = getCache().getStoredOntology(child.getIRI(), returnType);
// thrown when loading it), but just in case.
if (o != null)
ontologies.add(o);
else
throw new RegistryOntologyNotLoadedException((RegistryOntology) child);
}
}
return ontologies;
}
use of org.apache.stanbol.ontologymanager.registry.api.model.RegistryItem in project stanbol by apache.
the class RegistryManagerImpl method computeLoadFactors.
/**
* @deprecated with each library having its own cache, load balancing is no longer necessary
* @return
*/
protected Map<IRI, Float> computeLoadFactors() {
Map<IRI, Float> loadFactors = new HashMap<IRI, Float>();
for (Registry r : getRegistries()) {
int tot = 0, num = 0;
RegistryItem[] children = r.getChildren();
for (int i = 0; i < children.length; i++) {
if (children[i] instanceof Library) {
if (((Library) children[i]).isLoaded())
num++;
tot++;
}
}
loadFactors.put(r.getIRI(), (float) num / (float) tot);
}
return loadFactors;
}
use of org.apache.stanbol.ontologymanager.registry.api.model.RegistryItem in project stanbol by apache.
the class RegistryManagerImpl method computeBestCandidate.
/**
* @deprecated with each library having its own cache, load balancing is no longer necessary
* @return
*/
protected Registry computeBestCandidate(Library lib) {
Map<IRI, Float> loadFactors = computeLoadFactors();
IRI current = null;
float lowest = 1.0f;
for (RegistryItem item : lib.getParents()) {
IRI iri = item.getIRI();
if (loadFactors.containsKey(iri)) {
float f = loadFactors.get(iri);
if (f < lowest) {
lowest = f;
current = iri;
}
}
}
return (Registry) (population.get(current));
}
use of org.apache.stanbol.ontologymanager.registry.api.model.RegistryItem in project stanbol by apache.
the class RegistryManagerImpl method populateRegistry.
protected Registry populateRegistry(OWLOntology registry) throws RegistryContentException {
log.debug("Populating registry content from ontology {}", registry);
Registry reg = riFactory.createRegistry(registry);
Set<OWLOntology> closure = registry.getOWLOntologyManager().getImportsClosure(registry);
// Just scan all individuals. Recurse in case the registry imports more registries.
for (OWLIndividual ind : registry.getIndividualsInSignature(true)) {
// We do not allow anonymous registry items.
if (ind.isAnonymous())
continue;
RegistryItem item = null;
// IRI id = ind.asOWLNamedIndividual().getIRI();
Type t = RegistryUtils.getType(ind, closure);
if (t == null) {
log.warn("Undetermined type for registry ontology individual {}", ind);
continue;
}
switch(t) {
case LIBRARY:
log.debug("Found library for individual {}", ind);
// Create the library and attach to parent and children
item = populateLibrary(ind.asOWLNamedIndividual(), closure);
reg.addChild(item);
item.addRegistryContentListener(this);
break;
case ONTOLOGY:
log.debug("Found ontology for individual {}", ind);
// Create the ontology and attach to parent
item = populateOntology(ind.asOWLNamedIndividual(), closure);
item.addRegistryContentListener(this);
// We don't know where to attach it within this method.
break;
default:
break;
}
}
try {
reg.addRegistryContentListener(this);
log.info("Registry {} added.", reg.getIRI());
population.put(reg.getIRI(), reg);
} catch (Exception e) {
log.error("Invalid identifier for library item " + reg, e);
return null;
}
return reg;
}
Aggregations