2023-10-25 18:01:11 +02:00
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 ;
2023-10-26 15:25:07 +02:00
import java.util.Map ;
import java.util.Map.Entry ;
2023-10-25 18:01:11 +02:00
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 ;
2023-10-26 15:25:07 +02:00
import org.gcube.informationsystem.types.reference.properties.LinkedEntity ;
import org.gcube.informationsystem.types.reference.properties.PropertyDefinition ;
2023-10-25 18:01:11 +02:00
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 ) ;
2023-10-26 15:25:07 +02:00
UsageKnowledge < ? > usageKnowledge = modelKnowledge . getModelTypesUsage ( modelType ) ;
2023-10-25 18:01:11 +02:00
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 ) ;
}
2023-10-26 15:25:07 +02:00
Type type = node . getNodeElement ( ) ;
String typeName = type . getName ( ) ;
2023-10-25 18:01:11 +02:00
2023-10-26 15:25:07 +02:00
if ( type . getAccessType ( ) ! = AccessType . PROPERTY ) {
@SuppressWarnings ( " unchecked " )
List < LinkedEntity > usage = ( List < LinkedEntity > ) usageKnowledge . getUsage ( typeName ) ;
logger . info ( " {}- {}{} {} " , stringBuffer . toString ( ) , typeName , level = = 0 ? " (ROOT) " : " " , usage ! = null ? " known usage from definitions " + usage : " No known usage from definitions " ) ;
} else {
@SuppressWarnings ( " unchecked " )
List < Map . Entry < String , PropertyDefinition > > usage = ( List < Entry < String , PropertyDefinition > > ) usageKnowledge . getUsage ( typeName ) ;
logger . info ( " {}- {}{} {} " , stringBuffer . toString ( ) , typeName , level = = 0 ? " (ROOT) " : " " , usage ! = null ? " known usage from definitions " + usage : " No known usage from definitions " ) ;
}
2023-10-25 18:01:11 +02:00
}
} ) ;
}
}
}