blob: d9712a546dd388da764f5f1effb98e673067c2fb [file] [log] [blame]
/*
* Copyright (c) 2011, 2012, 2015 Eike Stepper (Berlin, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.releng.doc.article.impl;
import org.eclipse.emf.cdo.releng.doc.article.Context;
import org.eclipse.emf.cdo.releng.doc.article.Documentation;
import org.eclipse.emf.cdo.releng.doc.article.util.ArticleException;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.RootDoc;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.HashSet;
import java.util.Set;
/**
* @author Eike Stepper
*/
public class ArticleDoclet
{
public static final String OPTION_START_TIME = "-starttime";
public static final String OPTION_PRIVATE = "-private";
public static final String OPTION_BASE_FOLDER = "-basefolder";
public static final String OPTION_PROJECT = "-project";
public static final String OPTION_EXTERNALS = "-externals";
public static boolean hasOption(RootDoc root, String optionName)
{
for (String[] option : root.options())
{
if (optionName.equalsIgnoreCase(option[0]))
{
return true;
}
}
return false;
}
public static String getOption(RootDoc root, String optionName)
{
for (String[] option : root.options())
{
if (optionName.equalsIgnoreCase(option[0]))
{
// FIXME Multi-argument options?
return option[1];
}
}
return "";
}
public static void dumpOptions(RootDoc root)
{
Set<String> sourcepath = new HashSet<String>();
Set<String> subpackages = new HashSet<String>();
for (ClassDoc classDoc : root.classes())
{
sourcepath.add(classDoc.position().file().getAbsolutePath());
subpackages.add(classDoc.containingPackage().name());
}
System.out.print("-sourcepath");
String sep = " ";
for (String string : sourcepath)
{
System.out.print(sep);
System.out.print(string.replace('\\', '/').replaceAll("C:/", "/"));
sep = ";";
}
System.out.println();
System.out.print("-subpackages");
sep = " ";
for (String string : subpackages)
{
System.out.print(sep);
System.out.print(string);
sep = ":";
}
System.out.println();
for (String[] option : root.options())
{
System.out.print(option[0]);
for (int i = 1; i < option.length; i++)
{
String value = option[i];
System.out.print(" " + value.replace('\\', '/').replaceAll("C:/", "/"));
}
System.out.println();
}
System.out.println();
}
public static int optionLength(String option)
{
if (OPTION_BASE_FOLDER.equals(option))
{
return 2;
}
if (OPTION_START_TIME.equals(option))
{
return 2;
}
if (OPTION_PROJECT.equals(option))
{
return 2;
}
if (OPTION_EXTERNALS.equals(option))
{
return 2;
}
// Indicate we don't know about it
return -1;
}
public static boolean start(RootDoc root)
{
// dumpOptions(root);
long startTime = System.currentTimeMillis();
try
{
String timeOption = getOption(root, OPTION_START_TIME);
if (timeOption.length() != 0)
{
try
{
startTime = new SimpleDateFormat("y-M-D-H-m-s-S").parse(timeOption).getTime();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
if (!hasOption(root, OPTION_PRIVATE))
{
throw new ArticleException("Missing option: " + OPTION_PRIVATE);
}
File baseFolder = new File(getOption(root, OPTION_BASE_FOLDER));
String project = getOption(root, OPTION_PROJECT);
String externals = getOption(root, OPTION_EXTERNALS);
Context context = new ContextImpl(root, baseFolder, project, externals);
Documentation documentation = context.getDocumentation();
documentation.generate();
return true;
}
catch (ArticleException ex)
{
System.err.println(ex.getMessage());
}
catch (Error ex)
{
ex.printStackTrace();
}
catch (Exception ex)
{
ex.printStackTrace();
}
finally
{
long duration = (System.currentTimeMillis() - startTime) / 1000;
System.out.println("Total time: " + duration + " seconds");
}
return false;
}
static
{
// Preload classes
new ArticleImpl();
new CalloutImpl();
new CategoryImpl();
new ChapterImpl();
new ContextImpl();
new DiagramImpl();
new DocumentationImpl();
new EmbeddingImpl();
new ExternalTargetImpl();
new FactoryImpl();
new JavaElementImpl();
new LinkImpl();
new SnippetImpl();
new SourceCodeImpl();
new TextImpl();
}
}