resource-registry-database-.../src/test/java/org/gcube/informationsystem/model/discovery/EntityDiscoveryTest.java

137 lines
5.1 KiB
Java

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.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.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<? extends Element> ismDiscovery) {
ServiceLoader<? extends RegistrationProvider> regsitrationProviders = ServiceLoader
.load(RegistrationProvider.class);
for(RegistrationProvider registrationProvider : regsitrationProviders) {
List<Package> packages = registrationProvider.getPackagesToRegister();
for(Package p : packages) {
ismDiscovery.addPackage(p);
}
}
}
@Test
public void testDiscovery() throws Exception {
SchemaAction schemaAction = new SchemaAction() {
@Override
public <R extends RelationElement<? extends EntityElement,? extends EntityElement>> void manageRelationClass(Class<R> r)
throws Exception {
// TODO Auto-generated method stub
}
@Override
public <P extends PropertyElement> void managePropertyClass(Class<P> e) throws Exception {
// TODO Auto-generated method stub
}
@Override
public <E extends EntityElement> void manageEntityClass(Class<E> e) throws Exception {
// TODO Auto-generated method stub
}
};
List<Package> packages = new ArrayList<Package>();
Class<Type> tdClz = Type.class;
packages.add(tdClz.getPackage());
AccessType[] accessTypes = AccessType.values();
for(AccessType accessType : accessTypes) {
Class<Element> clz = accessType.getTypeClass();
packages.add(clz.getPackage());
}
ServiceLoader<? extends RegistrationProvider> regsitrationProviders = ServiceLoader
.load(RegistrationProvider.class);
for(RegistrationProvider registrationProvider : regsitrationProviders) {
packages.addAll(registrationProvider.getPackagesToRegister());
}
ElementSpecilizationDiscovery.manageISM(schemaAction, packages);
}
@Test
public void testPropertyDiscovery() throws Exception {
ElementSpecilizationDiscovery<PropertyElement> propertyDiscovery = new ElementSpecilizationDiscovery<PropertyElement>(PropertyElement.class);
addDiscoveredModel(propertyDiscovery);
propertyDiscovery.discover();
for(Class<? extends PropertyElement> 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<EntityElement> entityDiscovery = new ElementSpecilizationDiscovery<>(EntityElement.class);
addDiscoveredModel(entityDiscovery);
entityDiscovery.discover();
for(Class<? extends EntityElement> entity : entityDiscovery.getDiscovered()) {
logger.info("{}", TypeMapper.serializeType(entity));
}
}
@Test
public void testRelationDiscovery() throws Exception {
@SuppressWarnings("rawtypes")
ElementSpecilizationDiscovery<RelationElement> relationDiscovery = new ElementSpecilizationDiscovery<>(RelationElement.class);
addDiscoveredModel(relationDiscovery);
relationDiscovery.discover();
for(@SuppressWarnings("rawtypes") Class<? extends RelationElement> relation : relationDiscovery.getDiscovered()) {
logger.info("{}", TypeMapper.serializeType(relation));
}
}
}