From 982cce370c69eaa8155d247f25d1eb3fb22d0b07 Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Mon, 6 Feb 2023 18:03:47 +0100 Subject: [PATCH] Refactoring --- .../knowledge}/AddElementToTreeAction.java | 3 +- .../{ => knowledge}/ClassInformation.java | 2 +- .../discovery/knowledge/ModelKnowledge.java | 23 +++-- .../serialization/ElementMapper.java | 6 ++ .../tobereplaced/DiscoveryUtility.java | 94 ------------------- .../types/knowledge/TypeInformation.java | 27 ++++++ ...ystem.utils.discovery.RegistrationProvider | 1 + .../utils/discovery/ISMDiscoveryTest.java | 90 ++++-------------- 8 files changed, 70 insertions(+), 176 deletions(-) rename src/main/java/org/gcube/informationsystem/{tree => discovery/knowledge}/AddElementToTreeAction.java (82%) rename src/main/java/org/gcube/informationsystem/discovery/{ => knowledge}/ClassInformation.java (93%) delete mode 100644 src/main/java/org/gcube/informationsystem/tobereplaced/DiscoveryUtility.java create mode 100644 src/main/java/org/gcube/informationsystem/types/knowledge/TypeInformation.java create mode 100644 src/main/resources/META-INF/services/org.gcube.informationsystem.utils.discovery.RegistrationProvider diff --git a/src/main/java/org/gcube/informationsystem/tree/AddElementToTreeAction.java b/src/main/java/org/gcube/informationsystem/discovery/knowledge/AddElementToTreeAction.java similarity index 82% rename from src/main/java/org/gcube/informationsystem/tree/AddElementToTreeAction.java rename to src/main/java/org/gcube/informationsystem/discovery/knowledge/AddElementToTreeAction.java index 9b6b613..32b67b5 100644 --- a/src/main/java/org/gcube/informationsystem/tree/AddElementToTreeAction.java +++ b/src/main/java/org/gcube/informationsystem/discovery/knowledge/AddElementToTreeAction.java @@ -1,10 +1,11 @@ /** * */ -package org.gcube.informationsystem.tree; +package org.gcube.informationsystem.discovery.knowledge; import org.gcube.informationsystem.base.reference.Element; import org.gcube.informationsystem.discovery.DiscoveredElementAction; +import org.gcube.informationsystem.tree.Tree; /** * @author Luca Frosini (ISTI - CNR) diff --git a/src/main/java/org/gcube/informationsystem/discovery/ClassInformation.java b/src/main/java/org/gcube/informationsystem/discovery/knowledge/ClassInformation.java similarity index 93% rename from src/main/java/org/gcube/informationsystem/discovery/ClassInformation.java rename to src/main/java/org/gcube/informationsystem/discovery/knowledge/ClassInformation.java index e786fbd..04b32f3 100644 --- a/src/main/java/org/gcube/informationsystem/discovery/ClassInformation.java +++ b/src/main/java/org/gcube/informationsystem/discovery/knowledge/ClassInformation.java @@ -1,4 +1,4 @@ -package org.gcube.informationsystem.discovery; +package org.gcube.informationsystem.discovery.knowledge; import java.util.LinkedHashSet; import java.util.Set; diff --git a/src/main/java/org/gcube/informationsystem/discovery/knowledge/ModelKnowledge.java b/src/main/java/org/gcube/informationsystem/discovery/knowledge/ModelKnowledge.java index c21d8c2..0423e01 100644 --- a/src/main/java/org/gcube/informationsystem/discovery/knowledge/ModelKnowledge.java +++ b/src/main/java/org/gcube/informationsystem/discovery/knowledge/ModelKnowledge.java @@ -8,12 +8,13 @@ import java.util.Set; import org.gcube.informationsystem.base.reference.AccessType; import org.gcube.informationsystem.base.reference.Element; -import org.gcube.informationsystem.discovery.ClassInformation; import org.gcube.informationsystem.discovery.Discovery; import org.gcube.informationsystem.discovery.RegistrationProvider; import org.gcube.informationsystem.serialization.ElementMappingAction; -import org.gcube.informationsystem.tree.AddElementToTreeAction; import org.gcube.informationsystem.tree.Tree; +import org.gcube.informationsystem.types.TypeMapper; +import org.gcube.informationsystem.types.knowledge.AddTypeToTreeAction; +import org.gcube.informationsystem.types.knowledge.TypeInformation; import org.gcube.informationsystem.types.reference.Type; /** @@ -26,11 +27,12 @@ public class ModelKnowledge { } protected Map>> trees; - protected Map> typesTree; + protected Map> typeTrees; protected Map> discoveries; protected ModelKnowledge() { this.trees = new HashMap<>(); + this.typeTrees = new HashMap<>(); this.discoveries = new HashMap<>(); } @@ -46,15 +48,19 @@ public class ModelKnowledge { } ClassInformation classInformation = new ClassInformation(); + TypeInformation typeInformation = new TypeInformation(); for(AccessType accessType : modelTypes) { - Class clz = accessType.getTypeClass(); + Class clz = accessType.getTypeClass(); Tree> tree = new Tree<>(clz, classInformation); trees.put(accessType, tree); AddElementToTreeAction aetta = new AddElementToTreeAction(tree); - + Type type = TypeMapper.createTypeDefinition(clz); + Tree typeTree = new Tree<>(type, typeInformation); + typeTrees.put(accessType, typeTree); + AddTypeToTreeAction attta = new AddTypeToTreeAction(typeTree); Discovery discovery = new Discovery<>(clz); @@ -62,6 +68,7 @@ public class ModelKnowledge { discovery.addPackages(allPackages); discovery.addDiscoveredElementActions(new ElementMappingAction()); discovery.addDiscoveredElementActions(aetta); + discovery.addDiscoveredElementActions(attta); discovery.discover(); @@ -69,8 +76,12 @@ public class ModelKnowledge { } - public Tree> getTree(AccessType accessType) { + public Tree> getClassesTree(AccessType accessType) { return trees.get(accessType); } + public Tree getTypesTree(AccessType accessType) { + return typeTrees.get(accessType); + } + } diff --git a/src/main/java/org/gcube/informationsystem/serialization/ElementMapper.java b/src/main/java/org/gcube/informationsystem/serialization/ElementMapper.java index 464dc5e..7fe51c1 100644 --- a/src/main/java/org/gcube/informationsystem/serialization/ElementMapper.java +++ b/src/main/java/org/gcube/informationsystem/serialization/ElementMapper.java @@ -30,6 +30,7 @@ import org.gcube.com.fasterxml.jackson.databind.node.TextNode; import org.gcube.informationsystem.base.reference.AccessType; import org.gcube.informationsystem.base.reference.Element; import org.gcube.informationsystem.discovery.Discovery; +import org.gcube.informationsystem.discovery.knowledge.ModelKnowledge; import org.gcube.informationsystem.types.TypeMapper; import org.gcube.informationsystem.types.reference.Type; import org.slf4j.Logger; @@ -105,6 +106,11 @@ public abstract class ElementMapper { } } + try { + ModelKnowledge.getInstance().createKnowledge(); + }catch (Exception e) { + throw new RuntimeException(e); + } } diff --git a/src/main/java/org/gcube/informationsystem/tobereplaced/DiscoveryUtility.java b/src/main/java/org/gcube/informationsystem/tobereplaced/DiscoveryUtility.java deleted file mode 100644 index 555b137..0000000 --- a/src/main/java/org/gcube/informationsystem/tobereplaced/DiscoveryUtility.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.gcube.informationsystem.tobereplaced; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -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.discovery.DiscoveredElementAction; -import org.gcube.informationsystem.discovery.Discovery; -import org.gcube.informationsystem.discovery.RegistrationProvider; -import org.gcube.informationsystem.types.reference.Type; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class DiscoveryUtility { - - public static Logger logger = LoggerFactory.getLogger(DiscoveryUtility.class); - - public static List discoverPackages(){ - 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()); - } - - return packages; - } - - public static void discover(DiscoveredElementAction schemaAction) throws Exception { - List packages = DiscoveryUtility.discoverPackages(); - DiscoveryUtility.manageISM(schemaAction , packages); - } - - public static void manageISM(DiscoveredElementAction dea, Package... packages) throws Exception { - Discovery propertyDiscovery = new Discovery<>(PropertyElement.class); - if(Objects.nonNull(packages)) { - Arrays.stream(packages).forEach(p -> propertyDiscovery.addPackage(p)); - } - propertyDiscovery.discover(); - for(Class property : propertyDiscovery.getDiscoveredElement()) { - logger.trace("Going to manage : {}", property); - dea.analizeElement(property); - } - - Discovery entityDiscovery = new Discovery<>(EntityElement.class); - if(Objects.nonNull(packages)) { - Arrays.stream(packages).forEach(p -> entityDiscovery.addPackage(p)); - } - entityDiscovery.discover(); - - for(Class entity : entityDiscovery.getDiscoveredElement()) { - logger.trace("Going to manage : {}", entity); - dea.analizeElement(entity); - } - - @SuppressWarnings("rawtypes") - Discovery relationDiscovery = new Discovery(RelationElement.class); - if(Objects.nonNull(packages)) - Arrays.stream(packages).forEach(p -> relationDiscovery.addPackage(p)); - relationDiscovery.discover(); - - for(@SuppressWarnings("rawtypes") - Class relation : relationDiscovery.getDiscoveredElement()) { - logger.trace("Going to manage : {}", relation); - dea.analizeElement(relation); - } - } - - public static void manageISM(DiscoveredElementAction schemaAction, List packages) throws Exception { - if(Objects.nonNull(packages) && packages.size() > 0) { - manageISM(schemaAction, packages.stream().toArray(Package[]::new)); - } else { - manageISM(schemaAction); - } - } - -} diff --git a/src/main/java/org/gcube/informationsystem/types/knowledge/TypeInformation.java b/src/main/java/org/gcube/informationsystem/types/knowledge/TypeInformation.java new file mode 100644 index 0000000..d6d96d5 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/types/knowledge/TypeInformation.java @@ -0,0 +1,27 @@ +package org.gcube.informationsystem.types.knowledge; + +import java.util.HashSet; +import java.util.Set; + +import org.gcube.informationsystem.tree.NodeInformation; +import org.gcube.informationsystem.types.reference.Type; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class TypeInformation implements NodeInformation { + + @Override + public String getIdentifier(Type type) { + return type.getName(); + } + + @Override + public Set getParentIdentifiers(Type root, Type type) { + if(getIdentifier(type).compareTo(getIdentifier(root))==0) { + return new HashSet<>(); + } + return type.getSuperClasses(); + } + +} diff --git a/src/main/resources/META-INF/services/org.gcube.informationsystem.utils.discovery.RegistrationProvider b/src/main/resources/META-INF/services/org.gcube.informationsystem.utils.discovery.RegistrationProvider new file mode 100644 index 0000000..b153ab9 --- /dev/null +++ b/src/main/resources/META-INF/services/org.gcube.informationsystem.utils.discovery.RegistrationProvider @@ -0,0 +1 @@ +org.gcube.informationsystem.discovery.ISModelRegistrationProvider \ No newline at end of file diff --git a/src/test/java/org/gcube/informationsystem/utils/discovery/ISMDiscoveryTest.java b/src/test/java/org/gcube/informationsystem/utils/discovery/ISMDiscoveryTest.java index a90409f..b6e596f 100644 --- a/src/test/java/org/gcube/informationsystem/utils/discovery/ISMDiscoveryTest.java +++ b/src/test/java/org/gcube/informationsystem/utils/discovery/ISMDiscoveryTest.java @@ -1,19 +1,11 @@ package org.gcube.informationsystem.utils.discovery; -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.discovery.Discovery; -import org.gcube.informationsystem.discovery.RegistrationProvider; -import org.gcube.informationsystem.tobereplaced.DiscoveryUtility; -import org.gcube.informationsystem.discovery.DiscoveredElementAction; +import org.gcube.informationsystem.discovery.knowledge.ModelKnowledge; +import org.gcube.informationsystem.tree.Tree; import org.gcube.informationsystem.types.TypeMapper; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.properties.PropertyDefinition; @@ -32,12 +24,22 @@ public class ISMDiscoveryTest { private static final Logger logger = LoggerFactory.getLogger(ISMDiscoveryTest.class); @Test - public void testISMDIscovery() { - Discovery propertyDiscovery = new Discovery<>(PropertyElement.class); - propertyDiscovery.analizeElement(PropertyType.class); + public void testDiscovery() throws Exception { + ModelKnowledge modelKnowledge = ModelKnowledge.getInstance(); + modelKnowledge.createKnowledge(); + + AccessType[] accessTypes = AccessType.getModelTypes(); + for(AccessType accessType : accessTypes) { + + Tree> classesTree = modelKnowledge.getClassesTree(accessType); + logger.info("Classes tree for {} is\n{}", accessType.getName(), classesTree.toString()); + + Tree typesTree = modelKnowledge.getTypesTree(accessType); + logger.info("Types tree for {} is\n{}", accessType.getName(), typesTree.toString()); + + } } - private void checkType(Type type, Type expected) { Assert.assertTrue(type.getName().compareTo(expected.getName())==0); Assert.assertTrue(type.getVersion().compareTo(expected.getVersion())==0); @@ -64,7 +66,6 @@ public class ISMDiscoveryTest { } } - @Test public void testcheckType() throws Exception { Class clz = PropertyType.class; @@ -78,65 +79,6 @@ public class ISMDiscoveryTest { checkType(type, expected); } - @Test - public void test() throws Exception { - - 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()); - } - - DiscoveredElementAction schemaAction = new DiscoveredElementAction() { - - @Override - public > void manageRelationClass( - Class r) throws Exception { - Type type = TypeMapper.createTypeDefinition(r); - Assert.assertTrue(type.getName().compareTo(r.getSimpleName())==0); - String typeDefinitionJsonString = TypeMapper.serializeTypeDefinition(type); - logger.debug("{} {}", r.getSimpleName(), typeDefinitionJsonString); - Type expected = TypeMapper.deserializeTypeDefinition(typeDefinitionJsonString); - checkType(type, expected); - } - - @Override - public

void managePropertyClass(Class

p) throws Exception { - Type type = TypeMapper.createTypeDefinition(p); - Assert.assertTrue(type.getName().compareTo(p.getSimpleName())==0); - String typeDefinitionJsonString = TypeMapper.serializeTypeDefinition(type); - logger.debug("{} {}", p.getSimpleName(), typeDefinitionJsonString); - Type expected = TypeMapper.deserializeTypeDefinition(typeDefinitionJsonString); - checkType(type, expected); - } - - @Override - public void manageEntityClass(Class e) throws Exception { - Type type = TypeMapper.createTypeDefinition(e); - Assert.assertTrue(type.getName().compareTo(e.getSimpleName())==0); - String typeDefinitionJsonString = TypeMapper.serializeTypeDefinition(type); - logger.debug("{} {}", e.getSimpleName(), typeDefinitionJsonString); - Type expected = TypeMapper.deserializeTypeDefinition(typeDefinitionJsonString); - checkType(type, expected); - } - }; - - - DiscoveryUtility.manageISM(schemaAction , packages); - } - - @Test public void testTypeDefinition() throws Exception { Class clz = PropertyType.class;