diff --git a/src/main/java/org/gcube/informationsystem/model/reference/ERElement.java b/src/main/java/org/gcube/informationsystem/model/reference/ERElement.java index abcdd96..7594a77 100644 --- a/src/main/java/org/gcube/informationsystem/model/reference/ERElement.java +++ b/src/main/java/org/gcube/informationsystem/model/reference/ERElement.java @@ -4,7 +4,7 @@ import org.gcube.informationsystem.base.reference.IdentifiableElement; /** * This interfaces is an helper to identify elements of the model - * i.e. REsource, Facet, IsRelatedTo, ConsistsOf + * i.e. Resource, Facet, IsRelatedTo, ConsistsOf * * @author Luca Frosini (ISTI - CNR) */ diff --git a/src/main/java/org/gcube/informationsystem/utils/discovery/Discovery.java b/src/main/java/org/gcube/informationsystem/utils/discovery/Discovery.java new file mode 100644 index 0000000..3f68f7a --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/discovery/Discovery.java @@ -0,0 +1,34 @@ +package org.gcube.informationsystem.utils.discovery; + +import java.util.ArrayList; +import java.util.List; +import java.util.ServiceLoader; + +import org.gcube.informationsystem.base.reference.AccessType; +import org.gcube.informationsystem.base.reference.Element; +import org.gcube.informationsystem.types.reference.Type; + +public class Discovery { + + public static void discover(SchemaAction schemaAction) 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()); + } + + ElementSpecilizationDiscovery.manageISM(schemaAction , packages); + } + +} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/DocumentationGenerator.java b/src/main/java/org/gcube/informationsystem/utils/documentation/DocumentationGenerator.java new file mode 100644 index 0000000..74d0db4 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/DocumentationGenerator.java @@ -0,0 +1,53 @@ +package org.gcube.informationsystem.utils.documentation; + +import java.io.File; +import java.util.Map; +import java.util.Set; + +import org.gcube.informationsystem.types.reference.Type; +import org.gcube.informationsystem.utils.discovery.Discovery; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class DocumentationGenerator { + + protected File baseDirectory; + + public DocumentationGenerator(File baseDirectory) { + this.baseDirectory = baseDirectory; + } + + public void generatePropertySection(Type type) { + + + } + + public void generate() throws Exception { + + DocumentationSchemaAction schemaAction = new DocumentationSchemaAction(); + Discovery.discover(schemaAction); + + Map propertyElements = schemaAction.getPropertyElement(); + Set propertyNames = propertyElements.keySet(); + for(String name : propertyNames) { + Type type = propertyElements.get(name); + + } + + Map relationElements = schemaAction.getRelationElements(); + Set relationNames = relationElements.keySet(); + for(String name : relationNames) { + Type type = propertyElements.get(name); + + } + + Map entityElements = schemaAction.getEntityElement(); + Set entityNames = entityElements.keySet(); + for(String name : entityNames) { + Type type = propertyElements.get(name); + + } + + } +} diff --git a/src/main/java/org/gcube/informationsystem/utils/documentation/DocumentationSchemaAction.java b/src/main/java/org/gcube/informationsystem/utils/documentation/DocumentationSchemaAction.java new file mode 100644 index 0000000..8a947cd --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/DocumentationSchemaAction.java @@ -0,0 +1,94 @@ +package org.gcube.informationsystem.utils.documentation; + +import java.util.HashMap; +import java.util.Map; + +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.types.TypeMapper; +import org.gcube.informationsystem.types.reference.Type; +import org.gcube.informationsystem.utils.discovery.SchemaAction; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class DocumentationSchemaAction implements SchemaAction { + + private static final Logger logger = LoggerFactory.getLogger(DocumentationSchemaAction.class); + + protected Package packageToInclude; + + protected Map relationElements; + protected Map propertyElements; + protected Map entityElements; + + public DocumentationSchemaAction() { + this.relationElements = new HashMap<>(); + this.propertyElements = new HashMap<>(); + this.entityElements = new HashMap<>(); + } + + public DocumentationSchemaAction(Package pkg) { + this(); + this.packageToInclude = pkg; + } + + public Map getRelationElements() { + return relationElements; + } + + public Map getPropertyElement() { + return propertyElements; + } + + public Map getEntityElement() { + return entityElements; + } + + @Override + public > void manageRelationClass( + Class r) throws Exception { + if(r.isAssignableFrom(Type.class)) { + return; + } + if(packageToInclude!=null && !r.getPackage().getName().startsWith(packageToInclude.getName())) { + return; + } + Type type = TypeMapper.createTypeDefinition(r); + String name = type.getName(); + logger.debug("Found {} {}", RelationElement.NAME, name); + relationElements.put(name, type); + } + + @Override + public

void managePropertyClass(Class

p) throws Exception { + if(p.isAssignableFrom(Type.class)) { + return; + } + if(packageToInclude!=null && !p.getPackage().getName().startsWith(packageToInclude.getName())) { + return; + } + Type type = TypeMapper.createTypeDefinition(p); + String name = type.getName(); + logger.debug("Found {} {}", PropertyElement.NAME, name); + propertyElements.put(name, type); + } + + @Override + public void manageEntityClass(Class e) throws Exception { + if(e.isAssignableFrom(Type.class)) { + return; + } + if(packageToInclude!=null && !e.getPackage().getName().startsWith(packageToInclude.getName())) { + return; + } + Type type = TypeMapper.createTypeDefinition(e); + String name = type.getName(); + logger.debug("Found {} {}", EntityElement.NAME, name); + entityElements.put(name,type); + } + +} 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 new file mode 100644 index 0000000..3b77623 --- /dev/null +++ b/src/main/java/org/gcube/informationsystem/utils/documentation/rst/Section.java @@ -0,0 +1,42 @@ +package org.gcube.informationsystem.utils.documentation.rst; + +/** + * @author Luca Frosini (ISTI - CNR) + */ +public class Section { + + public enum SectionType { + HEADING_1(true, "*"), + HEADING_2(false, "="), + HEADING_3(false, "_"), + HEADING_4(false, "^"); + + boolean both; + String separator; + + private SectionType(boolean both, String separator) { + this.both = both; + this.separator = separator; + } + } + + protected StringBuffer getSectionSeparation(String separator, int lenght) { + StringBuffer stringBuffer = new StringBuffer(); + for(int i=0; i rows; private List maxSizePerCell; diff --git a/src/test/java/org/gcube/informationsystem/utils/discovery/documentation/table/TableTest.java b/src/test/java/org/gcube/informationsystem/utils/discovery/documentation/table/TableTest.java index dedeeab..6f6366b 100644 --- a/src/test/java/org/gcube/informationsystem/utils/discovery/documentation/table/TableTest.java +++ b/src/test/java/org/gcube/informationsystem/utils/discovery/documentation/table/TableTest.java @@ -1,9 +1,9 @@ package org.gcube.informationsystem.utils.discovery.documentation.table; -import org.gcube.informationsystem.utils.documentation.table.Cell; -import org.gcube.informationsystem.utils.documentation.table.Row; -import org.gcube.informationsystem.utils.documentation.table.RowType; -import org.gcube.informationsystem.utils.documentation.table.Table; +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; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory;