package org.gcube.informationsystem.model.discovery; import java.util.List; import java.util.ServiceLoader; import org.gcube.informationsystem.base.reference.Element; import org.gcube.informationsystem.base.reference.entities.EntityElement; import org.gcube.informationsystem.base.reference.properties.PropertyElement; import org.gcube.informationsystem.base.reference.relations.RelationElement; import org.gcube.informationsystem.types.TypeMapper; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.entities.EntityType; import org.gcube.informationsystem.types.reference.properties.PropertyDefinition; import org.gcube.informationsystem.types.reference.properties.PropertyType; import org.gcube.informationsystem.types.reference.relations.RelationType; import org.gcube.informationsystem.utils.ElementMapper; import org.gcube.informationsystem.utils.discovery.Discovery; import org.gcube.informationsystem.utils.discovery.ElementSpecilizationDiscovery; import org.gcube.informationsystem.utils.discovery.RegistrationProvider; import org.gcube.informationsystem.utils.discovery.SchemaAction; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EntityDiscoveryTest { private static Logger logger = LoggerFactory.getLogger(ElementSpecilizationDiscovery.class); private void addDiscoveredModel(ElementSpecilizationDiscovery ismDiscovery) { ServiceLoader regsitrationProviders = ServiceLoader .load(RegistrationProvider.class); for(RegistrationProvider registrationProvider : regsitrationProviders) { List packages = registrationProvider.getPackagesToRegister(); for(Package p : packages) { ismDiscovery.addPackage(p); } } } @Test public void testDiscovery() throws Exception { SchemaAction schemaAction = new SchemaAction() { @Override public > void manageRelationClass(Class r) throws Exception { // TODO Auto-generated method stub } @Override public

void managePropertyClass(Class

e) throws Exception { // TODO Auto-generated method stub } @Override public void manageEntityClass(Class e) throws Exception { // TODO Auto-generated method stub } }; Discovery.discover(schemaAction); } @Test public void testPropertyDiscovery() throws Exception { ElementSpecilizationDiscovery propertyDiscovery = new ElementSpecilizationDiscovery(PropertyElement.class); addDiscoveredModel(propertyDiscovery); propertyDiscovery.discover(); for(Class propertyClass : propertyDiscovery.getDiscovered()) { String json = TypeMapper.serializeType(propertyClass); logger.info("{}", json); Type typeDefinition = TypeMapper.deserializeTypeDefinition(json); logger.info("{}", ElementMapper.marshal(typeDefinition)); } } @Test public void testEntityTypeDefinitionSerialization() throws Exception { logger.info("{}", TypeMapper.serializeType(EntityType.class)); } @Test public void testDefinitionSerialization() throws Exception { logger.info("{}", TypeMapper.serializeType(Type.class)); logger.info("{}", TypeMapper.serializeType(EntityType.class)); logger.info("{}", TypeMapper.serializeType(RelationType.class)); logger.info("{}", TypeMapper.serializeType(PropertyType.class)); logger.info("{}", TypeMapper.serializeType(PropertyDefinition.class)); } @Test public void testEntityDiscovery() throws Exception { ElementSpecilizationDiscovery entityDiscovery = new ElementSpecilizationDiscovery<>(EntityElement.class); addDiscoveredModel(entityDiscovery); entityDiscovery.discover(); for(Class entity : entityDiscovery.getDiscovered()) { logger.info("{}", TypeMapper.serializeType(entity)); } } @Test public void testRelationDiscovery() throws Exception { @SuppressWarnings("rawtypes") ElementSpecilizationDiscovery relationDiscovery = new ElementSpecilizationDiscovery<>(RelationElement.class); addDiscoveredModel(relationDiscovery); relationDiscovery.discover(); for(@SuppressWarnings("rawtypes") Class relation : relationDiscovery.getDiscovered()) { logger.info("{}", TypeMapper.serializeType(relation)); } } }