From 49cbaa6315a5d74f4854bf9a4966e8e173c88541 Mon Sep 17 00:00:00 2001 From: antelder Date: Mon, 8 Aug 2011 08:19:40 +0000 Subject: Add a module for a Tuscany Shell command that can draw an SVG picture of a composite git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1154866 13f79535-47bb-0310-9956-ffa450edef68 --- .../CompositeDiagramShellPlugin/pom.xml | 103 ++++++++++++++++++++ .../sca/diagram/shell/DrawShellCommand.java | 98 +++++++++++++++++++ .../tuscany/sca/diagram/shell/SVGViewer.java | 104 +++++++++++++++++++++ .../src/main/java/sample/Helloworld.java | 28 ++++++ .../src/main/java/sample/HelloworldImpl.java | 27 ++++++ .../main/resources/META-INF/sca-contribution.xml | 25 +++++ .../services/org.apache.tuscany.sca.shell.Command | 17 ++++ .../src/main/resources/helloworld.composite | 29 ++++++ 8 files changed, 431 insertions(+) create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/pom.xml create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/DrawShellCommand.java create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/SVGViewer.java create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/Helloworld.java create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/HelloworldImpl.java create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/sca-contribution.xml create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/services/org.apache.tuscany.sca.shell.Command create mode 100644 collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/helloworld.composite (limited to 'collaboration') diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/pom.xml b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/pom.xml new file mode 100644 index 0000000000..47ee1c9ddd --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/pom.xml @@ -0,0 +1,103 @@ + + + + 4.0.0 + org.apache.tuscany.sca + tuscany-composite-diagram-shell-plugin + 0.0.1 + Apache Tuscany SCA Composite Diagram Generator Shell Plugin + + + + + + tuscany.repo + Tuscany Maven 2.x Repository + http://svn.apache.org/repos/asf/tuscany/maven + + true + + + false + + + + + + + + org.apache.tuscany.sca + tuscany-composite-diagram + 0.0.1 + + + + org.apache.xmlgraphics + batik-swing + 1.7 + + + + org.apache.tuscany.sca + tuscany-base-runtime + 2.0-Beta3 + + + + jline + jline + 0.9.95-huynhjl + + + + junit + junit + 4.5 + test + + + + + + install + ${basedir}/target + ${artifactId}-${version} + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.5 + 1.5 + + + + + org.apache.tuscany.sca + tuscany-maven-plugin + 2.0-Beta3 + + + org.apache.tuscany.sca + tuscany-composite-diagram-shell-plugin + 0.0.1 + + + + + + + + + diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/DrawShellCommand.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/DrawShellCommand.java new file mode 100644 index 0000000000..7adde00b29 --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/DrawShellCommand.java @@ -0,0 +1,98 @@ +/* + * 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.shell; + +import java.io.ByteArrayInputStream; +import java.io.File; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import jline.Completor; +import jline.NullCompletor; + +import org.apache.tuscany.sca.assembly.Composite; +import org.apache.tuscany.sca.assembly.xml.Utils; +import org.apache.tuscany.sca.impl.NodeImpl; +import org.apache.tuscany.sca.impl.diagram.DiagramGenerator; +import org.apache.tuscany.sca.impl.io.XMLWriter; +import org.apache.tuscany.sca.impl.layout.CompositeEntity; +import org.apache.tuscany.sca.impl.layout.EntityBuilder; +import org.apache.tuscany.sca.shell.Command; +import org.apache.tuscany.sca.shell.Shell; +import org.apache.tuscany.sca.shell.jline.CompositeURICompletor; +import org.apache.tuscany.sca.shell.jline.ICURICompletor; +import org.w3c.dom.Document; + +public class DrawShellCommand implements Command { + + private Shell shell; + + public DrawShellCommand(Shell shell) { + this.shell = shell; + } + + public String getName() { + return "draw"; + } + + public String getShortHelp() { + return "draw "; + } + + public String getHelp() { + StringBuilder helpText = new StringBuilder(); + helpText.append("Draws a picture of the composite.\n"); + helpText.append("\n"); + helpText.append("Arguments:\n"); + helpText.append(" contributionURI - (required) the URI of the installed contribution\n"); + helpText.append(" compositeURL - (required) the URI of a started composite\n"); + return helpText.toString(); + } + + public boolean invoke(String[] args) throws Exception { + + NodeImpl node = (NodeImpl)shell.getNode(); + Composite composite = node.getContribution(args[0]).getArtifactModel(args[1]); + + //TODO: really all we want is to pass the Tuscany Composite object to the SVG drawing code, + // but for now as that requires an XML file to the Composite to XML: + + String compositeXML = Utils.modelToXML(composite, false, node.getExtensionPointRegistry()); + DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + Document doc = db.parse(new ByteArrayInputStream(compositeXML.getBytes())); + EntityBuilder eb = new EntityBuilder(doc); + CompositeEntity comp = eb.buildCompositeEntity(); + DiagramGenerator dg = new DiagramGenerator(comp); + Document svg = dg.buildSVGDocument(); + File outFile = File.createTempFile("tmp", "svg"); + XMLWriter writer = new XMLWriter(); + writer.fileWriter(svg, outFile); + + new SVGViewer(outFile.toURI().toURL().toString()); + + return true; + } + + public Completor[] getCompletors() { + return new Completor[]{new ICURICompletor(shell), new CompositeURICompletor(shell), new NullCompletor()}; + } + +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/SVGViewer.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/SVGViewer.java new file mode 100644 index 0000000000..e0d3b39fa5 --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/org/apache/tuscany/sca/diagram/shell/SVGViewer.java @@ -0,0 +1,104 @@ +/* + * 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.shell; + +import java.awt.BorderLayout; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; +import java.net.MalformedURLException; + +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; + +import org.apache.batik.swing.JSVGCanvas; +import org.apache.batik.swing.gvt.GVTTreeRendererAdapter; +import org.apache.batik.swing.gvt.GVTTreeRendererEvent; +import org.apache.batik.swing.svg.GVTTreeBuilderAdapter; +import org.apache.batik.swing.svg.GVTTreeBuilderEvent; +import org.apache.batik.swing.svg.SVGDocumentLoaderAdapter; +import org.apache.batik.swing.svg.SVGDocumentLoaderEvent; + +public class SVGViewer { + + public static void main(String[] args) { + new SVGViewer("../CompositeDiagramGeneratorUsingBatik/output/Calculator_diagram.svg"); + } + + protected JFrame frame; + protected JLabel label = new JLabel(); + protected JSVGCanvas svgCanvas = new JSVGCanvas(); + protected String svgFile; + + public SVGViewer(String svgFile) { + this.svgFile = svgFile; + this.frame = new JFrame("Batik"); + frame.getContentPane().add(createComponents()); + frame.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { +// System.exit(0); + } + }); + frame.setSize(1000, 1000); + frame.setVisible(true); + } + + public JComponent createComponents() { + final JPanel panel = new JPanel(new BorderLayout()); + panel.add("Center", svgCanvas); + try { + svgCanvas.setURI(new File(svgFile).toURI().toURL().toString()); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + + svgCanvas.addSVGDocumentLoaderListener(new SVGDocumentLoaderAdapter() { + public void documentLoadingStarted(SVGDocumentLoaderEvent e) { + label.setText("Document Loading..."); + } + public void documentLoadingCompleted(SVGDocumentLoaderEvent e) { + label.setText("Document Loaded."); + } + }); + + svgCanvas.addGVTTreeBuilderListener(new GVTTreeBuilderAdapter() { + public void gvtBuildStarted(GVTTreeBuilderEvent e) { + label.setText("Build Started..."); + } + public void gvtBuildCompleted(GVTTreeBuilderEvent e) { + label.setText("Build Done."); + frame.pack(); + } + }); + + svgCanvas.addGVTTreeRendererListener(new GVTTreeRendererAdapter() { + public void gvtRenderingPrepare(GVTTreeRendererEvent e) { + label.setText("Rendering Started..."); + } + public void gvtRenderingCompleted(GVTTreeRendererEvent e) { + label.setText(""); + } + }); + + return panel; + } + } \ No newline at end of file diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/Helloworld.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/Helloworld.java new file mode 100644 index 0000000000..f4e8c50448 --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/Helloworld.java @@ -0,0 +1,28 @@ +/* + * 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 sample; + +import org.oasisopen.sca.annotation.Remotable; + +@Remotable +public interface Helloworld { + + String sayHello(String name); + +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/HelloworldImpl.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/HelloworldImpl.java new file mode 100644 index 0000000000..089b1a4290 --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/java/sample/HelloworldImpl.java @@ -0,0 +1,27 @@ +/* + * 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 sample; + +public class HelloworldImpl implements Helloworld { + + public String sayHello(String name) { + return "Hello " + name; + } + +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/sca-contribution.xml b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/sca-contribution.xml new file mode 100644 index 0000000000..95c32fb5bf --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/sca-contribution.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/services/org.apache.tuscany.sca.shell.Command b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/services/org.apache.tuscany.sca.shell.Command new file mode 100644 index 0000000000..74310035fb --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/META-INF/services/org.apache.tuscany.sca.shell.Command @@ -0,0 +1,17 @@ +# 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. +org.apache.tuscany.sca.diagram.shell.DrawShellCommand diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/helloworld.composite b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/helloworld.composite new file mode 100644 index 0000000000..e0206cd6e8 --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramShellPlugin/src/main/resources/helloworld.composite @@ -0,0 +1,29 @@ + + + + + + + + + -- cgit v1.2.3