blob: 83241c9adb66a71ba29c3ef9fb4a3ce557496f15 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2017 Mountainminds GmbH & Co. KG and Contributors
* 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:
* Marc R. Hoffmann - initial API and implementation
*
*******************************************************************************/
package org.jacoco.cli.internal;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.jacoco.cli.internal.commands.AllCommands;
import org.jacoco.report.internal.xml.XMLDocument;
import org.jacoco.report.internal.xml.XMLElement;
import org.kohsuke.args4j.spi.OptionHandler;
/**
* Internal utility to dump all command descriptions as XML.
*/
public final class XmlDocumentation {
private XmlDocumentation() {
}
private static void writeCommand(final Command command,
final XMLElement parent) throws IOException {
final CommandParser parser = new CommandParser(command);
final XMLElement element = parent.element("command");
element.attr("name", command.name());
element.element("usage").text(command.usage(parser));
element.element("description").text(command.description());
writeOptions(element, parser.getArguments());
writeOptions(element, parser.getOptions());
}
private static void writeOptions(final XMLElement parent,
@SuppressWarnings("rawtypes") final List<OptionHandler> list)
throws IOException {
for (final OptionHandler<?> o : list) {
final XMLElement optionNode = parent.element("option");
optionNode.attr("required", String.valueOf(o.option.required()));
optionNode.attr("multiple",
String.valueOf(o.setter.isMultiValued()));
optionNode.element("usage").text(o.getNameAndMeta(null));
optionNode.element("description").text(o.option.usage());
}
}
/**
* Called during the build process.
*
* @param args
* exactly one argument expected with the target location
* @throws IOException
* if XML document cannot be written
*/
public static void main(final String... args) throws IOException {
final File file = new File(args[0]);
file.getParentFile().mkdirs();
final XMLElement root = new XMLDocument("documentation", null, null,
"UTF-8", true, new FileOutputStream(file));
for (final Command c : AllCommands.get()) {
writeCommand(c, root);
}
root.close();
}
}