use of oms3.ComponentAccess in project hortonmachine by TheHortonMachine.
the class ModelsSupporter method generateHelp.
public static String generateHelp(Object parent) throws Exception {
Class<?> moduleClass = parent.getClass();
StringBuilder sb = new StringBuilder();
// try with module description
Description description = moduleClass.getAnnotation(Description.class);
String descriptionStr = description.value();
String NEWLINE = "\n";
if (description != null) {
sb.append("Description").append(NEWLINE);
sb.append("-----------").append(NEWLINE);
sb.append(NEWLINE);
sb.append(descriptionStr);
sb.append(NEWLINE);
sb.append(NEWLINE);
}
// general info
sb.append("General Information").append(NEWLINE);
sb.append("-------------------").append(NEWLINE);
sb.append(NEWLINE);
// general info: status
Status status = moduleClass.getAnnotation(Status.class);
if (status != null) {
sb.append("Module status: " + ModelsSupporter.getStatusString(status.value())).append(NEWLINE);
}
// general info: authors
Author author = moduleClass.getAnnotation(Author.class);
if (author != null) {
String authorNameStr = author.name();
String[] authorNameSplit = authorNameStr.split(",");
String authorContactStr = author.contact();
String[] authorContactSplit = authorContactStr.split(",");
sb.append("Authors").append(NEWLINE);
for (String authorName : authorNameSplit) {
sb.append("* ").append(authorName.trim()).append(NEWLINE);
}
sb.append(NEWLINE);
sb.append("Contacts: ").append(NEWLINE);
for (String authorContact : authorContactSplit) {
sb.append("* ").append(authorContact.trim()).append(NEWLINE);
}
sb.append(NEWLINE);
}
// general info: license
License license = moduleClass.getAnnotation(License.class);
if (license != null) {
String licenseStr = license.value();
sb.append("License: " + licenseStr).append(NEWLINE);
}
// general info: keywords
Keywords keywords = moduleClass.getAnnotation(Keywords.class);
if (keywords != null) {
String keywordsStr = keywords.value();
sb.append("Keywords: " + keywordsStr).append(NEWLINE);
}
sb.append(NEWLINE);
// gather input fields
Object annotatedObject = moduleClass.newInstance();
ComponentAccess cA = new ComponentAccess(annotatedObject);
// parameters
sb.append("Parameters").append(NEWLINE);
sb.append("----------").append(NEWLINE);
sb.append(NEWLINE);
// parameters: fields
Collection<Access> inputs = cA.inputs();
StringBuilder sbTmp = new StringBuilder();
ModelsSupporter.collectParameters(sbTmp, inputs, "\t");
String params = sbTmp.toString();
if (params.trim().length() > 0) {
sb.append("\tInput Parameters").append(NEWLINE);
sb.append("\t----------------").append(NEWLINE);
sb.append(params);
sb.append(NEWLINE);
}
Collection<Access> outputs = cA.outputs();
sbTmp = new StringBuilder();
ModelsSupporter.collectParameters(sbTmp, outputs, "\t");
params = sbTmp.toString();
if (params.trim().length() > 0) {
sb.append("\tOutput Parameters").append(NEWLINE);
sb.append("\t-----------------").append(NEWLINE);
sb.append(params);
sb.append(NEWLINE);
}
sb.append(NEWLINE);
return sb.toString();
}
use of oms3.ComponentAccess in project hortonmachine by TheHortonMachine.
the class SpatialToolboxUtils method collectParameters.
// /**
// * Get the path for a module doc html.
// *
// * @param moduleClassName the name of the module to get the path for.
// * @return the path to the html file.
// * @throws Exception
// */
// public static String getModuleDocumentationPath( String moduleClassName ) throws Exception {
// File configurationsFolder = SpatialToolboxSessionPluginSingleton.getInstance().getConfigurationsFolder();
// File htmlDocsFolder = new File(configurationsFolder, STAGEHTMLDOCS);
// File htmlDocs = new File(htmlDocsFolder, moduleClassName + ".html");
// if (!htmlDocs.exists()) {
// htmlDocs = new File(htmlDocsFolder, "Oms" + moduleClassName + ".html");
// if (!htmlDocs.exists()) {
// return NO_DOCUMENTATION_AVAILABLE;
// }
// }
// return htmlDocs.getAbsolutePath();
// }
// /**
// * Porge the html docs folder.
// *
// * @throws Exception
// */
// public static void cleanModuleDocumentation() throws Exception {
// File configurationsFolder = SpatialToolboxSessionPluginSingleton.getInstance().getConfigurationsFolder();
// File htmlDocsFolder = new File(configurationsFolder, STAGEHTMLDOCS);
// if (htmlDocsFolder.exists()) {
// FileUtilities.deleteFileOrDir(htmlDocsFolder);
// }
// }
//
// /**
// * Generate the module documentation in the configuration area.
// *
// * @param moduleClassName the class for which to generate the doc.
// * @throws Exception
// */
// @SuppressWarnings("nls")
// public static void generateModuleDocumentation( String moduleClassName ) throws Exception {
//
// Class< ? > moduleClass = StageModulesManager.getInstance().getModulesClass(moduleClassName);
//
// StringBuilder sb = new StringBuilder();
// sb.append("<html><body>\n");
//
// // modules documentation
// Documentation documentation = moduleClass.getAnnotation(Documentation.class);
// String documentationStr = null;
// if (documentation != null) {
// documentationStr = AnnotationUtilities.getLocalizedDocumentation(documentation);
// if (documentationStr.length() == 0) {
// documentationStr = null;
// } else if (documentationStr.equals(" - ")) {
// documentationStr = null;
// }
// }
// if (documentation != null && documentationStr != null) {
// if (documentationStr.endsWith(DOCSSUFFIX)) {
// // have to get the file
// String modulePackage = moduleClassName.substring(0, moduleClassName.lastIndexOf('.'));
// String path = modulePackage.replaceAll("\\.", "/") + "/" + documentationStr;
// InputStream inStream = StageModulesManager.getInstance().getResourceAsStream(path);
// // InputStream inStream = moduleClass.getResourceAsStream(documentationStr);
// if (inStream != null) {
// BufferedReader br = null;
// try {
// br = new BufferedReader(new InputStreamReader(inStream));
// StringBuilder tmpSb = new StringBuilder();
// String line = "";
// while( (line = br.readLine()) != null ) {
// tmpSb.append(line).append(NEWLINE);
// }
// documentationStr = tmpSb.toString();
// } finally {
// if (br != null)
// br.close();
// }
// }
// }
// sb.append("<h2>Description</h2>").append(NEWLINE);
// sb.append(NEWLINE);
// sb.append("<blockquote>");
// sb.append(documentationStr);
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// sb.append(NEWLINE);
// } else {
// // try with module description
// Description description = moduleClass.getAnnotation(Description.class);
// String descriptionStr = AnnotationUtilities.getLocalizedDescription(description);
// if (description != null) {
// sb.append("<h2>Description</h2>").append(NEWLINE);
// sb.append(NEWLINE);
// sb.append("<blockquote>");
// sb.append(descriptionStr);
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// sb.append(NEWLINE);
// }
// }
// // general info
// sb.append("<h2>General Information</h2>").append(NEWLINE);
// sb.append(NEWLINE);
// // general info: status
// Status status = moduleClass.getAnnotation(Status.class);
// if (status != null) {
// sb.append("<blockquote>");
// sb.append("Module status: " + getStatusString(status.value())).append(NEWLINE);
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// }
//
// // general info: script name
// Name name = moduleClass.getAnnotation(Name.class);
// String nameStr = AnnotationUtilities.getLocalizedName(name);
// if (name != null) {
// sb.append("<blockquote>");
// sb.append(" Name to use in a script: <b>" + nameStr + "</b>").append(NEWLINE);
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// }
// // general info: authors
// Author author = moduleClass.getAnnotation(Author.class);
// if (author != null) {
// String authorNameStr = author.name();
// String[] authorNameSplit = authorNameStr.split(",");
//
// String authorContactStr = author.contact();
// String[] authorContactSplit = authorContactStr.split(",");
//
// sb.append("<blockquote>");
// sb.append(" Authors ").append(NEWLINE);
// sb.append(HTMLNEWLINE);
// sb.append("<ul>").append(NEWLINE);
// for( String authorName : authorNameSplit ) {
// sb.append("<li>").append(authorName.trim());
// }
// sb.append("</li>").append(NEWLINE);
// sb.append("</ul>").append(NEWLINE);
// sb.append(NEWLINE);
// sb.append(HTMLNEWLINE);
// sb.append(HTMLNEWLINE);
// // if (authorContactStr.startsWith("http")) {
// // authorContactStr = "<a href=\"" + authorContactStr + "\">" + authorContactStr +
// // "</a>";
// // }
// sb.append(" Contacts: ").append(NEWLINE);
// sb.append(HTMLNEWLINE);
// sb.append("<ul>").append(NEWLINE);
// for( String authorContact : authorContactSplit ) {
// sb.append("<li>").append(authorContact.trim());
// }
// sb.append("</li>").append(NEWLINE);
// sb.append("</ul>").append(NEWLINE);
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// }
// // general info: license
// License license = moduleClass.getAnnotation(License.class);
// if (license != null) {
// String licenseStr = AnnotationUtilities.getLocalizedLicense(license);
// sb.append("<blockquote>");
// sb.append(" License: " + licenseStr).append(NEWLINE);
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// }
// // general info: keywords
// Keywords keywords = moduleClass.getAnnotation(Keywords.class);
// if (keywords != null) {
// String keywordsStr = AnnotationUtilities.getLocalizedKeywords(keywords);
// sb.append("<blockquote>");
// sb.append(" Keywords: " + keywordsStr).append(NEWLINE);
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// }
// sb.append(NEWLINE);
//
// // gather input fields
// Object annotatedObject = moduleClass.newInstance();
// ComponentAccess cA = new ComponentAccess(annotatedObject);
//
// // parameters
// sb.append("<h2>Parameters</h2>").append(NEWLINE);
// sb.append(NEWLINE);
// sb.append("<blockquote>");
// // parameters: fields
// Collection<Access> inputs = cA.inputs();
// StringBuilder sbTmp = new StringBuilder();
// collectParameters(sbTmp, inputs);
// toTable(sb, sbTmp, "Input parameters");
// sb.append(NEWLINE);
// Collection<Access> outputs = cA.outputs();
// sbTmp = new StringBuilder();
// collectParameters(sbTmp, outputs);
// toTable(sb, sbTmp, "Output parameters");
// sb.append("</blockquote>");
// sb.append(NEWLINE);
// sb.append(NEWLINE);
//
// sb.append("</body></html>");
//
// File configurationsFolder = SpatialToolboxSessionPluginSingleton.getInstance().getConfigurationsFolder();
// File htmlDocsFolder = new File(configurationsFolder, STAGEHTMLDOCS);
// if (!htmlDocsFolder.exists()) {
// if (!htmlDocsFolder.mkdir()) {
// throw new RuntimeException();
// }
// }
//
// File htmlDocs = new File(htmlDocsFolder, moduleClassName + ".html");
// FileUtilities.writeFile(sb.toString(), htmlDocs);
// }
private static void collectParameters(StringBuilder sbTmp, Collection<Access> accessList) throws Exception {
for (Access access : accessList) {
Field field = access.getField();
String fieldName = field.getName();
Description descriptionAnnot = field.getAnnotation(Description.class);
if (fieldName.equals("pm")) {
// ignore progress monitor
continue;
}
String fieldDescription = " - ";
if (descriptionAnnot != null) {
fieldDescription = AnnotationUtilities.getLocalizedDescription(descriptionAnnot);
if (fieldDescription == null) {
fieldDescription = " - ";
}
Unit unitAnn = field.getAnnotation(Unit.class);
if (unitAnn != null) {
fieldDescription = fieldDescription + " [" + unitAnn.value() + "]";
}
}
sbTmp.append("<tr>").append(NEWLINE);
sbTmp.append("<td width=\"40%\"> <b>").append(fieldName).append("</b> </td><td width=\"60%\"> ");
sbTmp.append(fieldDescription).append(" </td>").append(NEWLINE);
sbTmp.append("</tr>").append(NEWLINE);
}
}
use of oms3.ComponentAccess in project hortonmachine by TheHortonMachine.
the class HortonMachine method gatherInformations.
private void gatherInformations() {
try {
if (baseclassUrl == null) {
baseclassUrl = ClasspathUrlFinder.findClassBase(HortonMachine.class);
}
AnnotationDB db = new AnnotationDB();
db.scanArchives(baseclassUrl);
Map<String, Set<String>> annotationIndex = db.getAnnotationIndex();
Set<String> simpleClasses = annotationIndex.get(Execute.class.getName());
for (String className : simpleClasses) {
if (!className.startsWith("org.hortonmachine.hmachine")) {
continue;
}
int lastDot = className.lastIndexOf('.');
String name = className.substring(lastDot + 1);
Class<?> clazz = null;
try {
clazz = Class.forName(className);
moduleName2Class.put(name, clazz);
} catch (Throwable e) {
e.printStackTrace();
}
}
/*
* extract all classes and fields
*/
List<String> classNames = new ArrayList<String>();
List<String> fieldNamesList = new ArrayList<String>();
Set<Entry<String, Class<?>>> moduleName2ClassEntries = moduleName2Class.entrySet();
for (Entry<String, Class<?>> moduleName2ClassEntry : moduleName2ClassEntries) {
String moduleName = moduleName2ClassEntry.getKey();
Class<?> moduleClass = moduleName2ClassEntry.getValue();
Status annotation = moduleClass.getAnnotation(Status.class);
if (annotation == null) {
System.out.println("Missing status: " + moduleClass.getCanonicalName());
continue;
}
String statusString = null;
int status = annotation.value();
switch(status) {
case Status.CERTIFIED:
statusString = "CERTIFIED";
break;
case Status.DRAFT:
statusString = "DRAFT";
break;
case Status.TESTED:
statusString = "TESTED";
break;
default:
statusString = "UNKNOWN";
break;
}
classNames.add(moduleName);
List<ClassField> tmpfields = new ArrayList<ClassField>();
Object annotatedObject = moduleClass.newInstance();
ComponentAccess cA = new ComponentAccess(annotatedObject);
Collection<Access> inputs = cA.inputs();
for (Access access : inputs) {
Field field = access.getField();
String name = field.getName();
Description descriptionAnnot = field.getAnnotation(Description.class);
String description = name;
if (descriptionAnnot != null) {
description = descriptionAnnot.value();
if (description == null) {
description = name;
}
}
Class<?> fieldClass = field.getType();
ClassField cf = new ClassField();
cf.isIn = true;
cf.fieldName = name;
cf.fieldDescription = description;
cf.fieldClass = fieldClass;
cf.parentClass = moduleClass;
cf.parentClassStatus = statusString;
if (!fieldNamesList.contains(name)) {
fieldNamesList.add(name);
}
tmpfields.add(cf);
}
Collection<Access> outputs = cA.outputs();
for (Access access : outputs) {
Field field = access.getField();
String name = field.getName();
Description descriptionAnnot = field.getAnnotation(Description.class);
String description = name;
if (descriptionAnnot != null) {
description = descriptionAnnot.value();
if (description == null) {
description = name;
}
}
Class<?> fieldClass = field.getType();
ClassField cf = new ClassField();
cf.isOut = true;
cf.fieldName = name;
cf.fieldDescription = description;
cf.fieldClass = fieldClass;
cf.parentClass = moduleClass;
cf.parentClassStatus = statusString;
if (!fieldNamesList.contains(name)) {
fieldNamesList.add(name);
}
tmpfields.add(cf);
}
moduleName2Fields.put(moduleName, tmpfields);
}
Collections.sort(fieldNamesList);
allFields = (String[]) fieldNamesList.toArray(new String[fieldNamesList.size()]);
Collections.sort(classNames);
allClasses = (String[]) classNames.toArray(new String[classNames.size()]);
} catch (Exception e1) {
e1.printStackTrace();
}
}
use of oms3.ComponentAccess in project hortonmachine by TheHortonMachine.
the class Lesto method gatherInformations.
private void gatherInformations() {
try {
if (baseclassUrl == null) {
baseclassUrl = ClasspathUrlFinder.findClassBase(Lesto.class);
}
AnnotationDB db = new AnnotationDB();
db.scanArchives(baseclassUrl);
Map<String, Set<String>> annotationIndex = db.getAnnotationIndex();
Set<String> simpleClasses = annotationIndex.get(Execute.class.getName());
for (String className : simpleClasses) {
if (!className.startsWith("org.hortonmachine.lesto")) {
continue;
}
int lastDot = className.lastIndexOf('.');
String name = className.substring(lastDot + 1);
Class<?> clazz = null;
try {
clazz = Class.forName(className);
moduleName2Class.put(name, clazz);
} catch (Throwable e) {
e.printStackTrace();
}
}
/*
* extract all classes and fields
*/
List<String> classNames = new ArrayList<String>();
List<String> fieldNamesList = new ArrayList<String>();
Set<Entry<String, Class<?>>> moduleName2ClassEntries = moduleName2Class.entrySet();
for (Entry<String, Class<?>> moduleName2ClassEntry : moduleName2ClassEntries) {
String moduleName = moduleName2ClassEntry.getKey();
Class<?> moduleClass = moduleName2ClassEntry.getValue();
Status annotation = moduleClass.getAnnotation(Status.class);
if (annotation == null) {
System.out.println("Missing status: " + moduleClass.getCanonicalName());
continue;
}
String statusString = null;
int status = annotation.value();
switch(status) {
case Status.CERTIFIED:
statusString = "CERTIFIED";
break;
case Status.DRAFT:
statusString = "DRAFT";
break;
case Status.TESTED:
statusString = "TESTED";
break;
default:
statusString = "UNKNOWN";
break;
}
classNames.add(moduleName);
List<ClassField> tmpfields = new ArrayList<ClassField>();
Object annotatedObject = moduleClass.newInstance();
ComponentAccess cA = new ComponentAccess(annotatedObject);
Collection<Access> inputs = cA.inputs();
for (Access access : inputs) {
Field field = access.getField();
String name = field.getName();
Description descriptionAnnot = field.getAnnotation(Description.class);
String description = name;
if (descriptionAnnot != null) {
description = descriptionAnnot.value();
if (description == null) {
description = name;
}
}
Class<?> fieldClass = field.getType();
ClassField cf = new ClassField();
cf.isIn = true;
cf.fieldName = name;
cf.fieldDescription = description;
cf.fieldClass = fieldClass;
cf.parentClass = moduleClass;
cf.parentClassStatus = statusString;
if (!fieldNamesList.contains(name)) {
fieldNamesList.add(name);
}
tmpfields.add(cf);
}
Collection<Access> outputs = cA.outputs();
for (Access access : outputs) {
Field field = access.getField();
String name = field.getName();
Description descriptionAnnot = field.getAnnotation(Description.class);
String description = name;
if (descriptionAnnot != null) {
description = descriptionAnnot.value();
if (description == null) {
description = name;
}
}
Class<?> fieldClass = field.getType();
ClassField cf = new ClassField();
cf.isOut = true;
cf.fieldName = name;
cf.fieldDescription = description;
cf.fieldClass = fieldClass;
cf.parentClass = moduleClass;
cf.parentClassStatus = statusString;
if (!fieldNamesList.contains(name)) {
fieldNamesList.add(name);
}
tmpfields.add(cf);
}
moduleName2Fields.put(moduleName, tmpfields);
}
Collections.sort(fieldNamesList);
allFields = (String[]) fieldNamesList.toArray(new String[fieldNamesList.size()]);
Collections.sort(classNames);
allClasses = (String[]) classNames.toArray(new String[classNames.size()]);
} catch (Exception e1) {
e1.printStackTrace();
}
}
use of oms3.ComponentAccess in project hortonmachine by TheHortonMachine.
the class JGrassGears method gatherInformations.
private void gatherInformations() {
try {
if (baseclassUrl == null) {
baseclassUrl = ClasspathUrlFinder.findClassBase(JGrassGears.class);
}
// logger.debug("base class url: " + baseclassUrl);
AnnotationDB db = new AnnotationDB();
db.scanArchives(baseclassUrl);
Map<String, Set<String>> annotationIndex = db.getAnnotationIndex();
Set<String> simpleClasses = annotationIndex.get(Execute.class.getName());
for (String className : simpleClasses) {
if (!className.startsWith("org.hortonmachine.gears")) {
continue;
}
// logger.debug("check: " + className);
int lastDot = className.lastIndexOf('.');
String name = className.substring(lastDot + 1);
Class<?> clazz = null;
try {
clazz = Class.forName(className);
moduleName2Class.put(name, clazz);
} catch (Throwable e) {
e.printStackTrace();
}
}
/*
* extract all classes and fields
*/
List<String> classNames = new ArrayList<>();
List<String> fieldNamesList = new ArrayList<>();
Set<Entry<String, Class<?>>> moduleName2ClassEntries = moduleName2Class.entrySet();
for (Entry<String, Class<?>> moduleName2ClassEntry : moduleName2ClassEntries) {
String moduleName = moduleName2ClassEntry.getKey();
Class<?> moduleClass = moduleName2ClassEntry.getValue();
Status annotation = moduleClass.getAnnotation(Status.class);
if (annotation == null) {
System.out.println("Missing status: " + moduleClass.getCanonicalName());
continue;
}
String statusString;
int status = annotation.value();
switch(status) {
case Status.CERTIFIED:
statusString = "CERTIFIED";
break;
case Status.DRAFT:
statusString = "DRAFT";
break;
case Status.TESTED:
statusString = "TESTED";
break;
default:
statusString = "UNKNOWN";
break;
}
classNames.add(moduleName);
List<ClassField> tmpfields = new ArrayList<>();
Object annotatedObject = moduleClass.newInstance();
ComponentAccess cA = new ComponentAccess(annotatedObject);
Collection<Access> inputs = cA.inputs();
for (Access access : inputs) {
Field field = access.getField();
String name = field.getName();
Description descriptionAnnot = field.getAnnotation(Description.class);
String description = name;
if (descriptionAnnot != null) {
description = descriptionAnnot.value();
if (description == null) {
description = name;
}
}
Class<?> fieldClass = field.getType();
ClassField cf = new ClassField();
cf.isIn = true;
cf.fieldName = name;
cf.fieldDescription = description;
cf.fieldClass = fieldClass;
cf.parentClass = moduleClass;
cf.parentClassStatus = statusString;
if (!fieldNamesList.contains(name)) {
fieldNamesList.add(name);
}
tmpfields.add(cf);
}
Collection<Access> outputs = cA.outputs();
for (Access access : outputs) {
Field field = access.getField();
String name = field.getName();
Description descriptionAnnot = field.getAnnotation(Description.class);
String description = name;
if (descriptionAnnot != null) {
description = descriptionAnnot.value();
if (description == null) {
description = name;
}
}
Class<?> fieldClass = field.getType();
ClassField cf = new ClassField();
cf.isOut = true;
cf.fieldName = name;
cf.fieldDescription = description;
cf.fieldClass = fieldClass;
cf.parentClass = moduleClass;
cf.parentClassStatus = statusString;
if (!fieldNamesList.contains(name)) {
fieldNamesList.add(name);
}
tmpfields.add(cf);
}
moduleName2Fields.put(moduleName, tmpfields);
}
Collections.sort(fieldNamesList);
allFields = (String[]) fieldNamesList.toArray(new String[fieldNamesList.size()]);
Collections.sort(classNames);
allClasses = (String[]) classNames.toArray(new String[classNames.size()]);
} catch (InstantiationException | IllegalAccessException | IOException e) {
e.printStackTrace();
}
}
Aggregations