/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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.apache.tuscany.sca.diagram.main; import java.io.File; import java.io.FileWriter; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.apache.commons.cli.PosixParser; import org.apache.tuscany.sca.diagram.generator.DiagramGenerator; import org.apache.tuscany.sca.diagram.html.HTMLWrapper; import org.apache.tuscany.sca.diagram.layout.CompositeEntity; import org.apache.tuscany.sca.diagram.layout.EntityBuilder; import org.w3c.dom.Document; public class Main { static Options getCommandLineOptions() { Options options = new Options(); Option opt1 = new Option("s", "svg", false, "Generate SVG diagrams"); options.addOption(opt1); Option opt2 = new Option("h", "html", false, "Generate HTML documents"); options.addOption(opt2); Option opt3 = new Option("o", "output", true, "Output directory"); options.addOption(opt3); return options; } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { CommandLineParser parser = new PosixParser(); Options options = getCommandLineOptions(); CommandLine cli = null; boolean help = false; try { cli = parser.parse(options, args); if (cli.getArgList().size() == 0) { help = true; } } catch (ParseException e) { System.out.println(e); help = true; } // Print out the options and quit if (help) { HelpFormatter formatter = new HelpFormatter(); formatter.printHelp("<-h> <-s> <-o outputDirectory> file1 file2 ...: ", options); return; } boolean isHtml = false; boolean isSvg = false; isSvg = cli.hasOption('s'); isHtml = cli.hasOption('h'); if (!isSvg && !isHtml) { isSvg = true; isHtml = true; } String outFileDir; if (cli.hasOption('o')) { outFileDir = cli.getOptionValue('o'); } else { outFileDir = "."; } File dir = new File(outFileDir); String[] compositeFiles = cli.getArgs(); generate(dir, isSvg, isHtml, compositeFiles); } public static void generate(File dir, boolean isSvg, boolean isHtml, String... compositeFiles) throws Exception { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); for (String str : compositeFiles) { if (str != null) { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc = db.parse(str); EntityBuilder eb = new EntityBuilder(doc); CompositeEntity comp = eb.buildCompositeEntity(); DiagramGenerator dg = new DiagramGenerator(comp, isHtml); Document svg = dg.buildSVGDocument(); String svgContent = extractSvg(svg); if (isSvg) { writeSVG(dir, svgContent, comp); } if (isHtml) { writeHTML(dir, svgContent, comp); } } } } private static void writeHTML(File dir, String svg, CompositeEntity comp) throws Exception { File htmlFile = new File(dir, comp.getName() + comp.getFileNameSuffix() + ".html"); HTMLWrapper html = new HTMLWrapper(svg, comp.getName(), htmlFile); String content = html.buildHTML(); System.err.println("--------------HTML Output for " + comp.getName() + "--------------\n"); System.out.println(content); System.err.println("--------------------------------------------------------------\n"); } private static File writeSVG(File dir, String svg, CompositeEntity comp) throws Exception { String svgFileName = comp.getName() + comp.getFileNameSuffix() + ".svg"; File svgFile = new File(dir, svgFileName); FileWriter fw = new FileWriter(svgFile); fw.write(svg); fw.close(); return svgFile; } private static String extractSvg(Document svg) throws Exception { // Set up the output transformer TransformerFactory transfac = TransformerFactory.newInstance(); Transformer trans = transfac.newTransformer(); // Print the DOM node StringWriter sw = new StringWriter(); StreamResult result = new StreamResult(sw); DOMSource source = new DOMSource(svg); trans.transform(source, result); String svgString = sw.toString(); return svgString; } }