2023-10-26 17:26:24 +02:00
|
|
|
package org.gcube.informationsystem.discovery.knowledge;
|
2023-02-08 17:56:13 +01:00
|
|
|
|
|
|
|
import java.util.LinkedHashMap;
|
|
|
|
import java.util.Map;
|
|
|
|
import java.util.ServiceLoader;
|
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
import org.gcube.informationsystem.base.reference.AccessType;
|
|
|
|
import org.gcube.informationsystem.base.reference.Element;
|
2023-02-10 12:12:24 +01:00
|
|
|
import org.gcube.informationsystem.discovery.Discovery;
|
2023-02-08 17:56:13 +01:00
|
|
|
import org.gcube.informationsystem.discovery.RegistrationProvider;
|
2023-02-08 18:21:03 +01:00
|
|
|
import org.gcube.informationsystem.tree.Tree;
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
import org.slf4j.LoggerFactory;
|
2023-02-08 17:56:13 +01:00
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
|
|
*/
|
|
|
|
public class Knowledge {
|
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
public static Logger logger = LoggerFactory.getLogger(Knowledge.class);
|
|
|
|
|
2023-02-08 17:56:13 +01:00
|
|
|
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;
|
2023-02-08 18:21:03 +01:00
|
|
|
protected Map<String, RegistrationProvider> registrationProviders;
|
2023-02-08 17:56:13 +01:00
|
|
|
|
|
|
|
private Knowledge() {
|
|
|
|
}
|
|
|
|
|
|
|
|
public ModelKnowledge getAllKnowledge() {
|
|
|
|
return allKnowledge;
|
|
|
|
}
|
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
public ModelKnowledge getModelKnowledge(RegistrationProvider rp) {
|
2023-02-08 17:56:13 +01:00
|
|
|
return modelKnowledges.get(rp.getModelName());
|
|
|
|
}
|
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
public ModelKnowledge getModelKnowledge(String modelName) {
|
2023-02-08 17:56:13 +01:00
|
|
|
return modelKnowledges.get(modelName);
|
|
|
|
}
|
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
public void validateModelKnowledge(RegistrationProvider rp) throws Exception {
|
|
|
|
ModelKnowledge modelKnowledge = getModelKnowledge(rp);
|
|
|
|
ModelKnowledgeValidator ra = new ModelKnowledgeValidator(rp);
|
|
|
|
|
|
|
|
AccessType[] accessTypes = AccessType.getModelTypes();
|
|
|
|
for(AccessType accessType : accessTypes) {
|
2023-02-10 12:12:24 +01:00
|
|
|
logger.trace("Going to analise discovered types of '{}' for model '{}'", accessType.getName(), rp.getModelName());
|
|
|
|
Discovery<Element> discovery = modelKnowledge.getDiscovery(accessType);
|
|
|
|
discovery.executeDiscoveredElementActions(ra);
|
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
logger.trace("Going to analise tree of '{}' type for model '{}'", accessType.getName(), rp.getModelName());
|
|
|
|
Tree<Class<Element>> tree = modelKnowledge.getClassesTree(accessType);
|
|
|
|
tree.elaborate(ra);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void validateModelKnowledge(String modelName) throws Exception {
|
|
|
|
RegistrationProvider rp = registrationProviders.get(modelName);
|
|
|
|
validateModelKnowledge(rp);
|
|
|
|
}
|
|
|
|
|
2023-02-08 17:56:13 +01:00
|
|
|
public void discover() throws Exception {
|
|
|
|
|
|
|
|
allKnowledge = new ModelKnowledge();
|
2023-02-10 12:12:24 +01:00
|
|
|
|
2023-02-08 17:56:13 +01:00
|
|
|
modelKnowledges = new LinkedHashMap<>();
|
2023-02-08 18:21:03 +01:00
|
|
|
registrationProviders = new LinkedHashMap<>();
|
2023-02-08 17:56:13 +01:00
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
ServiceLoader<? extends RegistrationProvider> providers = ServiceLoader
|
2023-02-08 17:56:13 +01:00
|
|
|
.load(RegistrationProvider.class);
|
|
|
|
|
2023-02-08 18:21:03 +01:00
|
|
|
for(RegistrationProvider rp : providers) {
|
|
|
|
|
|
|
|
registrationProviders.put(rp.getModelName(), rp);
|
|
|
|
|
2023-02-08 17:56:13 +01:00
|
|
|
ModelKnowledge modelKnowledge = new ModelKnowledge();
|
|
|
|
modelKnowledges.put(rp.getModelName(), modelKnowledge);
|
2023-02-10 12:12:24 +01:00
|
|
|
modelKnowledge.addPackages(rp.getPackagesToRegister());
|
2023-02-08 17:56:13 +01:00
|
|
|
modelKnowledge.createKnowledge();
|
|
|
|
|
2023-02-10 12:12:24 +01:00
|
|
|
allKnowledge.addPackages(rp.getPackagesToRegister());
|
2023-02-08 17:56:13 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
allKnowledge.createKnowledge();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|