package org.gcube.informationsystem.model.discovery; import java.util.ArrayList; import java.util.List; import java.util.ServiceLoader; import org.gcube.informationsystem.base.reference.AccessType; 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.TypeBinder; 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.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 } }; List packages = new ArrayList(); Class tdClz = Type.class; packages.add(tdClz.getPackage()); AccessType[] accessTypes = AccessType.values(); for(AccessType accessType : accessTypes) { Class clz = accessType.getTypeClass(); packages.add(clz.getPackage()); } ServiceLoader regsitrationProviders = ServiceLoader .load(RegistrationProvider.class); for(RegistrationProvider registrationProvider : regsitrationProviders) { packages.addAll(registrationProvider.getPackagesToRegister()); } ElementSpecilizationDiscovery.manageISM(schemaAction, packages); } @Test public void testPropertyDiscovery() throws Exception { ElementSpecilizationDiscovery propertyDiscovery = new ElementSpecilizationDiscovery(PropertyElement.class); addDiscoveredModel(propertyDiscovery); propertyDiscovery.discover(); for(Class propertyClass : propertyDiscovery.getDiscovered()) { String json = TypeBinder.serializeType(propertyClass); logger.info("{}", json); Type typeDefinition = TypeBinder.deserializeTypeDefinition(json); logger.info("{}", ElementMapper.marshal(typeDefinition)); } } @Test public void testEntityTypeDefinitionSerialization() throws Exception { logger.info("{}", TypeBinder.serializeType(EntityType.class)); } @Test public void testDefinitionSerialization() throws Exception { logger.info("{}", TypeBinder.serializeType(Type.class)); logger.info("{}", TypeBinder.serializeType(EntityType.class)); logger.info("{}", TypeBinder.serializeType(RelationType.class)); logger.info("{}", TypeBinder.serializeType(PropertyType.class)); logger.info("{}", TypeBinder.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("{}", TypeBinder.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("{}", TypeBinder.serializeType(relation)); } } }