102 lines
3.4 KiB
Java
102 lines
3.4 KiB
Java
|
package org.gcube.informationsystem.knowledge;
|
||
|
|
||
|
import java.io.File;
|
||
|
import java.io.IOException;
|
||
|
import java.net.URL;
|
||
|
import java.nio.charset.Charset;
|
||
|
import java.nio.file.Files;
|
||
|
import java.util.List;
|
||
|
import java.util.Set;
|
||
|
|
||
|
import org.gcube.com.fasterxml.jackson.databind.JsonNode;
|
||
|
import org.gcube.com.fasterxml.jackson.databind.ObjectMapper;
|
||
|
import org.gcube.informationsystem.base.reference.AccessType;
|
||
|
import org.gcube.informationsystem.queries.templates.QueryTemplateTest;
|
||
|
import org.gcube.informationsystem.tree.Node;
|
||
|
import org.gcube.informationsystem.tree.NodeElaborator;
|
||
|
import org.gcube.informationsystem.tree.Tree;
|
||
|
import org.gcube.informationsystem.types.TypeMapper;
|
||
|
import org.gcube.informationsystem.types.reference.Type;
|
||
|
import org.junit.Test;
|
||
|
import org.slf4j.Logger;
|
||
|
import org.slf4j.LoggerFactory;
|
||
|
|
||
|
/**
|
||
|
* @author Luca Frosini (ISTI - CNR)
|
||
|
*/
|
||
|
public class ModelKnowledgeTest{
|
||
|
|
||
|
private static final Logger logger = LoggerFactory.getLogger(ModelKnowledgeTest.class);
|
||
|
|
||
|
protected File getTypesDirectory() throws Exception {
|
||
|
URL logbackFileURL = QueryTemplateTest.class.getClassLoader().getResource("logback-test.xml");
|
||
|
File logbackFile = new File(logbackFileURL.toURI());
|
||
|
File resourcesDirectory = logbackFile.getParentFile();
|
||
|
return new File(resourcesDirectory, "types");
|
||
|
}
|
||
|
|
||
|
protected String readFile(File file) throws IOException {
|
||
|
byte[] encoded = Files.readAllBytes(file.toPath());
|
||
|
return new String(encoded, Charset.defaultCharset());
|
||
|
}
|
||
|
|
||
|
@Test
|
||
|
public void test() throws Exception {
|
||
|
ModelKnowledge<Type, TypeInformation> modelKnowledge = new ModelKnowledge<>(new TypeInformation());
|
||
|
|
||
|
File typesDirectory = getTypesDirectory();
|
||
|
|
||
|
AccessType[] modelTypes = AccessType.getModelTypes();
|
||
|
for(AccessType modelType : modelTypes) {
|
||
|
File file = new File(typesDirectory, modelType.getName() + ".json");
|
||
|
String json = readFile(file);
|
||
|
List<Type> types = TypeMapper.deserializeTypeDefinitions(json);
|
||
|
modelKnowledge.addAllType(types);
|
||
|
}
|
||
|
|
||
|
for(AccessType modelType : modelTypes) {
|
||
|
Tree<Type> tree = modelKnowledge.getTree(modelType);
|
||
|
|
||
|
tree.elaborate(new NodeElaborator<Type>() {
|
||
|
|
||
|
@Override
|
||
|
public void elaborate(Node<Type> node, int level) throws Exception {
|
||
|
StringBuffer stringBuffer = new StringBuffer();
|
||
|
for (int i = 0; i < level; ++i) {
|
||
|
stringBuffer.append(Node.INDENTATION);
|
||
|
}
|
||
|
|
||
|
String typeName = node.getNodeElement().getName();
|
||
|
logger.info("{}- {}{}", stringBuffer.toString(), typeName, level==0 ? " (ROOT)" : "");
|
||
|
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
logger.info("---------------------------------------------------\n\n\n");
|
||
|
|
||
|
for(AccessType modelType : modelTypes) {
|
||
|
Tree<Type> tree = modelKnowledge.getTree(modelType);
|
||
|
UsageKnowledge<?> usageKnowledge = modelKnowledge.getUsageKnowledge(modelType);
|
||
|
|
||
|
tree.elaborate(new NodeElaborator<Type>() {
|
||
|
|
||
|
@Override
|
||
|
public void elaborate(Node<Type> node, int level) throws Exception {
|
||
|
StringBuffer stringBuffer = new StringBuffer();
|
||
|
for (int i = 0; i < level; ++i) {
|
||
|
stringBuffer.append(Node.INDENTATION);
|
||
|
}
|
||
|
|
||
|
String typeName = node.getNodeElement().getName();
|
||
|
List<?> usage = usageKnowledge.getUsage(typeName);
|
||
|
|
||
|
logger.info("{}- {}{} {}", stringBuffer.toString(), typeName, level==0 ? " (ROOT) " : "", usage!=null ? "known usage from definitions " + usage : "No known usage from definitions");
|
||
|
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|