From 195a3af39b81f68b8e3e7661099b73d11a606b7b Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Tue, 7 Feb 2023 14:09:25 +0100 Subject: [PATCH] Ported lib to new is-model utilities --- pom.xml | 10 +- .../generator/ClassesDiscoveryGenerator.java | 86 ------------- .../documentation/generator/Generator.java | 16 +-- .../generator/TreeGenerator.java | 114 ++++++++---------- .../entities/FacetDocumentationGenerator.java | 2 +- .../ResourceDocumentationGenerator.java | 2 +- .../ConsistsOfDocumentationGenerator.java | 2 +- .../IsRelatedToDocumentationGenerator.java | 2 +- .../utils/documentation/GenerateTest.java | 6 +- 9 files changed, 69 insertions(+), 171 deletions(-) delete mode 100644 src/main/java/org/gcube/informationsystem/utils/documentation/generator/ClassesDiscoveryGenerator.java diff --git a/pom.xml b/pom.xml index 14b7c2a..daf377f 100644 --- a/pom.xml +++ b/pom.xml @@ -75,11 +75,11 @@ logback-classic test - - org.gcube.resource-management - gcube-model - test - + + + + + \ No newline at end of file diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/generator/ClassesDiscoveryGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/ClassesDiscoveryGenerator.java deleted file mode 100644 index 8bdf5e3..0000000 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/generator/ClassesDiscoveryGenerator.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.gcube.informationsystem.utils.documentation.generator; - -import java.util.ArrayList; -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.types.TypeMapper; -import org.gcube.informationsystem.types.reference.Type; -import org.gcube.informationsystem.utils.discovery.ElementSpecilizationDiscovery; -import org.gcube.informationsystem.utils.discovery.RegistrationProvider; - -/** - * @author Luca Frosini (ISTI - CNR) - */ -public class ClassesDiscoveryGenerator extends Generator { - - protected TreeGenerator treeGenerator; - - public ClassesDiscoveryGenerator() { - - } - - public List getPackages(){ - - List packages = new ArrayList(); - - AccessType[] accessTypes = new AccessType[] { - AccessType.PROPERTY, - AccessType.ENTITY, - AccessType.RELATION - }; - - for(AccessType accessType : accessTypes) { - Class clz = accessType.getTypeClass(); - packages.add(clz.getPackage()); - } - - return packages; - } - - public List getExtensionsPackages(){ - List packages = new ArrayList(); - ServiceLoader regsitrationProviders = ServiceLoader - .load(RegistrationProvider.class); - for(RegistrationProvider registrationProvider : regsitrationProviders) { - packages.addAll(registrationProvider.getPackagesToRegister()); - } - return packages; - } - - public void generate() throws Exception { - List packages = getPackages(); - packages.addAll(getExtensionsPackages()); - generate(packages); - } - - protected void discover(AccessType at, List packages) throws Exception { - ElementSpecilizationDiscovery discovery = new ElementSpecilizationDiscovery<>(at.getTypeClass(), false); - if(Objects.nonNull(packages)) { - for(Package p : packages) { - discovery.addPackage(p); - } - } - discovery.discover(); - - for(Class clz : discovery.getDiscovered()) { - Type type = TypeMapper.createTypeDefinition(clz); - treeGenerator.addType(type); - } - } - - public void generate(List packages) throws Exception { - treeGenerator = new TreeGenerator(); - AccessType[] types = new AccessType[] { - AccessType.PROPERTY, - AccessType.RESOURCE, AccessType.FACET, - AccessType.CONSISTS_OF, AccessType.IS_RELATED_TO}; - for(AccessType at : types) { - discover(at, packages); - } - treeGenerator.generate(); - } -} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/generator/Generator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/Generator.java index 8854609..5605f05 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/generator/Generator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/Generator.java @@ -25,14 +25,8 @@ public class Generator { private static final Logger logger = LoggerFactory.getLogger(Generator.class); - protected AccessType[] accessTypes; - public Generator() { - accessTypes = new AccessType[] { - AccessType.PROPERTY, - AccessType.ENTITY, AccessType.RESOURCE, AccessType.FACET, - AccessType.RELATION, AccessType.CONSISTS_OF, AccessType.IS_RELATED_TO - }; + } public Class getDocumentationGeneratorClass(AccessType accessType) @@ -132,6 +126,14 @@ public class Generator { return file; } + protected void writeSectionOnly(Type type, File file, Integer level) throws Exception { + DocumentationGenerator dg = getDocumentationGenerator(type); + if(level!=null) { + dg.setLevel(level); + } + StringBuffer sb = dg.generateSection(); + Files.write(file.toPath(), sb.toString().getBytes(), StandardOpenOption.APPEND); + } protected void writeTypeToFile(Type type, File file, Integer level) throws Exception { DocumentationGenerator dg = getDocumentationGenerator(type); diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/generator/TreeGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/TreeGenerator.java index a50be7c..6aec57a 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/generator/TreeGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/TreeGenerator.java @@ -1,24 +1,19 @@ package org.gcube.informationsystem.utils.documentation.generator; import java.io.File; -import java.nio.file.Files; -import java.nio.file.StandardOpenOption; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; +import java.util.Collection; +import java.util.ServiceLoader; import org.gcube.informationsystem.base.reference.AccessType; -import org.gcube.informationsystem.model.reference.properties.Encrypted; -import org.gcube.informationsystem.model.reference.properties.Header; -import org.gcube.informationsystem.model.reference.properties.PropagationConstraint; -import org.gcube.informationsystem.model.reference.properties.Property; +import org.gcube.informationsystem.base.reference.Element; +import org.gcube.informationsystem.discovery.ISModelRegistrationProvider; +import org.gcube.informationsystem.discovery.RegistrationProvider; +import org.gcube.informationsystem.discovery.knowledge.ModelKnowledge; +import org.gcube.informationsystem.tree.Node; +import org.gcube.informationsystem.tree.NodeElaborator; +import org.gcube.informationsystem.tree.Tree; import org.gcube.informationsystem.types.TypeMapper; import org.gcube.informationsystem.types.reference.Type; -import org.gcube.informationsystem.utils.documentation.model.DocumentationGenerator; -import org.gcube.informationsystem.utils.knowledge.Node; -import org.gcube.informationsystem.utils.knowledge.NodeElaborator; -import org.gcube.informationsystem.utils.knowledge.Tree; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,62 +29,36 @@ public class TreeGenerator extends Generator { public static final String ENTITIES_FILENAME = "entities.rst"; public static final String RELATIONS_FILENAME = "relations.rst"; - protected static final List> isModelProperties; - - static { - isModelProperties = new ArrayList<>(); - isModelProperties.add(Header.class); - isModelProperties.add(Encrypted.class); - isModelProperties.add(PropagationConstraint.class); - } - - protected Map types; - public TreeGenerator() { - types = new TreeMap<>(); } - public void addType(Type type) { - AccessType accessType = type.getAccessType(); - if(types.get(accessType)==null) { - Type head = TypeMapper.createTypeDefinition(accessType.getTypeClass()); - Tree tree = new Tree(head); - types.put(accessType, tree); - } - if(type.getName().compareTo(accessType.getName())==0) { - // Head has been already added - return; - } - Tree tree = types.get(accessType); - tree.addNode(type); - } - - public void elaborateTree(final AccessType at, Tree tree, final File file) throws Exception { + public void elaborateTree(final AccessType at, Tree> tree, File file, RegistrationProvider rp) throws Exception { logger.info("Going to elaborate the following type tree\n{}", tree.toString()); - NodeElaborator documentationNE = new NodeElaborator() { - - protected void writeSectionOnly(Type type, int level) throws Exception { - DocumentationGenerator dg = getDocumentationGenerator(type); - dg.setLevel(level); - StringBuffer sb = dg.generateSection(); - Files.write(file.toPath(), sb.toString().getBytes(), StandardOpenOption.APPEND); - } + Collection packages = rp.getPackagesToRegister(); + + NodeElaborator> documentationNE = new NodeElaborator>() { @Override - public void elaborate(Node node, int level) throws Exception { - Type type = node.getType(); + public void elaborate(Node> node, int level) throws Exception { + Class clz = node.getNodeElement(); + if(level!=0 && !packages.contains(clz.getPackage())) { + logger.debug("Discarding {} because it does not belong to {}", clz.getSimpleName(), rp.getModelName()); + return; + } + Type type = TypeMapper.createTypeDefinition(clz); if(level==0) { /* * Root node has been already documented in IS_MODEL_FILENAME * Going to skip it */ - writeSectionOnly(type, level); + writeSectionOnly(type, file, level); } else { writeTypeToFile(type, file, level); } } + }; tree.elaborate(documentationNE); @@ -97,36 +66,49 @@ public class TreeGenerator extends Generator { public void generate() throws Exception { + ModelKnowledge modelKnowledge = ModelKnowledge.getInstance(); + modelKnowledge.createKnowledge(); + File is = getFile(IS_MODEL_FILENAME, true); File file = null; - for(AccessType at : accessTypes) { - Type type = TypeMapper.createTypeDefinition(at.getTypeClass()); - writeTypeToFile(type, is); + for(AccessType at : AccessType.getModelTypes()) { + switch (at) { case PROPERTY: file = getFile(PROPERTIES_FILENAME, true); - for(Class clz : isModelProperties) { - Type t = TypeMapper.createTypeDefinition(clz); - writeTypeToFile(t, is, 1); - } break; - case ENTITY: + case RESOURCE: file = getFile(ENTITIES_FILENAME, true); - continue; + Type type = TypeMapper.createTypeDefinition(AccessType.ENTITY.getTypeClass()); + writeTypeToFile(type, is); + break; - case RELATION: + case IS_RELATED_TO: file = getFile(RELATIONS_FILENAME, true); - continue; + type = TypeMapper.createTypeDefinition(AccessType.RELATION.getTypeClass()); + writeTypeToFile(type, is); + break; default: break; } - Tree tree = types.get(at); - elaborateTree(at, tree, file); + Type type = TypeMapper.createTypeDefinition(at.getTypeClass()); + writeTypeToFile(type, is); + + Tree> tree = modelKnowledge.getClassesTree(at); + + ServiceLoader registrationProviders = ServiceLoader + .load(RegistrationProvider.class); + for(RegistrationProvider rp : registrationProviders) { + if(!(rp instanceof ISModelRegistrationProvider)) { + elaborateTree(at, tree, file, rp); + } + } + } } diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/FacetDocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/FacetDocumentationGenerator.java index 689291f..9159baf 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/FacetDocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/FacetDocumentationGenerator.java @@ -3,11 +3,11 @@ package org.gcube.informationsystem.utils.documentation.model.entities; import java.util.Set; import org.gcube.informationsystem.base.reference.AccessType; +import org.gcube.informationsystem.discovery.knowledge.UsageKnowledge; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.properties.LinkedEntity; import org.gcube.informationsystem.types.reference.properties.PropertyDefinition; import org.gcube.informationsystem.utils.documentation.rst.table.Table; -import org.gcube.informationsystem.utils.knowledge.UsageKnowledge; /** * @author Luca Frosini (ISTI - CNR) diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/ResourceDocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/ResourceDocumentationGenerator.java index 37220d2..4b735f7 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/ResourceDocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/ResourceDocumentationGenerator.java @@ -3,11 +3,11 @@ package org.gcube.informationsystem.utils.documentation.model.entities; import java.util.Set; import org.gcube.informationsystem.base.reference.AccessType; +import org.gcube.informationsystem.discovery.knowledge.UsageKnowledge; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.entities.ResourceType; import org.gcube.informationsystem.types.reference.properties.LinkedEntity; import org.gcube.informationsystem.utils.documentation.rst.table.Table; -import org.gcube.informationsystem.utils.knowledge.UsageKnowledge; /** * @author Luca Frosini (ISTI - CNR) diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/ConsistsOfDocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/ConsistsOfDocumentationGenerator.java index fe3455e..ac344e4 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/ConsistsOfDocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/ConsistsOfDocumentationGenerator.java @@ -3,10 +3,10 @@ package org.gcube.informationsystem.utils.documentation.model.relations; import java.util.Set; import org.gcube.informationsystem.base.reference.AccessType; +import org.gcube.informationsystem.discovery.knowledge.UsageKnowledge; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.properties.LinkedEntity; import org.gcube.informationsystem.utils.documentation.rst.table.Table; -import org.gcube.informationsystem.utils.knowledge.UsageKnowledge; /** * @author Luca Frosini (ISTI - CNR) diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/IsRelatedToDocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/IsRelatedToDocumentationGenerator.java index e21e1da..f1e4ace 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/IsRelatedToDocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/IsRelatedToDocumentationGenerator.java @@ -3,10 +3,10 @@ package org.gcube.informationsystem.utils.documentation.model.relations; import java.util.Set; import org.gcube.informationsystem.base.reference.AccessType; +import org.gcube.informationsystem.discovery.knowledge.UsageKnowledge; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.properties.LinkedEntity; import org.gcube.informationsystem.utils.documentation.rst.table.Table; -import org.gcube.informationsystem.utils.knowledge.UsageKnowledge; /** * @author Luca Frosini (ISTI - CNR) diff --git a/src/test/java/org/gcube/informationsystem/utils/documentation/GenerateTest.java b/src/test/java/org/gcube/informationsystem/utils/documentation/GenerateTest.java index a476263..60dc96a 100644 --- a/src/test/java/org/gcube/informationsystem/utils/documentation/GenerateTest.java +++ b/src/test/java/org/gcube/informationsystem/utils/documentation/GenerateTest.java @@ -1,6 +1,6 @@ package org.gcube.informationsystem.utils.documentation; -import org.gcube.informationsystem.utils.documentation.generator.ClassesDiscoveryGenerator; +import org.gcube.informationsystem.utils.documentation.generator.TreeGenerator; import org.gcube.informationsystem.utils.documentation.model.DocumentationGenerator; import org.junit.Test; @@ -12,8 +12,8 @@ public class GenerateTest { @Test public void testDocGeneration() throws Exception { DocumentationGenerator.setDefaultOffsetLevel(2); - ClassesDiscoveryGenerator documentationGenerator = new ClassesDiscoveryGenerator(); - documentationGenerator.generate(); + TreeGenerator treeGenerator = new TreeGenerator(); + treeGenerator.generate(); } }