blob: 6b7646a40819607d19e36dd90ae713a510af3ce9 [file] [log] [blame]
/*
* Copyright 2003-2007 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.groovy.tools.groovydoc;
import java.util.Arrays;
import java.util.Iterator;
import org.codehaus.groovy.groovydoc.GroovyClassDoc;
import org.codehaus.groovy.groovydoc.GroovyPackageDoc;
import org.codehaus.groovy.groovydoc.GroovyRootDoc;
/*
* todo
* comma at the end of method parameters
* static modifier
* order methods alphabetically (implement compareTo enough?)
* provide links to other html files (e.g. return type of a method)
*/
public class GroovyDocWriter {
private GroovyDocTool tool;
private OutputTool output;
private GroovyDocTemplateEngine templateEngine;
private static final String FS = "/";
public GroovyDocWriter(GroovyDocTool tool, OutputTool output, GroovyDocTemplateEngine templateEngine) {
this.tool = tool;
this.output = output;
this.templateEngine = templateEngine;
}
public void writeClasses(GroovyRootDoc rootDoc, String destdir) throws Exception {
Iterator classDocs = Arrays.asList(rootDoc.classes()).iterator();
while (classDocs.hasNext()) {
GroovyClassDoc classDoc = (GroovyClassDoc) classDocs.next();
writeClassToOutput(classDoc, destdir);
}
}
public void writeRoot(GroovyRootDoc rootDoc, String destdir) throws Exception {
output.makeOutputArea(destdir);
writeRootDocToOutput(rootDoc, destdir);
}
public void writeClassToOutput(GroovyClassDoc classDoc, String destdir) throws Exception {
String destFileName = destdir + FS + classDoc.getFullPathName() + ".html";
System.out.println("Generating " + destFileName);
String renderedSrc = templateEngine.applyClassTemplates(classDoc);// todo
output.writeToOutput(destFileName, renderedSrc);
}
public void writePackages(GroovyRootDoc rootDoc, String destdir) throws Exception {
Iterator packageDocs = Arrays.asList(rootDoc.specifiedPackages()).iterator();
while (packageDocs.hasNext()) {
GroovyPackageDoc packageDoc = (GroovyPackageDoc) packageDocs.next();
output.makeOutputArea(destdir + FS + packageDoc.name());
writePackageToOutput(packageDoc, destdir);
}
}
public void writePackageToOutput(GroovyPackageDoc packageDoc, String destdir) throws Exception {
Iterator templates = templateEngine.packageTemplatesIterator();
while (templates.hasNext()) {
String template = (String) templates.next();
String renderedSrc = templateEngine.applyPackageTemplate(template, packageDoc); // todo
String destFileName = destdir + FS + packageDoc.name() + FS + tool.getFile(template);
System.out.println("Generating " + destFileName);
output.writeToOutput(destFileName, renderedSrc);
}
}
public void writeRootDocToOutput(GroovyRootDoc rootDoc, String destdir) throws Exception {
Iterator templates = templateEngine.docTemplatesIterator();
while (templates.hasNext()) {
String template = (String) templates.next();
String renderedSrc = templateEngine.applyRootDocTemplate(template, rootDoc); // todo
String destFileName = destdir + FS + tool.getFile(template);
System.out.println("Generating " + destFileName);
output.writeToOutput(destFileName, renderedSrc);
}
}
}