information-system-model/src/main/java/org/gcube/informationsystem/discovery/knowledge/Knowledge.java

74 lines
1.7 KiB
Java

package org.gcube.informationsystem.discovery.knowledge;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.ServiceLoader;
import org.gcube.informationsystem.discovery.RegistrationProvider;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class Knowledge {
private static Knowledge instance;
public static Knowledge getInstance() throws Exception {
return getInstance(false);
}
public static Knowledge getInstance(boolean forceRediscover) throws Exception {
if(forceRediscover) {
instance = null;
}
if(instance == null) {
instance = new Knowledge();
instance.discover();
}
return instance;
}
protected ModelKnowledge allKnowledge;
protected Map<String, ModelKnowledge> modelKnowledges;
private Knowledge() {
}
public ModelKnowledge getAllKnowledge() {
return allKnowledge;
}
public ModelKnowledge getModelKnowledges(RegistrationProvider rp) {
return modelKnowledges.get(rp.getModelName());
}
public ModelKnowledge getModelKnowledges(String modelName) {
return modelKnowledges.get(modelName);
}
public void discover() throws Exception {
allKnowledge = new ModelKnowledge();
modelKnowledges = new LinkedHashMap<>();
ServiceLoader<? extends RegistrationProvider> registrationProviders = ServiceLoader
.load(RegistrationProvider.class);
for(RegistrationProvider rp : registrationProviders) {
ModelKnowledge modelKnowledge = new ModelKnowledge();
modelKnowledges.put(rp.getModelName(), modelKnowledge);
modelKnowledge.addRegistrationProvider(rp);
modelKnowledge.createKnowledge();
allKnowledge.addRegistrationProvider(rp);
}
allKnowledge.createKnowledge();
}
}