package org.gcube.informationsystem.utils.documentation; import java.lang.reflect.Constructor; import org.gcube.informationsystem.base.reference.AccessType; import org.gcube.informationsystem.utils.documentation.model.DocumentationGenerator; import org.gcube.informationsystem.utils.documentation.model.entities.EntityDocumentationGenerator; import org.gcube.informationsystem.utils.documentation.model.entities.FacetDocumentationGenerator; import org.gcube.informationsystem.utils.documentation.model.entities.ResourceDocumentationGenerator; import org.gcube.informationsystem.utils.documentation.model.properties.PropertyDocumentationGenerator; import org.gcube.informationsystem.utils.documentation.model.relations.ConsistsOfDocumentationGenerator; import org.gcube.informationsystem.utils.documentation.model.relations.IsRelatedToDocumentationGenerator; import org.gcube.informationsystem.utils.documentation.model.relations.RelationDocumentationGenerator; /** * @author Luca Frosini (ISTI - CNR) */ public enum ClassesMapping { PROPERTY(AccessType.PROPERTY, PropertyDocumentationGenerator.class, true, ClassesMapping.PROPERTIES_FILENAME, true), ENTITY(AccessType.ENTITY, EntityDocumentationGenerator.class, false, ClassesMapping.ENTITIES_FILENAME, true), RESOURCE(AccessType.RESOURCE, ResourceDocumentationGenerator.class, true, ClassesMapping.ENTITIES_FILENAME, false), FACET(AccessType.FACET, FacetDocumentationGenerator.class, true, ClassesMapping.ENTITIES_FILENAME, false), RELATION(AccessType.RELATION, RelationDocumentationGenerator.class, false, ClassesMapping.RELATIONS_FILENAME, true), IS_RELATED_TO(AccessType.IS_RELATED_TO, IsRelatedToDocumentationGenerator.class, true, ClassesMapping.RELATIONS_FILENAME, false), CONSISTS_OF(AccessType.CONSISTS_OF, ConsistsOfDocumentationGenerator.class, true, ClassesMapping.RELATIONS_FILENAME, false); public static final String PROPERTIES_FILENAME = "properties.rst"; public static final String ENTITIES_FILENAME = "entities.rst"; public static final String RELATIONS_FILENAME = "relations.rst"; private final AccessType accessType; private final Class dgClz; private final boolean discover; private final String filename; private final boolean newFile; ClassesMapping(AccessType accessType, Class dgClz, boolean discover, String filename, boolean newFile) { this.accessType = accessType; this.dgClz = dgClz; this.discover = discover; this.filename = filename; this.newFile = newFile; } public AccessType getAccessType() { return accessType; } public Class getDocumentationGeneratorClz() { return dgClz; } public DocumentationGenerator getDocumentationGeneratorInstance(Class clz) throws Exception { Constructor constructor = dgClz.getConstructor(clz.getClass()); return constructor.newInstance(clz); } public boolean discover() { return discover; } public String getFilename() { return filename; } public boolean requiresNewFile() { return newFile; } }