132 lines
4.8 KiB
Java
132 lines
4.8 KiB
Java
package org.gcube.resourcemanagement.model;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
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.utils.TypeVersion;
|
|
import org.gcube.informationsystem.utils.discovery.ElementSpecilizationDiscovery;
|
|
import org.gcube.informationsystem.utils.discovery.RegistrationProvider;
|
|
import org.gcube.informationsystem.utils.discovery.SchemaAction;
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
/**
|
|
* @author Luca Frosini (ISTI - CNR)
|
|
*/
|
|
public class ISMDiscoveryTest {
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(ISMDiscoveryTest.class);
|
|
|
|
|
|
private void checkType(Type type, Type expected) {
|
|
Assert.assertTrue(type.getName().compareTo(expected.getName())==0);
|
|
Assert.assertTrue(type.getVersion().compareTo(expected.getVersion())==0);
|
|
Assert.assertTrue(type.getDescription().compareTo(expected.getDescription())==0);
|
|
Assert.assertTrue(type.isAbstract() == expected.isAbstract());
|
|
|
|
Assert.assertTrue(type.getSuperClasses().containsAll(expected.getSuperClasses()));
|
|
Assert.assertTrue(expected.getSuperClasses().containsAll(type.getSuperClasses()));
|
|
|
|
|
|
Map<TypeVersion, String> typeChangelog = type.getChangelog();
|
|
Map<TypeVersion, String> typeManagedChangelog = expected.getChangelog();
|
|
|
|
Assert.assertTrue(typeChangelog.keySet().containsAll(typeManagedChangelog.keySet()));
|
|
Assert.assertTrue(typeManagedChangelog.keySet().containsAll(typeChangelog.keySet()));
|
|
|
|
for(TypeVersion typeVersion : typeChangelog.keySet()) {
|
|
Assert.assertTrue(typeChangelog.get(typeVersion).compareTo(typeManagedChangelog.get(typeVersion))==0);
|
|
}
|
|
|
|
if(type.getProperties()!=null || expected.getProperties()!=null) {
|
|
Assert.assertTrue(type.getProperties().containsAll(expected.getProperties()));
|
|
Assert.assertTrue(expected.getProperties().containsAll(type.getProperties()));
|
|
}
|
|
}
|
|
|
|
@Test
|
|
public void test() throws Exception {
|
|
|
|
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());
|
|
}
|
|
|
|
SchemaAction schemaAction = new SchemaAction() {
|
|
|
|
@Override
|
|
public <R extends RelationElement<? extends EntityElement, ? extends EntityElement>> void manageRelationClass(
|
|
Class<R> r) throws Exception {
|
|
if(r.isAssignableFrom(Type.class)) {
|
|
return;
|
|
}
|
|
Type type = TypeMapper.createTypeDefinition(r);
|
|
Assert.assertTrue(type.getName().compareTo(r.getSimpleName())==0);
|
|
|
|
String typeDefinitionString = TypeMapper.serializeTypeDefinition(type);
|
|
logger.debug("{} {}", r.getSimpleName(), typeDefinitionString);
|
|
|
|
Type deserilised = TypeMapper.deserializeTypeDefinition(typeDefinitionString);
|
|
checkType(type, deserilised);
|
|
}
|
|
|
|
@Override
|
|
public <P extends PropertyElement> void managePropertyClass(Class<P> p) throws Exception {
|
|
if(p.isAssignableFrom(Type.class)) {
|
|
return;
|
|
}
|
|
Type type = TypeMapper.createTypeDefinition(p);
|
|
Assert.assertTrue(type.getName().compareTo(p.getSimpleName())==0);
|
|
|
|
String typeDefinitionString = TypeMapper.serializeTypeDefinition(type);
|
|
logger.debug("{} {}", p.getSimpleName(), typeDefinitionString);
|
|
|
|
Type deserilised = TypeMapper.deserializeTypeDefinition(typeDefinitionString);
|
|
|
|
checkType(type, deserilised);
|
|
}
|
|
|
|
@Override
|
|
public <E extends EntityElement> void manageEntityClass(Class<E> e) throws Exception {
|
|
if(e.isAssignableFrom(Type.class)) {
|
|
return;
|
|
}
|
|
Type type = TypeMapper.createTypeDefinition(e);
|
|
Assert.assertTrue(type.getName().compareTo(e.getSimpleName())==0);
|
|
|
|
String typeDefinitionString = TypeMapper.serializeTypeDefinition(type);
|
|
logger.debug("{} {}", e.getSimpleName(), typeDefinitionString);
|
|
|
|
Type deserilised = TypeMapper.deserializeTypeDefinition(typeDefinitionString);
|
|
|
|
checkType(type, deserilised);
|
|
}
|
|
};
|
|
|
|
ElementSpecilizationDiscovery.manageISM(schemaAction , packages);
|
|
}
|
|
}
|