From 7a61f15c6657fac110bcd06fa34f11057c42076a Mon Sep 17 00:00:00 2001 From: Luca Frosini Date: Sun, 22 Jan 2023 19:44:32 +0100 Subject: [PATCH] Improving solution --- pom.xml | 5 + .../ClassesDiscoveryGenerator.java | 2 +- .../{ => generator}/TypeListGenerator.java | 8 +- .../knowledge/FacetKnowledge.java | 57 --------- .../knowledge/ResourceKnowledge.java | 57 --------- .../utils/documentation/knowledge/Tree.java | 109 ++++++++++++++++++ .../knowledge/TypesKnowledge.java | 45 ++++++++ .../knowledge/UsageKnowledge.java | 73 ++++++++++++ .../model/DocumentationGenerator.java | 38 +++--- .../EntityDocumentationGenerator.java | 17 +-- .../entities/FacetDocumentationGenerator.java | 9 +- .../ResourceDocumentationGenerator.java | 16 ++- .../PropertyDocumentationGenerator.java | 9 +- .../ConsistsOfDocumentationGenerator.java | 10 +- .../IsRelatedToDocumentationGenerator.java | 10 +- .../RelationDocumentationGenerator.java | 13 +-- .../utils/documentation/rst/Section.java | 18 +-- .../utils/documentation/GenerateTest.java | 1 + 18 files changed, 323 insertions(+), 174 deletions(-) rename src/main/java/org/gcube/informationsystem/utils/documentation/{ => generator}/ClassesDiscoveryGenerator.java (97%) rename src/main/java/org/gcube/informationsystem/utils/documentation/{ => generator}/TypeListGenerator.java (96%) delete mode 100644 src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/FacetKnowledge.java delete mode 100644 src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/ResourceKnowledge.java create mode 100644 src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/Tree.java create mode 100644 src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/TypesKnowledge.java create mode 100644 src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/UsageKnowledge.java diff --git a/pom.xml b/pom.xml index 09d2d9d..c924b3c 100644 --- a/pom.xml +++ b/pom.xml @@ -68,6 +68,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/ClassesDiscoveryGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/ClassesDiscoveryGenerator.java similarity index 97% rename from src/main/java/org/gcube/informationsystem/utils/documentation/ClassesDiscoveryGenerator.java rename to src/main/java/org/gcube/informationsystem/utils/documentation/generator/ClassesDiscoveryGenerator.java index eb157f2..791401f 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/ClassesDiscoveryGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/ClassesDiscoveryGenerator.java @@ -1,4 +1,4 @@ -package org.gcube.informationsystem.utils.documentation; +package org.gcube.informationsystem.utils.documentation.generator; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/TypeListGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/TypeListGenerator.java similarity index 96% rename from src/main/java/org/gcube/informationsystem/utils/documentation/TypeListGenerator.java rename to src/main/java/org/gcube/informationsystem/utils/documentation/generator/TypeListGenerator.java index f92b16e..5fc6c61 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/TypeListGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/generator/TypeListGenerator.java @@ -1,4 +1,4 @@ -package org.gcube.informationsystem.utils.documentation; +package org.gcube.informationsystem.utils.documentation.generator; import java.io.File; import java.io.IOException; @@ -48,12 +48,15 @@ public class TypeListGenerator { protected List isRelatedToTypes; protected List consistsOfTypes; + protected int offsetLevel; + public TypeListGenerator() { this.propertyTypes = new ArrayList<>(); this.resourceTypes = new ArrayList<>(); this.facetTypes = new ArrayList<>(); this.isRelatedToTypes = new ArrayList<>(); this.consistsOfTypes = new ArrayList<>(); + this.offsetLevel = 2; } public List getResourceTypes() { @@ -187,6 +190,7 @@ public class TypeListGenerator { for(Type type : types) { DocumentationGenerator dg = getDocumentationGeneratorInstance(clz, type); + dg.setOffsetLevel(offsetLevel); StringBuffer sb = dg.generateSection(); Files.write(f.toPath(), sb.toString().getBytes(), StandardOpenOption.APPEND); } @@ -203,6 +207,7 @@ public class TypeListGenerator { File f = getFile(ENTITIES_FILENAME, true); DocumentationGenerator edg = new EntityDocumentationGenerator(TypeMapper.createTypeDefinition(Entity.class)); + edg.setOffsetLevel(offsetLevel); StringBuffer sb = edg.generateSection(); Files.write(f.toPath(), sb.toString().getBytes(), StandardOpenOption.APPEND); @@ -211,6 +216,7 @@ public class TypeListGenerator { f = getFile(RELATIONS_FILENAME, true); DocumentationGenerator rdg = new RelationDocumentationGenerator(TypeMapper.createTypeDefinition(Relation.class)); + rdg.setOffsetLevel(offsetLevel); sb = rdg.generateSection(); Files.write(f.toPath(), sb.toString().getBytes(), StandardOpenOption.APPEND); diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/FacetKnowledge.java b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/FacetKnowledge.java deleted file mode 100644 index 343774d..0000000 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/FacetKnowledge.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.gcube.informationsystem.utils.documentation.knowledge; - -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -import org.gcube.informationsystem.types.reference.properties.LinkedEntity; - -public class FacetKnowledge { - - private static FacetKnowledge singleton; - - public static FacetKnowledge getInstace() { - if(FacetKnowledge.singleton==null) { - FacetKnowledge.singleton = new FacetKnowledge(); - } - return FacetKnowledge.singleton; - } - - protected Map> map; - - private FacetKnowledge(){ - this.map = new LinkedHashMap<>(); - } - - protected void add(String typeName, LinkedEntity linkedEntity) { - Set list = map.get(typeName); - if(list==null) { - list = new TreeSet<>(); - map.put(typeName, list); - } - list.add(linkedEntity); - } - - public void add(LinkedEntity linkedEntity) { - String source = linkedEntity.getSource(); - add(source, linkedEntity); - String relation = linkedEntity.getRelation(); - add(relation, linkedEntity); - String target = linkedEntity.getTarget(); - add(target, linkedEntity); - } - - public void addAll(Collection linkedEntities) { - for(LinkedEntity le : linkedEntities) { - add(le); - } - } - - public Set getUsage(String typeName){ - Set list = map.get(typeName); - return list; - } - -} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/ResourceKnowledge.java b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/ResourceKnowledge.java deleted file mode 100644 index dde0ad6..0000000 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/ResourceKnowledge.java +++ /dev/null @@ -1,57 +0,0 @@ -package org.gcube.informationsystem.utils.documentation.knowledge; - -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; - -import org.gcube.informationsystem.types.reference.properties.LinkedEntity; - -public class ResourceKnowledge { - - private static ResourceKnowledge singleton; - - public static ResourceKnowledge getInstace() { - if(ResourceKnowledge.singleton==null) { - ResourceKnowledge.singleton = new ResourceKnowledge(); - } - return ResourceKnowledge.singleton; - } - - protected Map> map; - - private ResourceKnowledge(){ - this.map = new LinkedHashMap<>(); - } - - protected void add(String typeName, LinkedEntity linkedEntity) { - Set list = map.get(typeName); - if(list==null) { - list = new TreeSet<>(); - map.put(typeName, list); - } - list.add(linkedEntity); - } - - public void add(LinkedEntity linkedEntity) { - String source = linkedEntity.getSource(); - add(source, linkedEntity); - String relation = linkedEntity.getRelation(); - add(relation, linkedEntity); - String target = linkedEntity.getTarget(); - add(target, linkedEntity); - } - - public void addAll(List linkedEntities) { - for(LinkedEntity le : linkedEntities) { - add(le); - } - } - - public Set getUsage(String typeName){ - Set list = map.get(typeName); - return list; - } - -} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/Tree.java b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/Tree.java new file mode 100644 index 0000000..15d6822 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/Tree.java @@ -0,0 +1,109 @@ +package org.gcube.informationsystem.utils.documentation.knowledge; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + +/** + * @author ycoppel@google.com (Yohann Coppel) + * + * @param Object's type in the tree. + */ +public class Tree { + + private T head; + private List> leafs; + private Tree parent = null; + + private HashMap> locate = new HashMap>(); + + public Tree(T head) { + this.head = head; + this.leafs = new ArrayList>(); + locate.put(head, this); + } + + public void addLeaf(T parent, T leaf) { + if (locate.containsKey(parent)) { + locate.get(parent).addLeaf(leaf); + } else { + addLeaf(parent).addLeaf(leaf); + } + } + + public Tree addLeaf(T leaf) { + Tree t = new Tree(leaf); + leafs.add(t); + t.parent = this; + t.locate = this.locate; + locate.put(leaf, t); + return t; + } + + public Tree setAsParent(T parentRoot) { + Tree t = new Tree(parentRoot); + t.leafs.add(this); + this.parent = t; + t.locate = this.locate; + t.locate.put(head, this); + t.locate.put(parentRoot, t); + return t; + } + + public T getHead() { + return head; + } + + public Tree getTree(T element) { + return locate.get(element); + } + + public Tree getParent() { + return parent; + } + + public Collection getSuccessors(T root) { + Collection successors = new ArrayList(); + Tree tree = getTree(root); + if (null != tree) { + for (Tree leaf : tree.leafs) { + successors.add(leaf.head); + } + } + return successors; + } + + public Collection> getSubTrees() { + return leafs; + } + + public static Collection getSuccessors(T of, Collection> in) { + for (Tree tree : in) { + if (tree.locate.containsKey(of)) { + return tree.getSuccessors(of); + } + } + return new ArrayList(); + } + + @Override + public String toString() { + return printTree(0); + } + + private static final int indent = 2; + + private String printTree(int increment) { + String s = ""; + String inc = ""; + for (int i = 0; i < increment; ++i) { + inc = inc + " "; + } + s = inc + head; + for (Tree child : leafs) { + s += "\n" + child.printTree(increment + indent); + } + return s; + } +} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/TypesKnowledge.java b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/TypesKnowledge.java new file mode 100644 index 0000000..9ecc33b --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/TypesKnowledge.java @@ -0,0 +1,45 @@ +package org.gcube.informationsystem.utils.documentation.knowledge; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.gcube.informationsystem.types.reference.Type; + +public class TypesKnowledge { + + protected Map typeByName; + protected Map> typesByLevels; + protected Map levelOfTypes; + protected Map> children; + + public TypesKnowledge() { + this.typeByName = new HashMap<>(); + this.typesByLevels = new HashMap<>(); + this.levelOfTypes = new HashMap<>(); + this.children = new HashMap<>(); + } + + public void addType(T type) { + typeByName.put(type.getName(), type); + Set superClasses = type.getSuperClasses(); + for(String superClass : superClasses) { + + } + } + + public Set getTypesByLevel(int level) { + return typesByLevels.get(level); + } + + public int getTypeLevel(Type type) { + return getTypeLevel(type.getName()); + } + + public int getTypeLevel(String typeName) { + return levelOfTypes.get(typeName); + } + + +} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/UsageKnowledge.java b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/UsageKnowledge.java new file mode 100644 index 0000000..0ef1806 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/UsageKnowledge.java @@ -0,0 +1,73 @@ +package org.gcube.informationsystem.utils.documentation.knowledge; + +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.TreeSet; + +import org.gcube.informationsystem.types.reference.properties.LinkedEntity; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class UsageKnowledge { + + private static UsageKnowledge facetKnowledge; + private static UsageKnowledge resourceKnowledge; + + public static UsageKnowledge getFacetKnowledge() { + if(UsageKnowledge.facetKnowledge==null) { + UsageKnowledge.facetKnowledge = new UsageKnowledge(); + } + return UsageKnowledge.facetKnowledge; + } + + public static UsageKnowledge getResourceKnowledge() { + if(UsageKnowledge.resourceKnowledge==null) { + UsageKnowledge.resourceKnowledge = new UsageKnowledge(); + } + return UsageKnowledge.resourceKnowledge; + } + + + protected Map> map; + + private UsageKnowledge(){ + this.map = new LinkedHashMap<>(); + } + + protected void add(String typeName, LinkedEntity linkedEntity) { + Set list = map.get(typeName); + if(list==null) { + list = new TreeSet<>(); + map.put(typeName, list); + } + list.add(linkedEntity); + } + + public void add(LinkedEntity linkedEntity) { + if(linkedEntity!=null) { + String source = linkedEntity.getSource(); + add(source, linkedEntity); + String relation = linkedEntity.getRelation(); + add(relation, linkedEntity); + String target = linkedEntity.getTarget(); + add(target, linkedEntity); + } + } + + public void addAll(Collection linkedEntities) { + if(linkedEntities!=null) { + for(LinkedEntity le : linkedEntities) { + add(le); + } + } + } + + public Set getUsage(String typeName){ + Set list = map.get(typeName); + return list; + } + +} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/DocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/DocumentationGenerator.java index 2cdb0da..1c2d415 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/DocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/DocumentationGenerator.java @@ -29,32 +29,30 @@ public abstract class DocumentationGenerator { protected final Type type; protected final AccessType requiredType; - protected final String superClassToBeExcluded; - protected final int requiredNumberOfColumns; + protected String superClassToBeExcluded; + protected int requiredNumberOfColumns; + protected int offsetLevel; + protected int level; protected DocumentationGenerator(Type type, AccessType requiredType) { - this(type, requiredType, DEFAULT_NUMBER_OF_COLUMNS, null); - } - - protected DocumentationGenerator(Type type, AccessType requiredType, int requiredNumberOfColumns) { - this(type, requiredType, requiredNumberOfColumns, null); - } - - protected DocumentationGenerator(Type type, AccessType requiredType, String superClassToBeExcluded) { - this(type, requiredType, DEFAULT_NUMBER_OF_COLUMNS, superClassToBeExcluded); - } - - protected DocumentationGenerator(Type type, AccessType requiredType, int requiredNumberOfColumns, String superClassToBeExcluded) { this.type = type; this.requiredType = requiredType; AccessType accessType = type.getAccessType(); if(accessType!=requiredType) { throw new RuntimeException(type.getName() + " is not a " + requiredType.getName() + " type"); } - this.requiredNumberOfColumns = requiredNumberOfColumns; - this.superClassToBeExcluded = superClassToBeExcluded; + this.requiredNumberOfColumns = DEFAULT_NUMBER_OF_COLUMNS; + this.superClassToBeExcluded = null; + this.offsetLevel = 0; } + public void setLevel(int level) { + this.level = level; + } + + public void setOffsetLevel(int offsetLevel) { + this.offsetLevel = offsetLevel; + } protected Row getPropertyFieldsBoldRow() { Row row = new Row(RowType.NORMAL); Cell name = new Cell(); @@ -273,6 +271,11 @@ public abstract class DocumentationGenerator { return addCellSpanToRow(row, content, cellSpan); } + protected Row getHeadingRowCellSpan(String content, int cellSpan) { + Row row = new Row(RowType.HEADING); + return addCellSpanToRow(row, content, cellSpan); + } + protected Table addPropertyRows(Table table, Set properties) { table.appendRow(getPropertyFieldsBoldRow()); if(properties!=null && properties.size()>0) { @@ -358,7 +361,8 @@ public abstract class DocumentationGenerator { stringBuffer.append("\n"); String name = type.getName(); Section section = new Section(); - stringBuffer.append(section.generateSection(SectionType.HEADING_3, name)); + SectionType sectionType = SectionType.values()[level+offsetLevel]; + stringBuffer.append(section.generateSection(sectionType, name)); stringBuffer.append(type.getDescription()); stringBuffer.append("\n"); diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/EntityDocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/EntityDocumentationGenerator.java index e4a6a9d..db01f89 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/EntityDocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/entities/EntityDocumentationGenerator.java @@ -19,25 +19,16 @@ import org.gcube.informationsystem.utils.documentation.rst.table.Table; public class EntityDocumentationGenerator extends DocumentationGenerator { public EntityDocumentationGenerator(Type type) { - super(type, AccessType.ENTITY, 4, TypeMapper.getType(EntityElement.class)); + super(type, AccessType.ENTITY); + this.requiredNumberOfColumns = 4; + this.superClassToBeExcluded = TypeMapper.getType(EntityElement.class); + setLevel(0); } protected EntityDocumentationGenerator(Type type, AccessType requiredType) { super(type, requiredType); } - protected EntityDocumentationGenerator(Type type, AccessType requiredType, int requiredNumberOfColumns) { - super(type, requiredType, requiredNumberOfColumns); - } - - protected EntityDocumentationGenerator(Type type, AccessType requiredType, String superClassToBeExcluded) { - super(type, requiredType, superClassToBeExcluded); - } - - protected EntityDocumentationGenerator(Type type, AccessType requiredType, int requiredNumberOfColumns, String superClassToBeExcluded) { - super(type, requiredType, requiredNumberOfColumns, superClassToBeExcluded); - } - protected Row getEntityHeadingRow() { Row row = new Row(RowType.HEADING); row = addCellSpanToRow(row, "Properties", requiredNumberOfColumns); 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 d551103..d469340 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 @@ -6,7 +6,7 @@ import org.gcube.informationsystem.base.reference.AccessType; 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.knowledge.FacetKnowledge; +import org.gcube.informationsystem.utils.documentation.knowledge.UsageKnowledge; import org.gcube.informationsystem.utils.documentation.rst.table.Table; /** @@ -16,6 +16,11 @@ public class FacetDocumentationGenerator extends EntityDocumentationGenerator { public FacetDocumentationGenerator(Type type) { super(type, AccessType.FACET); + int level = 1; + if(type.getName().compareTo(requiredType.getName())!=0) { + ++level; + } + setLevel(level); } @Override @@ -28,7 +33,7 @@ public class FacetDocumentationGenerator extends EntityDocumentationGenerator { table.appendRow(getKnownUsageBoldRow()); table.appendRow(getSourceTargetBoldRow()); - FacetKnowledge fk = FacetKnowledge.getInstace(); + UsageKnowledge fk = UsageKnowledge.getFacetKnowledge(); Set usage = fk.getUsage(type.getName()); addLinkedEntities(table, usage); 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 089cb4d..c53cfa8 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 @@ -6,8 +6,7 @@ import org.gcube.informationsystem.base.reference.AccessType; 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.knowledge.FacetKnowledge; -import org.gcube.informationsystem.utils.documentation.knowledge.ResourceKnowledge; +import org.gcube.informationsystem.utils.documentation.knowledge.UsageKnowledge; import org.gcube.informationsystem.utils.documentation.rst.table.Table; /** @@ -17,10 +16,15 @@ public class ResourceDocumentationGenerator extends EntityDocumentationGenerator public ResourceDocumentationGenerator(Type type) { super(type,AccessType.RESOURCE); + int level = 1; + if(type.getName().compareTo(requiredType.getName())!=0) { + ++level; + } + setLevel(level); ResourceType rt = (ResourceType) type; - FacetKnowledge fk = FacetKnowledge.getInstace(); + UsageKnowledge fk = UsageKnowledge.getFacetKnowledge(); fk.addAll(rt.getFacets()); - ResourceKnowledge rk = ResourceKnowledge.getInstace(); + UsageKnowledge rk = UsageKnowledge.getResourceKnowledge(); rk.addAll(rt.getResources()); } @@ -30,11 +34,11 @@ public class ResourceDocumentationGenerator extends EntityDocumentationGenerator table.appendRow(getSourceTargetHeadingRow()); table.appendRow(getRowCellSpan("**Facets**", requiredNumberOfColumns)); ResourceType resourceType = (ResourceType) type; - FacetKnowledge fk = FacetKnowledge.getInstace(); + UsageKnowledge fk = UsageKnowledge.getFacetKnowledge(); Set facets = fk.getUsage(resourceType.getName()); addLinkedEntities(table, facets); table.appendRow(getRowCellSpan("**Relations**", requiredNumberOfColumns)); - ResourceKnowledge rk = ResourceKnowledge.getInstace(); + UsageKnowledge rk = UsageKnowledge.getResourceKnowledge(); Set resources = rk.getUsage(resourceType.getName()); addLinkedEntities(table, resources); return table; diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/properties/PropertyDocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/properties/PropertyDocumentationGenerator.java index f021bdb..42c56a9 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/properties/PropertyDocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/properties/PropertyDocumentationGenerator.java @@ -17,7 +17,14 @@ import org.gcube.informationsystem.utils.documentation.rst.table.Table; public class PropertyDocumentationGenerator extends DocumentationGenerator { public PropertyDocumentationGenerator(Type type) { - super(type, AccessType.PROPERTY, 4, TypeMapper.getType(PropertyElement.class)); + super(type, AccessType.PROPERTY); + this.requiredNumberOfColumns = 4; + this.superClassToBeExcluded = TypeMapper.getType(PropertyElement.class); + int level = 0; + if(type.getName().compareTo(requiredType.getName())!=0) { + ++level; + } + setLevel(level); } @Override 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 54e5936..0bfd104 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 @@ -5,7 +5,7 @@ import java.util.Set; import org.gcube.informationsystem.base.reference.AccessType; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.properties.LinkedEntity; -import org.gcube.informationsystem.utils.documentation.knowledge.FacetKnowledge; +import org.gcube.informationsystem.utils.documentation.knowledge.UsageKnowledge; import org.gcube.informationsystem.utils.documentation.rst.table.Table; /** @@ -15,6 +15,11 @@ public class ConsistsOfDocumentationGenerator extends RelationDocumentationGener public ConsistsOfDocumentationGenerator(Type type) { super(type, AccessType.CONSISTS_OF); + int level = 1; + if(type.getName().compareTo(requiredType.getName())!=0) { + ++level; + } + setLevel(level); } @Override @@ -22,7 +27,8 @@ public class ConsistsOfDocumentationGenerator extends RelationDocumentationGener Table table = super.getTable(); table.appendRow(getKnownUsageBoldRow()); - FacetKnowledge fk = FacetKnowledge.getInstace(); + table.appendRow(getSourceTargetBoldRow()); + UsageKnowledge fk = UsageKnowledge.getFacetKnowledge(); Set facets = fk.getUsage(type.getName()); addLinkedEntities(table, facets); 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 6a5abd4..acef10f 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 @@ -5,7 +5,7 @@ import java.util.Set; import org.gcube.informationsystem.base.reference.AccessType; import org.gcube.informationsystem.types.reference.Type; import org.gcube.informationsystem.types.reference.properties.LinkedEntity; -import org.gcube.informationsystem.utils.documentation.knowledge.ResourceKnowledge; +import org.gcube.informationsystem.utils.documentation.knowledge.UsageKnowledge; import org.gcube.informationsystem.utils.documentation.rst.table.Table; /** @@ -15,6 +15,11 @@ public class IsRelatedToDocumentationGenerator extends RelationDocumentationGene public IsRelatedToDocumentationGenerator(Type type) { super(type, AccessType.IS_RELATED_TO); + int level = 1; + if(type.getName().compareTo(requiredType.getName())!=0) { + ++level; + } + setLevel(level); } @Override @@ -22,7 +27,8 @@ public class IsRelatedToDocumentationGenerator extends RelationDocumentationGene Table table = super.getTable(); table.appendRow(getKnownUsageBoldRow()); - ResourceKnowledge rk = ResourceKnowledge.getInstace(); + table.appendRow(getSourceTargetBoldRow()); + UsageKnowledge rk = UsageKnowledge.getResourceKnowledge(); Set resources = rk.getUsage(type.getName()); addLinkedEntities(table, resources); diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/RelationDocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/RelationDocumentationGenerator.java index 4932be7..931cb32 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/RelationDocumentationGenerator.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/model/relations/RelationDocumentationGenerator.java @@ -21,16 +21,14 @@ import org.gcube.informationsystem.utils.documentation.rst.table.Table; public class RelationDocumentationGenerator extends DocumentationGenerator { public RelationDocumentationGenerator(Type type) { - super(type, AccessType.RELATION, TypeMapper.getType(RelationElement.class)); + super(type, AccessType.RELATION); + this.superClassToBeExcluded = TypeMapper.getType(RelationElement.class); + setLevel(0); } protected RelationDocumentationGenerator(Type type, AccessType requiredType) { super(type, requiredType); } - - protected RelationDocumentationGenerator(Type type, AccessType requiredType, String superClassToBeExcluded) { - super(type, requiredType, superClassToBeExcluded); - } protected Row getTypeDefinitionRow(RelationType relationType) { Row row = new Row(RowType.NORMAL); @@ -64,13 +62,14 @@ public class RelationDocumentationGenerator extends DocumentationGenerator { @Override protected Table getTable() { Table table = new Table(); - table.appendRow(getSourceTargetHeadingRow()); + table.appendRow(getHeadingRowCellSpan("**Definition**", requiredNumberOfColumns)); - table.appendRow(getRowCellSpan("**Definition**", requiredNumberOfColumns)); + table.appendRow(getSourceTargetBoldRow()); @SuppressWarnings("unchecked") RelationType relationType = (RelationType) type; table.appendRow(getTypeDefinitionRow(relationType)); + table.appendRow(getRowCellSpan("**Properties**", requiredNumberOfColumns)); Set properties = type.getProperties(); table = addPropertyRows(table, properties); diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/rst/Section.java b/src/main/java/org/gcube/informationsystem/utils/documentation/rst/Section.java index 3adf5bd..af489a6 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/rst/Section.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/rst/Section.java @@ -6,16 +6,18 @@ package org.gcube.informationsystem.utils.documentation.rst; public class Section { public enum SectionType { - HEADING_1(true, "*"), - HEADING_2(false, "="), - HEADING_3(false, "-"), - HEADING_4(false, "^"); + HEADING_1(true, "#"), + HEADING_2(true, "*"), + HEADING_3(false, "="), + HEADING_4(false, "-"), + HEADING_5(false, "^"), + HEADING_6(false, "\""); - boolean both; + boolean overline; String separator; - private SectionType(boolean both, String separator) { - this.both = both; + private SectionType(boolean overline, String separator) { + this.overline = overline; this.separator = separator; } } @@ -31,7 +33,7 @@ public class Section { public StringBuffer generateSection(SectionType sectionType, String sectionTitle) { StringBuffer stringBuffer = new StringBuffer(); int lenght = sectionTitle.length(); - if(sectionType.both) { + if(sectionType.overline) { stringBuffer.append(getSectionSeparation(sectionType.separator, lenght)); stringBuffer.append("\n"); } 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 5c7be06..ebe3574 100644 --- a/src/test/java/org/gcube/informationsystem/utils/documentation/GenerateTest.java +++ b/src/test/java/org/gcube/informationsystem/utils/documentation/GenerateTest.java @@ -1,5 +1,6 @@ package org.gcube.informationsystem.utils.documentation; +import org.gcube.informationsystem.utils.documentation.generator.ClassesDiscoveryGenerator; import org.junit.Test; /**