From 132aa8a77685ec92bc90c03f987650d275a7b639 Mon Sep 17 00:00:00 2001 From: lresende Date: Mon, 30 Sep 2013 06:59:11 +0000 Subject: 2.0.1 RC1 release tag git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1527464 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tuscany/sca/diagram/main/Main.java | 325 +++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100755 sca-java-2.x/tags/2.0.1-RC1/modules/composite-diagram/src/main/java/org/apache/tuscany/sca/diagram/main/Main.java (limited to 'sca-java-2.x/tags/2.0.1-RC1/modules/composite-diagram/src/main/java/org/apache/tuscany/sca/diagram/main/Main.java') diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/composite-diagram/src/main/java/org/apache/tuscany/sca/diagram/main/Main.java b/sca-java-2.x/tags/2.0.1-RC1/modules/composite-diagram/src/main/java/org/apache/tuscany/sca/diagram/main/Main.java new file mode 100755 index 0000000000..033c1a6d00 --- /dev/null +++ b/sca-java-2.x/tags/2.0.1-RC1/modules/composite-diagram/src/main/java/org/apache/tuscany/sca/diagram/main/Main.java @@ -0,0 +1,325 @@ +/* + * 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.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringWriter; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.OutputKeys; +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.batik.transcoder.Transcoder; +import org.apache.batik.transcoder.TranscoderException; +import org.apache.batik.transcoder.TranscoderInput; +import org.apache.batik.transcoder.TranscoderOutput; +import org.apache.batik.transcoder.image.JPEGTranscoder; +import org.apache.batik.transcoder.image.PNGTranscoder; +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.apache.tuscany.sca.diagram.layout.TuscanyCompositeEntityBuilder; +import org.apache.tuscany.sca.node.NodeFactory; +import org.apache.tuscany.sca.node.configuration.NodeConfiguration; +import org.apache.tuscany.sca.node.extensibility.NodeExtension; +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("j", "jpeg", false, "Generate JPEG diagrams"); + options.addOption(opt3); + + Option opt4 = new Option("o", "output", true, "Output directory"); + options.addOption(opt4); + + 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; + boolean isJpeg = false; + isSvg = cli.hasOption('s'); + isHtml = cli.hasOption('h'); + isJpeg = cli.hasOption('j'); + + if (!isSvg && !isHtml && !isJpeg) { + 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, null, isSvg, isHtml, false, compositeFiles); + } + + public static void generate(File dir, + String baseURL, + boolean isSvg, + boolean isHtml, + boolean isJpeg, + 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, baseURL); + Document svg = dg.buildSVGDocument(); + + if (isJpeg) { + String jpgFileName = comp.getName() + comp.getFileNameSuffix() + ".jpg"; + svgToJPEG(svg, new File(dir, jpgFileName)); + } + + 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); + 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 { + // Print the DOM node + + StringWriter sw = new StringWriter(); + StreamResult result = new StreamResult(sw); + + transform(svg, result); + String svgString = sw.toString(); + + return svgString; + } + + private static void transform(Document svg, StreamResult result) throws Exception { + // Set up the output transformer + TransformerFactory transfac = TransformerFactory.newInstance(); + + Transformer trans = transfac.newTransformer(); + trans.setOutputProperty(OutputKeys.INDENT, "yes"); + trans.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); + + DOMSource source = new DOMSource(svg); + trans.transform(source, result); + } + + public static void svgToJPEG(File svg, File jpeg) throws IOException, TranscoderException { + // Create the transcoder input. + TranscoderInput input = new TranscoderInput(svg.toURI().toString()); + // Create the transcoder output. + OutputStream ostream = new FileOutputStream(jpeg); + TranscoderOutput output = new TranscoderOutput(ostream); + + // Create a JPEG transcoder + Transcoder t = new JPEGTranscoder(); + + // Set the transcoding hints. + t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(1.0)); + + // Save the image. + t.transcode(input, output); + + // Flush and close the stream. + ostream.flush(); + ostream.close(); + } + + public static void svgToJPEG(Document svg, File jpeg) throws IOException, TranscoderException { + // Create the transcoder input. + TranscoderInput input = new TranscoderInput(svg); + // Create the transcoder output. + OutputStream ostream = new FileOutputStream(jpeg); + TranscoderOutput output = new TranscoderOutput(ostream); + + // Create a JPEG transcoder + Transcoder t = new JPEGTranscoder(); + + // Set the transcoding hints. + t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(1.0)); + + // Save the image. + t.transcode(input, output); + + // Flush and close the stream. + ostream.flush(); + ostream.close(); + } + + public static void svgToJPEG(InputStream svg, OutputStream jpeg) throws IOException, TranscoderException { + // Create the transcoder input. + TranscoderInput input = new TranscoderInput(svg); + + TranscoderOutput output = new TranscoderOutput(jpeg); + + // Create a JPEG transcoder + Transcoder t = new JPEGTranscoder(); + + // Set the transcoding hints. + t.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(1.0)); + + // Save the image. + t.transcode(input, output); + + // Flush and close the stream. + svg.close(); + jpeg.flush(); + jpeg.close(); + } + + public static void svgToPNG(InputStream svg, OutputStream png) throws IOException, TranscoderException { + // Create the transcoder input. + TranscoderInput input = new TranscoderInput(svg); + + TranscoderOutput output = new TranscoderOutput(png); + + // Create a JPEG transcoder + Transcoder t = new PNGTranscoder(); + + // Save the image. + t.transcode(input, output); + + // Flush and close the stream. + svg.close(); + png.flush(); + png.close(); + } + + /** + * Generate the SVG diagram from + * @param configuration + * @param classLoader + * @return The XML string for the SVG + * @throws Exception + */ + public static String generateDiagram(NodeConfiguration configuration, ClassLoader classLoader, String baseURL) + throws Exception { + ClassLoader currentTCCL = null; + if (classLoader != null) { + currentTCCL = Thread.currentThread().getContextClassLoader(); + Thread.currentThread().setContextClassLoader(classLoader); + } + + try { + NodeFactory factory = NodeFactory.getInstance(); + NodeExtension node = factory.loadNode(configuration); + TuscanyCompositeEntityBuilder builder = new TuscanyCompositeEntityBuilder(node.getDomainComposite()); + CompositeEntity compositeEntity = builder.buildCompositeEntity(); + DiagramGenerator generator = new DiagramGenerator(compositeEntity, false, baseURL); + Document doc = generator.buildSVGDocument(); + return extractSvg(doc); + } finally { + if (currentTCCL != null) { + Thread.currentThread().setContextClassLoader(currentTCCL); + } + } + } + +} -- cgit v1.2.3