Improved knowledge creation
This commit is contained in:
parent
09d6c5dedc
commit
b093e25ecf
|
@ -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();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -12,7 +12,6 @@ import java.util.Iterator;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.ServiceLoader;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.gcube.com.fasterxml.jackson.core.JsonGenerationException;
|
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.AccessType;
|
||||||
import org.gcube.informationsystem.base.reference.Element;
|
import org.gcube.informationsystem.base.reference.Element;
|
||||||
import org.gcube.informationsystem.discovery.Discovery;
|
import org.gcube.informationsystem.discovery.Discovery;
|
||||||
import org.gcube.informationsystem.discovery.RegistrationProvider;
|
import org.gcube.informationsystem.discovery.knowledge.Knowledge;
|
||||||
import org.gcube.informationsystem.discovery.knowledge.ModelKnowledge;
|
|
||||||
import org.gcube.informationsystem.types.TypeMapper;
|
import org.gcube.informationsystem.types.TypeMapper;
|
||||||
import org.gcube.informationsystem.types.reference.Type;
|
import org.gcube.informationsystem.types.reference.Type;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
|
@ -50,20 +48,6 @@ public abstract class ElementMapper {
|
||||||
|
|
||||||
protected static final Map<String, Class<? extends Element>> knownTypes;
|
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
|
* @return the ObjectMapper
|
||||||
*/
|
*/
|
||||||
|
@ -123,7 +107,7 @@ public abstract class ElementMapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ElementMapper.getGlobalModelKnowledgeInstance().createKnowledge();
|
Knowledge.getInstance();
|
||||||
}catch (Exception e) {
|
}catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,8 +4,8 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.gcube.informationsystem.base.reference.AccessType;
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||||||
import org.gcube.informationsystem.base.reference.Element;
|
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.discovery.knowledge.ModelKnowledge;
|
||||||
import org.gcube.informationsystem.serialization.ElementMapper;
|
|
||||||
import org.gcube.informationsystem.tree.Tree;
|
import org.gcube.informationsystem.tree.Tree;
|
||||||
import org.gcube.informationsystem.types.TypeMapper;
|
import org.gcube.informationsystem.types.TypeMapper;
|
||||||
import org.gcube.informationsystem.types.reference.Type;
|
import org.gcube.informationsystem.types.reference.Type;
|
||||||
|
@ -26,8 +26,7 @@ public class DiscoveryTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDiscovery() throws Exception {
|
public void testDiscovery() throws Exception {
|
||||||
ModelKnowledge modelKnowledge = ElementMapper.getGlobalModelKnowledgeInstance();
|
ModelKnowledge modelKnowledge = Knowledge.getInstance().getAllKnowledge();
|
||||||
modelKnowledge.createKnowledge();
|
|
||||||
|
|
||||||
AccessType[] accessTypes = AccessType.getModelTypes();
|
AccessType[] accessTypes = AccessType.getModelTypes();
|
||||||
for(AccessType accessType : accessTypes) {
|
for(AccessType accessType : accessTypes) {
|
||||||
|
|
Loading…
Reference in New Issue