discovery reorganization

This commit is contained in:
Luca Frosini 2023-02-06 18:58:41 +01:00
parent 898cdcf29e
commit 74b3375473
9 changed files with 47 additions and 141 deletions

View File

@ -1,9 +1,10 @@
package org.gcube.resourcemanagement.model.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.gcube.informationsystem.utils.discovery.RegistrationProvider;
import org.gcube.informationsystem.discovery.RegistrationProvider;
import org.gcube.resourcemanagement.model.reference.entities.facets.SoftwareFacet;
import org.gcube.resourcemanagement.model.reference.entities.resources.EService;
import org.gcube.resourcemanagement.model.reference.properties.ValueSchema;
@ -18,8 +19,8 @@ public class GCubeModelRegistrationProvider implements RegistrationProvider {
public static final String GCUBE_MODEL_NAME = "gCube Model";
@Override
public List<Package> getPackagesToRegister() {
List<Package> packages = new ArrayList<>();
public Collection<Package> getPackagesToRegister() {
Set<Package> packages = new HashSet<>();
packages.add(ValueSchema.class.getPackage());
packages.add(SoftwareFacet.class.getPackage());
packages.add(EService.class.getPackage());

View File

@ -0,0 +1,36 @@
package org.gcube.resourcemanagement.model;
import org.gcube.informationsystem.base.reference.AccessType;
import org.gcube.informationsystem.base.reference.Element;
import org.gcube.informationsystem.discovery.knowledge.ModelKnowledge;
import org.gcube.informationsystem.tree.Tree;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author Luca Frosini (ISTI - CNR)
*/
public class DiscoveryTest {
private static final Logger logger = LoggerFactory.getLogger(DiscoveryTest.class);
@Test
public void testDiscovery() throws Exception {
ModelKnowledge modelKnowledge = ModelKnowledge.getInstance();
modelKnowledge.createKnowledge();
AccessType[] accessTypes = AccessType.getModelTypes();
for(AccessType accessType : accessTypes) {
Tree<Class<Element>> classesTree = modelKnowledge.getClassesTree(accessType);
logger.info("Classes tree for {} is\n{}", accessType.getName(), classesTree.toString());
// Tree<Type> typesTree = modelKnowledge.getTypesTree(accessType);
// logger.info("Types tree for {} is\n{}", accessType.getName(), typesTree.toString());
}
}
}

View File

@ -1,131 +0,0 @@
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.Version;
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<Version, String> typeChangelog = type.getChangelog();
Map<Version, String> typeManagedChangelog = expected.getChangelog();
Assert.assertTrue(typeChangelog.keySet().containsAll(typeManagedChangelog.keySet()));
Assert.assertTrue(typeManagedChangelog.keySet().containsAll(typeChangelog.keySet()));
for(Version 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);
}
}

View File

@ -5,11 +5,11 @@ import java.net.URI;
import org.gcube.informationsystem.base.reference.Element;
import org.gcube.informationsystem.model.impl.properties.EncryptedImpl;
import org.gcube.informationsystem.model.reference.properties.Encrypted;
import org.gcube.informationsystem.serialization.ElementMapper;
import org.gcube.informationsystem.types.PropertyTypeName.BaseType;
import org.gcube.informationsystem.types.TypeMapper;
import org.gcube.informationsystem.types.reference.Type;
import org.gcube.informationsystem.types.reference.properties.PropertyDefinition;
import org.gcube.informationsystem.utils.ElementMapper;
import org.gcube.resourcemanagement.model.impl.entities.facets.AccessPointFacetImpl;
import org.gcube.resourcemanagement.model.impl.properties.ValueSchemaImpl;
import org.gcube.resourcemanagement.model.reference.properties.ValueSchema;

View File

@ -8,7 +8,7 @@ import java.util.HashSet;
import java.util.Set;
import org.gcube.com.fasterxml.jackson.core.JsonProcessingException;
import org.gcube.informationsystem.utils.ElementMapper;
import org.gcube.informationsystem.serialization.ElementMapper;
import org.gcube.resourcemanagement.model.impl.entities.facets.ActionFacetImpl;
import org.gcube.resourcemanagement.model.impl.properties.EnumStringPropertyImpl;
import org.gcube.resourcemanagement.model.reference.properties.EnumStringProperty;

View File

@ -2,7 +2,7 @@ package org.gcube.resourcemanagement.model.reference.entities.facets;
import java.io.IOException;
import org.gcube.informationsystem.utils.ElementMapper;
import org.gcube.informationsystem.serialization.ElementMapper;
import org.gcube.resourcemanagement.model.impl.entities.facets.ContactFacetImpl;
import org.junit.Test;
import org.slf4j.Logger;

View File

@ -11,7 +11,7 @@ import org.gcube.informationsystem.model.reference.entities.Facet;
import org.gcube.informationsystem.model.reference.entities.Resource;
import org.gcube.informationsystem.model.reference.properties.Header;
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
import org.gcube.informationsystem.utils.ElementMapper;
import org.gcube.informationsystem.serialization.ElementMapper;
import org.gcube.resourcemanagement.model.impl.entities.resources.EServiceImpl;
import org.gcube.resourcemanagement.model.impl.entities.resources.HostingNodeImpl;
import org.gcube.resourcemanagement.model.impl.relations.isrelatedto.ActivatesImpl;

View File

@ -14,9 +14,9 @@ import org.gcube.informationsystem.model.impl.relations.ConsistsOfImpl;
import org.gcube.informationsystem.model.reference.entities.Facet;
import org.gcube.informationsystem.model.reference.entities.Resource;
import org.gcube.informationsystem.model.reference.relations.ConsistsOf;
import org.gcube.informationsystem.serialization.ElementMapper;
import org.gcube.informationsystem.types.TypeMapper;
import org.gcube.informationsystem.types.reference.entities.FacetType;
import org.gcube.informationsystem.utils.ElementMapper;
import org.gcube.informationsystem.utils.Version;
import org.gcube.resourcemanagement.model.impl.entities.facets.CPUFacetImpl;
import org.gcube.resourcemanagement.model.impl.entities.facets.ContactFacetImpl;