package com.revolsys.doclet;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import com.revolsys.record.io.format.xml.XmlWriter;
import com.sun.javadoc.AnnotationTypeDoc;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.ExecutableMemberDoc;
import com.sun.javadoc.PackageDoc;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.RootDoc;
import com.sun.javadoc.Type;
public class BaseDoclet {
public static Map<String, AnnotationTypeDoc> getAnnotations(final PackageDoc packageDoc) {
final Map<String, AnnotationTypeDoc> annotations = new TreeMap<>();
for (final AnnotationTypeDoc annotationDoc : packageDoc.annotationTypes()) {
annotations.put(annotationDoc.name(), annotationDoc);
}
return annotations;
}
public static Map<String, ClassDoc> getClasses(final PackageDoc packageDoc) {
final Map<String, ClassDoc> classes = new TreeMap<>();
for (final ClassDoc classDoc : packageDoc.ordinaryClasses()) {
classes.put(classDoc.name(), classDoc);
}
return classes;
}
public static Map<String, ClassDoc> getEnums(final PackageDoc packageDoc) {
final Map<String, ClassDoc> enums = new TreeMap<>();
for (final ClassDoc enumDoc : packageDoc.enums()) {
enums.put(enumDoc.name(), enumDoc);
}
return enums;
}
public static Map<String, ClassDoc> getInterfaces(final PackageDoc packageDoc) {
final Map<String, ClassDoc> interfaces = new TreeMap<>();
for (final ClassDoc classDoc : packageDoc.interfaces()) {
interfaces.put(classDoc.name(), classDoc);
}
return interfaces;
}
protected String destDir = ".";
protected String docTitle;
protected Set<String> customCssUrls = new LinkedHashSet<>();
protected final RootDoc root;
protected XmlWriter writer;
public BaseDoclet(final RootDoc root) {
this.root = root;
}
public void documentation() {
}
protected String getClassId(final ClassDoc classDoc) {
return DocletUtil.qualifiedName(classDoc);
}
protected String getMemberId(final ExecutableMemberDoc member) {
final StringBuilder id = new StringBuilder();
final ClassDoc classDoc = member.containingClass();
final String classId = getClassId(classDoc);
id.append(classId);
id.append(".");
final String memberName = member.name();
id.append(memberName);
final Parameter[] parameters = member.parameters();
for (final Parameter parameter : parameters) {
id.append("-");
final Type type = parameter.type();
String typeName = type.qualifiedTypeName();
typeName = typeName.replaceAll("^java.lang.", "");
typeName = typeName.replaceAll("^java.io.", "");
typeName = typeName.replaceAll("^java.util.", "");
id.append(typeName);
id.append(type.dimension());
}
return id.toString().replaceAll("[^A-Za-z0-9\\-_.]", "_");
}
public void navbar() {
}
protected void setOptions(final String[][] options) {
for (final String[] option : options) {
final String optionName = option[0];
if (optionName.equals("-d")) {
this.destDir = option[1];
} else if (optionName.equals("-doctitle")) {
this.docTitle = option[1];
} else if (optionName.equals("-customcssurl")) {
this.customCssUrls.add(option[1]);
}
}
try {
final File dir = new File(this.destDir);
final File indexFile = new File(dir, "index.html");
final FileWriter out = new FileWriter(indexFile);
this.writer = new XmlWriter(out, false);
this.writer.setIndent(false);
this.writer.setWriteNewLine(false);
DocletUtil.copyFiles(this.destDir);
} catch (final IOException e) {
throw new IllegalArgumentException(e.fillInStackTrace().getMessage(), e);
}
}
protected void start() {
try {
setOptions(this.root.options());
DocletUtil.htmlHead(this.writer, this.docTitle, this.customCssUrls);
navbar();
documentation();
DocletUtil.htmlFoot(this.writer);
} finally {
if (this.writer != null) {
this.writer.close();
}
}
}
}