Improved knowledge creation

This commit is contained in:
Luca Frosini 2023-02-08 17:56:13 +01:00
parent 09d6c5dedc
commit b093e25ecf
3 changed files with 77 additions and 21 deletions

View File

@ -0,0 +1,73 @@
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();
}
}

View File

@ -12,7 +12,6 @@ import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.ServiceLoader;
import java.util.Set;
import org.gcube.com.fasterxml.jackson.core.JsonGenerationException;
@ -31,8 +30,7 @@ import org.gcube.com.fasterxml.jackson.databind.node.TextNode;
import org.gcube.informationsystem.base.reference.AccessType;
import org.gcube.informationsystem.base.reference.Element;
import org.gcube.informationsystem.discovery.Discovery;
import org.gcube.informationsystem.discovery.RegistrationProvider;
import org.gcube.informationsystem.discovery.knowledge.ModelKnowledge;
import org.gcube.informationsystem.discovery.knowledge.Knowledge;
import org.gcube.informationsystem.types.TypeMapper;
import org.gcube.informationsystem.types.reference.Type;
import org.slf4j.Logger;
@ -50,20 +48,6 @@ public abstract class ElementMapper {
protected static final Map<String, Class<? extends Element>> knownTypes;
private static ModelKnowledge modelKnowledge;
public static ModelKnowledge getGlobalModelKnowledgeInstance() {
if(modelKnowledge==null) {
modelKnowledge = new ModelKnowledge();
ServiceLoader<? extends RegistrationProvider> registrationProviders = ServiceLoader
.load(RegistrationProvider.class);
for(RegistrationProvider rp : registrationProviders) {
modelKnowledge.addRegistrationProvider(rp);
}
}
return modelKnowledge;
}
/**
* @return the ObjectMapper
*/
@ -123,7 +107,7 @@ public abstract class ElementMapper {
}
try {
ElementMapper.getGlobalModelKnowledgeInstance().createKnowledge();
Knowledge.getInstance();
}catch (Exception e) {
throw new RuntimeException(e);
}

View File

@ -4,8 +4,8 @@ import java.util.Map;
import org.gcube.informationsystem.base.reference.AccessType;
import org.gcube.informationsystem.base.reference.Element;
import org.gcube.informationsystem.discovery.knowledge.Knowledge;
import org.gcube.informationsystem.discovery.knowledge.ModelKnowledge;
import org.gcube.informationsystem.serialization.ElementMapper;
import org.gcube.informationsystem.tree.Tree;
import org.gcube.informationsystem.types.TypeMapper;
import org.gcube.informationsystem.types.reference.Type;
@ -26,8 +26,7 @@ public class DiscoveryTest {
@Test
public void testDiscovery() throws Exception {
ModelKnowledge modelKnowledge = ElementMapper.getGlobalModelKnowledgeInstance();
modelKnowledge.createKnowledge();
ModelKnowledge modelKnowledge = Knowledge.getInstance().getAllKnowledge();
AccessType[] accessTypes = AccessType.getModelTypes();
for(AccessType accessType : accessTypes) {