summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/tags/2.0.1-RC1/modules/composite-diagram/src/main/java/org/apache/tuscany/sca/diagram/main/Main.java
diff options
context:
space:
mode:
Diffstat (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')
-rwxr-xr-xsca-java-2.x/tags/2.0.1-RC1/modules/composite-diagram/src/main/java/org/apache/tuscany/sca/diagram/main/Main.java325
1 files changed, 325 insertions, 0 deletions
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);
+ }
+ }
+ }
+
+}