diff options
author | nirmal070125 <nirmal070125@13f79535-47bb-0310-9956-ffa450edef68> | 2011-06-13 07:37:39 +0000 |
---|---|---|
committer | nirmal070125 <nirmal070125@13f79535-47bb-0310-9956-ffa450edef68> | 2011-06-13 07:37:39 +0000 |
commit | b8d829dd982e8c4fa170f8bb8b095e8a1be8115e (patch) | |
tree | 98417bfacd7e8acf00c417a6c2efcf36a7916de9 /collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram | |
parent | 4793edeb2e0b18059c965759c78f06c6b77faf67 (diff) |
Another version of layout algorithm and diagram creation
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1135039 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram')
-rwxr-xr-x | collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java | 174 |
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); + + + } |