summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java')
-rw-r--r--src/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java153
1 files changed, 103 insertions, 50 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java b/src/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
index 7878a759..34816b6f 100644
--- a/src/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
+++ b/src/de/lmu/ifi/dbs/elki/application/internal/DocumentReferences.java
@@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.application.internal;
This file is part of ELKI:
Environment for Developing KDD-Applications Supported by Index-Structures
- Copyright (C) 2013
+ Copyright (C) 2014
Ludwig-Maximilians-Universität München
Lehr- und Forschungseinheit für Datenbanksysteme
ELKI Development Team
@@ -29,9 +29,11 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -76,12 +78,12 @@ public class DocumentReferences {
LoggingUtil.warning("I need exactly one or two file names to operate!");
System.exit(1);
}
- if(!args[0].endsWith(".html") || (args.length > 1 && !args[1].endsWith(".wiki"))) {
+ if(!args[0].endsWith(".html") || (args.length > 1 && !args[1].endsWith(".trac"))) {
LoggingUtil.warning("File name doesn't end in expected extension!");
System.exit(1);
}
- List<Pair<Reference, List<Class<?>>>> refs = sortedReferences();
+ List<Pair<Reference, List<Object>>> refs = sortedReferences();
try {
File references = new File(args[0]);
FileOutputStream reffo = new FileOutputStream(references);
@@ -113,7 +115,7 @@ public class DocumentReferences {
}
}
- private static Document documentReferences(List<Pair<Reference, List<Class<?>>>> refs) {
+ private static Document documentReferences(List<Pair<Reference, List<Object>>> refs) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder;
try {
@@ -168,25 +170,40 @@ public class DocumentReferences {
// Main definition list
Element maindl = htmldoc.createElement(HTMLUtil.HTML_DL_TAG);
body.appendChild(maindl);
- for(Pair<Reference, List<Class<?>>> pair : refs) {
+ for(Pair<Reference, List<Object>> pair : refs) {
// DT = definition term
Element classdt = htmldoc.createElement(HTMLUtil.HTML_DT_TAG);
// Anchor for references
{
boolean first = true;
- for(Class<?> cls : pair.second) {
+ for(Object o : pair.second) {
if(!first) {
classdt.appendChild(htmldoc.createTextNode(", "));
}
- Element classan = htmldoc.createElement(HTMLUtil.HTML_A_TAG);
- classan.setAttribute(HTMLUtil.HTML_NAME_ATTRIBUTE, cls.getName());
- classdt.appendChild(classan);
+ if(o instanceof Class<?>) {
+ Class<?> cls = (Class<?>) o;
+ Element classan = htmldoc.createElement(HTMLUtil.HTML_A_TAG);
+ classan.setAttribute(HTMLUtil.HTML_NAME_ATTRIBUTE, cls.getName());
+ classdt.appendChild(classan);
- // Link back to original class
- Element classa = htmldoc.createElement(HTMLUtil.HTML_A_TAG);
- classa.setAttribute(HTMLUtil.HTML_HREF_ATTRIBUTE, linkForClassName(cls.getName()));
- classa.setTextContent(cls.getName());
- classdt.appendChild(classa);
+ // Link back to original class
+ Element classa = htmldoc.createElement(HTMLUtil.HTML_A_TAG);
+ classa.setAttribute(HTMLUtil.HTML_HREF_ATTRIBUTE, linkForClassName(cls.getName()));
+ classa.setTextContent(cls.getName());
+ classdt.appendChild(classa);
+ }
+ else if(o instanceof Package) {
+ Package pkg = (Package) o;
+ Element classan = htmldoc.createElement(HTMLUtil.HTML_A_TAG);
+ classan.setAttribute(HTMLUtil.HTML_NAME_ATTRIBUTE, pkg.getName());
+ classdt.appendChild(classan);
+
+ // Link back to original class
+ Element classa = htmldoc.createElement(HTMLUtil.HTML_A_TAG);
+ classa.setAttribute(HTMLUtil.HTML_HREF_ATTRIBUTE, linkForPackageName(pkg.getName()));
+ classa.setTextContent(pkg.getName());
+ classdt.appendChild(classa);
+ }
first = false;
}
@@ -215,9 +232,11 @@ public class DocumentReferences {
titlediv.appendChild(titleb);
classdd.appendChild(titlediv);
// Booktitle
- Element booktitlediv = htmldoc.createElement(HTMLUtil.HTML_DIV_TAG);
- booktitlediv.setTextContent("In: " + ref.booktitle());
- classdd.appendChild(booktitlediv);
+ if(ref.booktitle().length() > 0) {
+ Element booktitlediv = htmldoc.createElement(HTMLUtil.HTML_DIV_TAG);
+ booktitlediv.setTextContent("In: " + ref.booktitle());
+ classdd.appendChild(booktitlediv);
+ }
// URL
if(ref.url().length() > 0) {
Element urldiv = htmldoc.createElement(HTMLUtil.HTML_DIV_TAG);
@@ -232,20 +251,31 @@ public class DocumentReferences {
return htmldoc;
}
- private static void documentReferencesWiki(List<Pair<Reference, List<Class<?>>>> refs, PrintStream refstreamW) {
- for(Pair<Reference, List<Class<?>>> pair : refs) {
- // JavaDoc links for relevant classes.
+ private static void documentReferencesWiki(List<Pair<Reference, List<Object>>> refs, PrintStream refstreamW) {
+ for(Pair<Reference, List<Object>> pair : refs) {
+ // JavaDoc links for relevant classes and packages.
{
boolean first = true;
- for(Class<?> cls : pair.second) {
+ for(Object o : pair.second) {
if(!first) {
refstreamW.println(",[[br]]");
}
- refstreamW.print("[[javadoc(");
- refstreamW.print(cls.getName());
- refstreamW.print(",");
- refstreamW.print(cls.getName());
- refstreamW.print(")]]");
+ if(o instanceof Class<?>) {
+ Class<?> cls = (Class<?>) o;
+ refstreamW.print("[[javadoc(");
+ refstreamW.print(cls.getName());
+ refstreamW.print(",");
+ refstreamW.print(cls.getName());
+ refstreamW.print(")]]");
+ }
+ else if(o instanceof Package) {
+ Package pkg = (Package) o;
+ refstreamW.print("[[javadoc(");
+ refstreamW.print(pkg.getName());
+ refstreamW.print(",");
+ refstreamW.print(pkg.getName());
+ refstreamW.print(")]]");
+ }
first = false;
}
@@ -264,7 +294,9 @@ public class DocumentReferences {
// Title
refstreamW.println(indent + "'''" + ref.title() + "'''" + " [[br]]");
// Booktitle
- refstreamW.println(indent + "In: " + ref.booktitle() + " [[br]]");
+ if(ref.booktitle().length() > 0) {
+ refstreamW.println(indent + "In: " + ref.booktitle() + " [[br]]");
+ }
// URL
if(ref.url().length() > 0) {
refstreamW.println(indent + "Online: [" + ref.url() + "][[br]]");
@@ -275,27 +307,28 @@ public class DocumentReferences {
}
}
- private static List<Pair<Reference, List<Class<?>>>> sortedReferences() {
- List<Pair<Reference, List<Class<?>>>> refs = new ArrayList<>();
- Map<Reference, List<Class<?>>> map = new HashMap<>();
+ private static List<Pair<Reference, List<Object>>> sortedReferences() {
+ List<Pair<Reference, List<Object>>> refs = new ArrayList<>();
+ Map<Reference, List<Object>> map = new HashMap<>();
- for(final Class<?> cls : InspectionUtil.findAllImplementations(Object.class, true)) {
+ HashSet<Package> packages = new HashSet<>();
+ for(Class<?> cls : InspectionUtil.findAllImplementations(Object.class, true, false)) {
inspectClass(cls, refs, map);
+ if(packages.add(cls.getPackage())) {
+ inspectPackage(cls.getPackage(), refs, map);
+ }
}
return refs;
}
- private static void inspectClass(final Class<?> cls, List<Pair<Reference, List<Class<?>>>> refs, Map<Reference, List<Class<?>>> map) {
+ private static void inspectClass(final Class<?> cls, List<Pair<Reference, List<Object>>> refs, Map<Reference, List<Object>> map) {
+ if(cls.getSimpleName().equals("package-info")) {
+ return;
+ }
try {
if(cls.isAnnotationPresent(Reference.class)) {
Reference ref = cls.getAnnotation(Reference.class);
- List<Class<?>> list = map.get(ref);
- if(list == null) {
- list = new ArrayList<>(5);
- map.put(ref, list);
- refs.add(new Pair<>(ref, list));
- }
- list.add(cls);
+ addReference(cls, ref, refs, map);
}
// Inner classes
for(Class<?> c2 : cls.getDeclaredClasses()) {
@@ -304,13 +337,13 @@ public class DocumentReferences {
for(Method m : cls.getDeclaredMethods()) {
if(m.isAnnotationPresent(Reference.class)) {
Reference ref = m.getAnnotation(Reference.class);
- List<Class<?>> list = map.get(ref);
- if(list == null) {
- list = new ArrayList<>(5);
- map.put(ref, list);
- refs.add(new Pair<>(ref, list));
- }
- list.add(cls);
+ addReference(cls, ref, refs, map);
+ }
+ }
+ for(Field f : cls.getDeclaredFields()) {
+ if(f.isAnnotationPresent(Reference.class)) {
+ Reference ref = f.getAnnotation(Reference.class);
+ addReference(cls, ref, refs, map);
}
}
}
@@ -324,19 +357,39 @@ public class DocumentReferences {
}
}
+ private static void addReference(Object cls, Reference ref, List<Pair<Reference, List<Object>>> refs, Map<Reference, List<Object>> map) {
+ List<Object> list = map.get(ref);
+ if(list == null) {
+ list = new ArrayList<>(3);
+ map.put(ref, list);
+ refs.add(new Pair<>(ref, list));
+ }
+ list.add(cls);
+ }
+
+ private static void inspectPackage(Package p, List<Pair<Reference, List<Object>>> refs, Map<Reference, List<Object>> map) {
+ if(p.isAnnotationPresent(Reference.class)) {
+ Reference ref = p.getAnnotation(Reference.class);
+ addReference(p, ref, refs, map);
+ }
+ }
+
private static String linkForClassName(String name) {
- String link = name.replace(".", "/") + ".html";
- return link;
+ return name.replace(".", "/") + ".html";
+ }
+
+ private static String linkForPackageName(String name) {
+ return name.replace(".", "/") + "/package-summary.html";
}
/**
- * Fin all classes that have the reference annotation
+ * Find all classes that have the reference annotation
*
* @return All classes with the reference annotation.
*/
public static ArrayList<Class<?>> findAllClassesWithReferences() {
ArrayList<Class<?>> references = new ArrayList<>();
- for(final Class<?> cls : InspectionUtil.findAllImplementations(Object.class, true)) {
+ for(final Class<?> cls : InspectionUtil.findAllImplementations(Object.class, true, false)) {
if(cls.isAnnotationPresent(Reference.class)) {
references.add(cls);
}