summaryrefslogtreecommitdiffstats
path: root/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java
diff options
context:
space:
mode:
Diffstat (limited to 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java')
-rwxr-xr-xcollaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java174
1 files changed, 173 insertions, 1 deletions
diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java
index b4f425aeed..6b01b16a48 100755
--- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java
+++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java
@@ -1,16 +1,188 @@
package org.apache.tuscany.sca.impl.diagram;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import org.apache.batik.dom.svg.SVGDOMImplementation;
+import org.apache.tuscany.sca.impl.artifacts.Component;
+import org.apache.tuscany.sca.impl.artifacts.Composite;
+import org.apache.tuscany.sca.impl.artifacts.Property;
+import org.apache.tuscany.sca.impl.artifacts.Reference;
+import org.apache.tuscany.sca.impl.artifacts.Service;
+import org.apache.tuscany.sca.impl.artifacts.Text;
+import org.apache.tuscany.sca.impl.artifacts.Wire;
import org.apache.tuscany.sca.impl.layout.Entity;
+import org.w3c.dom.DOMImplementation;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
public class DiagramGenerator {
Entity[] entities;
+ int height, width;
+ Document doc;
+ String compositeName;
+ String svgNS ;
+ Element svgRoot;
+ ArrayList<Reference> refs= new ArrayList<Reference>();
+ ArrayList<Service> sers= new ArrayList<Service>();
- public DiagramGenerator(Entity[] entities) {
+ public DiagramGenerator(Entity[] entities, int height, int width, String compositeName) {
this.entities = entities;
+ this.height = height;
+ this.width = width;
+ this.compositeName = compositeName;
}
+ public Document buildSVGDocument(){
+ DOMImplementation impl = SVGDOMImplementation.getDOMImplementation();
+ svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI;
+ doc = impl.createDocument(svgNS, "svg", null);
+
+ // Get the root element (the 'svg' element).
+ svgRoot = doc.getDocumentElement();
+
+ addComposite();
+ for(Entity ent: entities){
+ addComponent(ent);
+ addService(ent);
+ addReference(ent);
+ addProperties(ent);
+ }
+
+ for(Entity ent: entities){
+ for(Iterator it= ent.getReferenceToServiceMap().entrySet().iterator();it.hasNext();){
+ Entry entry = (Entry) it.next();
+ String ref = (String)entry.getKey();
+ String ser = (String)entry.getValue();
+
+ Reference r = getRef(ref);
+ Service s = getSer(ser);
+
+ if(r != null && s != null){
+ addWire(r,s);
+ }
+ }
+ }
+ return doc;
+ }
+ private void addWire(Reference r, Service s) {
+
+ Wire edge = new Wire();
+ Element wire = edge.addElement(doc, svgNS, r, s);
+ svgRoot.appendChild(wire);
+ }
+
+ private Service getSer(String ser) {
+
+ for(Service s: sers){
+ if(s.getContainerName().equals(ser) || s.getName().equals(ser)){
+ return s;
+ }
+ }
+ return null;
+ }
+
+ private Reference getRef(String ref) {
+
+ for(Reference r: refs){
+ if(r.getContainerName().equals(ref) || r.getName().equals(ref)){
+ return r;
+ }
+ }
+ return null;
+ }
+
+ private void addProperties(Entity ent) {
+ int propLen = ent.getPropLength();
+ int x=ent.getX()+Property.SPACING;
+ int y= ent.getY()-propLen/2;
+
+ for(String prop: ent.getProperties()){
+ Property pro = new Property();
+ Element property = pro.addElement(doc, svgNS, x, y, propLen);
+ Element text = Text.addTextElement(doc, svgNS, x, y, prop);
+
+ svgRoot.appendChild(property);
+ svgRoot.appendChild(text);
+
+ x += (propLen + Property.SPACING);
+
+ pro.setName(prop);
+ pro.setContainerName(ent.getComponentName());
+ }
+ }
+
+ private void addReference(Entity ent) {
+ int refHeight = ent.getRefHeight();
+ int x=(ent.getX()+ent.getWidth())-(refHeight*2/3);
+ int y=ent.getY()+Reference.SPACING;
+
+ for(String ref: ent.getReferences()){
+ Reference refer= new Reference();
+ Element polygon = refer.addElement(doc, svgNS, x, y, refHeight);
+ Element text = Text.addTextElement(doc, svgNS, x, y+refHeight/2, ref);
+ svgRoot.appendChild(polygon);
+ svgRoot.appendChild(text);
+
+ y += (refHeight + Reference.SPACING);
+
+ refer.setName(ref);
+ refer.setContainerName(ent.getComponentName());
+ refs.add(refer);
+
+ }
+ }
+
+ private void addService(Entity ent) {
+ int serHeight = ent.getSerHeight();
+ int x=ent.getX()-(serHeight*2/3);
+ int y=ent.getY()+Service.SPACING;
+
+ for(String ser: ent.getServices()){
+ Service serve= new Service();
+ Element polygon = serve.addElement(doc, svgNS, x, y, serHeight);
+ Element text = Text.addTextElement(doc, svgNS, x, y+serHeight/2, ser);
+ svgRoot.appendChild(polygon);
+ svgRoot.appendChild(text);
+
+ y += (serHeight + Service.SPACING);
+
+ serve.setName(ser);
+ serve.setContainerName(ent.getComponentName());
+ sers.add(serve);
+ }
+ }
+
+ private void addComponent(Entity ent) {
+
+ Component comp = new Component();
+ Element com = comp.addElement(doc, svgNS, ent.getX(), ent.getY(),
+ ent.getHeight(), ent.getWidth());
+ Element text = Text.addTextElement(doc, svgNS, ent.getX()+(ent.getWidth()/4),
+ ent.getY()+(ent.getHeight()+Component.TEXT_SPACING), ent.getComponentName());
+
+ svgRoot.appendChild(com);
+ svgRoot.appendChild(text);
+
+ comp.setName(ent.getComponentName());
+ }
+
+ private void addComposite() {
+
+ Composite composite = new Composite();
+ Element composi = composite.addElement(doc, svgNS, 0, 0, height, width);
+ Element text = Text.addTextElement(doc, svgNS, width/2, 20, compositeName);
+
+ svgRoot.appendChild(composi);
+ svgRoot.appendChild(text);
+
+ composite.setName(compositeName);
+
+
+ }