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 extends RegistrationProvider> 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 extends E> 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 extends DocumentationGenerator> 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 extends Property> 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 extends RegistrationProvider> 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();
}
}