package org.gcube.informationsystem.utils.documentation.model; import java.util.Map; import java.util.Set; 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.documentation.rst.Section; import org.gcube.informationsystem.utils.documentation.rst.Section.SectionType; import org.gcube.informationsystem.utils.documentation.rst.table.Table; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Luca Frosini (ISTI - CNR) */ public abstract class DocumentationGenerator { private static final Logger logger = LoggerFactory.getLogger(DocumentationGenerator.class); protected final Class clz; protected final Type type; protected final String superClassToBeExcluded; protected DocumentationGenerator(Class clz, String superClassToBeExcluded) { this.clz = clz; this.type = TypeMapper.createTypeDefinition(clz); this.superClassToBeExcluded = superClassToBeExcluded; } /* * E.g. GCubeProperty extends Property */ protected StringBuffer getTypeDeclaration() { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("**"); stringBuffer.append(type.getName()); stringBuffer.append("**"); Set superClasses = type.getSuperClasses(); superClasses.remove(superClassToBeExcluded); if(superClasses.size()>0){ stringBuffer.append(" ``extends`` "); boolean first = true; for(String superClass : superClasses) { if(!first) { stringBuffer.append(", "); }else { first = false; } stringBuffer.append("**"); stringBuffer.append(superClass); stringBuffer.append("**"); } } return stringBuffer; } protected StringBuffer getChangelog() { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("The **"); stringBuffer.append(type.getName()); stringBuffer.append("** current version is "); stringBuffer.append(type.getVersionAsString()); stringBuffer.append(".\n\n"); Map changelog = type.getChangelogWithVersionAsString(); Set keySet = changelog.keySet(); stringBuffer.append("Changelog:\n\n"); int i=0; for(String version : keySet) { stringBuffer.append("* **"); stringBuffer.append(version); stringBuffer.append("**: "); stringBuffer.append(changelog.get(version)); if(i==keySet.size()-1) { stringBuffer.append("."); }else { stringBuffer.append(";"); } } stringBuffer.append("\n\n"); return stringBuffer; } protected abstract Table getTable(); public StringBuffer generateSection() { StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("\n"); String name = type.getName(); Section section = new Section(); stringBuffer.append(section.generateSection(SectionType.HEADING_3, name)); stringBuffer.append(type.getDescription()); stringBuffer.append("\n"); String tableTitle = getTypeDeclaration().toString(); Table table = getTable(); stringBuffer.append(table.generateTable(tableTitle)); stringBuffer.append(getChangelog()); logger.info(stringBuffer.toString()); return stringBuffer; } }