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 new file mode 100644 index 0000000..343774d --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/FacetKnowledge.java @@ -0,0 +1,57 @@ +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/Knowledge.java b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/ResourceKnowledge.java similarity index 60% rename from src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/Knowledge.java rename to src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/ResourceKnowledge.java index 8a8934c..dde0ad6 100644 --- a/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/Knowledge.java +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/knowledge/ResourceKnowledge.java @@ -1,33 +1,34 @@ package org.gcube.informationsystem.utils.documentation.knowledge; -import java.util.ArrayList; 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 Knowledge { +public class ResourceKnowledge { - private static Knowledge singleton; + private static ResourceKnowledge singleton; - public static Knowledge getInstace() { - if(Knowledge.singleton==null) { - Knowledge.singleton = new Knowledge(); + public static ResourceKnowledge getInstace() { + if(ResourceKnowledge.singleton==null) { + ResourceKnowledge.singleton = new ResourceKnowledge(); } - return Knowledge.singleton; + return ResourceKnowledge.singleton; } - protected Map> map; + protected Map> map; - private Knowledge(){ + private ResourceKnowledge(){ this.map = new LinkedHashMap<>(); } protected void add(String typeName, LinkedEntity linkedEntity) { - List list = map.get(typeName); + Set list = map.get(typeName); if(list==null) { - list = new ArrayList<>(); + list = new TreeSet<>(); map.put(typeName, list); } list.add(linkedEntity); @@ -48,8 +49,8 @@ public class Knowledge { } } - public List getUsage(String typeName){ - List list = map.get(typeName); + 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 7c7453c..2cdb0da 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 @@ -1,6 +1,7 @@ package org.gcube.informationsystem.utils.documentation.model; -import java.util.List; +import java.util.Collection; +import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -153,40 +154,45 @@ public abstract class DocumentationGenerator { return row; } - protected Table addLinkedEntities(Table table, List entities) { + protected Row getLinkedEntityrow(LinkedEntity linkedEntity) { + Row row = new Row(RowType.NORMAL); + Cell source = new Cell(); + source.setText(linkedEntity.getSource()); + row.appendCell(source); + + Cell relation = new Cell(); + relation.setText(linkedEntity.getRelation()); + row.appendCell(relation); + + Cell multiplicity = new Cell(); + StringBuffer buffer = new StringBuffer(); + Integer min = linkedEntity.getMin(); + buffer.append(min==null? "0" : min.toString()); + buffer.append(".."); + Integer max = linkedEntity.getMax(); + buffer.append(max==null? "n" : max.toString()); + multiplicity.setText(buffer.toString()); + row.appendCell(multiplicity); + + Cell target = new Cell(); + target.setText(linkedEntity.getTarget()); + row.appendCell(target); + + Cell description = new Cell(); + description.setText(linkedEntity.getDescription()); + row.appendCell(description); + + for(int i=row.getCells().size(); i entities) { if(entities!=null) { for(LinkedEntity entity : entities) { - Row row = new Row(RowType.NORMAL); - Cell source = new Cell(); - source.setText(entity.getSource()); - row.appendCell(source); - - Cell relation = new Cell(); - relation.setText(entity.getRelation()); - row.appendCell(relation); - - Cell multiplicity = new Cell(); - StringBuffer buffer = new StringBuffer(); - Integer min = entity.getMin(); - buffer.append(min==null? "0" : min.toString()); - buffer.append(".."); - Integer max = entity.getMax(); - buffer.append(max==null? "n" : max.toString()); - multiplicity.setText(buffer.toString()); - row.appendCell(multiplicity); - - Cell target = new Cell(); - target.setText(entity.getTarget()); - row.appendCell(target); - - Cell description = new Cell(); - description.setText(entity.getDescription()); - row.appendCell(description); - - for(int i=row.getCells().size(); i properties) { + table.appendRow(getPropertyFieldsBoldRow()); + if(properties!=null && properties.size()>0) { + Set notMandatoryProperties = new HashSet<>(); + for(PropertyDefinition propertyDefinition : properties) { + if(propertyDefinition.isMandatory()) { + /* + * Adding Mandatory properties first in the table + */ + table.appendRow(getPropertyRow(propertyDefinition)); + }else { + notMandatoryProperties.add(propertyDefinition); + } + } + for(PropertyDefinition propertyDefinition : notMandatoryProperties) { + table.appendRow(getPropertyRow(propertyDefinition)); + } + }else { + table.appendRow(getNoPropertyRow()); + } + return table; + } + /* * E.g. GCubeProperty extends Property */ 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 d851602..d551103 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 @@ -1,14 +1,12 @@ package org.gcube.informationsystem.utils.documentation.model.entities; -import java.util.HashSet; -import java.util.List; 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.types.reference.properties.PropertyDefinition; -import org.gcube.informationsystem.utils.documentation.knowledge.Knowledge; +import org.gcube.informationsystem.utils.documentation.knowledge.FacetKnowledge; import org.gcube.informationsystem.utils.documentation.rst.table.Table; /** @@ -24,32 +22,14 @@ public class FacetDocumentationGenerator extends EntityDocumentationGenerator { protected Table getTable() { Table table = new Table(); table.appendRow(getEntityHeadingRow()); - table.appendRow(getPropertyFieldsBoldRow()); Set properties = type.getProperties(); - if(properties!=null && properties.size()>0) { - Set notMandatoryProperties = new HashSet<>(); - for(PropertyDefinition propertyDefinition : properties) { - if(propertyDefinition.isMandatory()) { - /* - * Adding Mandatory properties first in the table - */ - table.appendRow(getPropertyRow(propertyDefinition)); - }else { - notMandatoryProperties.add(propertyDefinition); - } - } - for(PropertyDefinition propertyDefinition : notMandatoryProperties) { - table.appendRow(getPropertyRow(propertyDefinition)); - } - }else { - table.appendRow(getNoPropertyRow()); - } + table = addPropertyRows(table, properties); table.appendRow(getKnownUsageBoldRow()); table.appendRow(getSourceTargetBoldRow()); - Knowledge k = Knowledge.getInstace(); - List usage = k.getUsage(type.getName()); + FacetKnowledge fk = FacetKnowledge.getInstace(); + Set usage = fk.getUsage(type.getName()); addLinkedEntities(table, usage); return table; 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 894248f..089cb4d 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 @@ -1,9 +1,13 @@ package org.gcube.informationsystem.utils.documentation.model.entities; +import java.util.Set; + 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.utils.documentation.knowledge.Knowledge; +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.rst.table.Table; /** @@ -14,9 +18,10 @@ public class ResourceDocumentationGenerator extends EntityDocumentationGenerator public ResourceDocumentationGenerator(Type type) { super(type,AccessType.RESOURCE); ResourceType rt = (ResourceType) type; - Knowledge k = Knowledge.getInstace(); - k.addAll(rt.getFacets()); - k.addAll(rt.getResources()); + FacetKnowledge fk = FacetKnowledge.getInstace(); + fk.addAll(rt.getFacets()); + ResourceKnowledge rk = ResourceKnowledge.getInstace(); + rk.addAll(rt.getResources()); } @Override @@ -25,9 +30,13 @@ public class ResourceDocumentationGenerator extends EntityDocumentationGenerator table.appendRow(getSourceTargetHeadingRow()); table.appendRow(getRowCellSpan("**Facets**", requiredNumberOfColumns)); ResourceType resourceType = (ResourceType) type; - addLinkedEntities(table, resourceType.getFacets()); + FacetKnowledge fk = FacetKnowledge.getInstace(); + Set facets = fk.getUsage(resourceType.getName()); + addLinkedEntities(table, facets); table.appendRow(getRowCellSpan("**Relations**", requiredNumberOfColumns)); - addLinkedEntities(table, resourceType.getResources()); + ResourceKnowledge rk = ResourceKnowledge.getInstace(); + Set resources = rk.getUsage(resourceType.getName()); + addLinkedEntities(table, resources); return table; } 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 be1f5dd..54e5936 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 @@ -1,7 +1,11 @@ package org.gcube.informationsystem.utils.documentation.model.relations; +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.rst.table.Table; /** @@ -15,8 +19,13 @@ public class ConsistsOfDocumentationGenerator extends RelationDocumentationGener @Override protected Table getTable() { - Table table = new Table(); - table.appendRow(getPropertyFieldsHeadingRow()); + Table table = super.getTable(); + + table.appendRow(getKnownUsageBoldRow()); + FacetKnowledge fk = FacetKnowledge.getInstace(); + Set facets = fk.getUsage(type.getName()); + addLinkedEntities(table, facets); + return table; } 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 c82f98f..6a5abd4 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 @@ -1,7 +1,11 @@ package org.gcube.informationsystem.utils.documentation.model.relations; +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.rst.table.Table; /** @@ -15,8 +19,13 @@ public class IsRelatedToDocumentationGenerator extends RelationDocumentationGene @Override protected Table getTable() { - Table table = new Table(); - table.appendRow(getPropertyFieldsHeadingRow()); + Table table = super.getTable(); + + table.appendRow(getKnownUsageBoldRow()); + ResourceKnowledge rk = ResourceKnowledge.getInstace(); + Set resources = rk.getUsage(type.getName()); + addLinkedEntities(table, resources); + return table; } 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 3c4987b..4932be7 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 @@ -1,10 +1,18 @@ package org.gcube.informationsystem.utils.documentation.model.relations; +import java.util.Set; + import org.gcube.informationsystem.base.reference.AccessType; 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.types.reference.entities.EntityType; +import org.gcube.informationsystem.types.reference.properties.PropertyDefinition; +import org.gcube.informationsystem.types.reference.relations.RelationType; import org.gcube.informationsystem.utils.documentation.model.DocumentationGenerator; +import org.gcube.informationsystem.utils.documentation.rst.table.Cell; +import org.gcube.informationsystem.utils.documentation.rst.table.Row; +import org.gcube.informationsystem.utils.documentation.rst.table.RowType; import org.gcube.informationsystem.utils.documentation.rst.table.Table; /** @@ -24,10 +32,47 @@ public class RelationDocumentationGenerator extends DocumentationGenerator { super(type, requiredType, superClassToBeExcluded); } + protected Row getTypeDefinitionRow(RelationType relationType) { + Row row = new Row(RowType.NORMAL); + Cell source = new Cell(); + source.setText(relationType.getSource().getName()); + row.appendCell(source); + + Cell relation = new Cell(); + relation.setText(relationType.getName()); + row.appendCell(relation); + + Cell multiplicity = new Cell(); + multiplicity.setText("0..n"); + row.appendCell(multiplicity); + + Cell target = new Cell(); + target.setText(relationType.getTarget().getName()); + row.appendCell(target); + + Cell description = new Cell(); + description.setText(relationType.getDescription()); + row.appendCell(description); + + for(int i=row.getCells().size(); i relationType = (RelationType) type; + table.appendRow(getTypeDefinitionRow(relationType)); + + Set properties = type.getProperties(); + table = addPropertyRows(table, properties); return table; }