diff options
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/ArticleDoclet.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/ArticleDoclet.java | 208 |
1 files changed, 208 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/ArticleDoclet.java b/plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/ArticleDoclet.java new file mode 100644 index 0000000000..8033bcf993 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.releng.doc/src/org/eclipse/emf/cdo/releng/doc/article/impl/ArticleDoclet.java @@ -0,0 +1,208 @@ +/** + * Copyright (c) 2004 - 2011 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.ArticleFactory; +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_PROJECT = "-project"; + + public static final String OPTION_BASE_FOLDER = "-basefolder"; + + 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; + } + + // 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); + + Context context = ArticleFactory.eINSTANCE.createContext(root, baseFolder, project); + + 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(); + } +} |