diff options
Diffstat (limited to 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java')
-rwxr-xr-x | collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/diagram/DiagramGenerator.java | 199 |
1 files changed, 182 insertions, 17 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 031ff25e95..742575f501 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 @@ -26,12 +26,16 @@ 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.DashedWire; +import org.apache.tuscany.sca.impl.artifacts.Layer; +import org.apache.tuscany.sca.impl.artifacts.NormalWire; 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.ComponentEntity; +import org.apache.tuscany.sca.impl.layout.CompositeEntity; import org.apache.tuscany.sca.impl.layout.Entity; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; @@ -39,10 +43,11 @@ import org.w3c.dom.Element; public class DiagramGenerator { - private Entity[] entities; - private int height, width; + private CompositeEntity comp; +// private Entity[] entities; +// private int height, width; private Document doc; - private String compositeName; +// private String compositeName; private String svgNS ; private Element svgRoot; private ArrayList<Reference> refs= new ArrayList<Reference>(); @@ -52,17 +57,20 @@ public class DiagramGenerator { * Constructor to generate a SVG diagram for compositeName * with a given height and a width and consisting of entities. */ - public DiagramGenerator(Entity[] entities, int height, int width, String compositeName) { - this.entities = entities; - this.height = height; - this.width = width; - this.compositeName = compositeName; + public DiagramGenerator(CompositeEntity comp) { + this.comp = comp; +// this.entities = comp.getComponentList(); +// this.height = comp.getHeight(); +// this.width = comp.getWidth(); +// this.compositeName = comp.getName(); +// comp.getServices(); } /** * Draws the diagram. */ public Document buildSVGDocument(){ + DOMImplementation impl = SVGDOMImplementation.getDOMImplementation(); svgNS = SVGDOMImplementation.SVG_NAMESPACE_URI; doc = impl.createDocument(svgNS, "svg", null); @@ -70,26 +78,82 @@ public class DiagramGenerator { // Get the root element (the 'svg' element). svgRoot = doc.getDocumentElement(); +// svgRoot.setAttributeNS(null, "width", ""+(width+400)); +// svgRoot.setAttributeNS(null, "height", ""+(height+200)); + + addLayer(); addComposite(); - for(Entity ent: entities){ + + for(Entity ent: comp.getComponentList()){ + addComponent(ent); addService(ent); addReference(ent); addProperties(ent); } - addConnections(); + addCompositeService(comp); + addCompositeReference(comp); + addCompositeProperties(comp); + + addComponentConnections(); + addReferencePromotion(); + addServicePromotion(); return doc; } + + + private void addLayer() { + + Layer outerLayer = new Layer(); + Element layerElt = outerLayer.addElement(doc, svgNS, 0, 0, comp.getHeight()+200, comp.getWidth()+400); + svgRoot.appendChild(layerElt); + } + + private void addReferencePromotion() { + + for(Iterator it= comp.getPromoteAReference().entrySet().iterator(); + it.hasNext();){ + Entry entry = (Entry) it.next(); + String compositeRef = (String)entry.getKey(); + String componentRef = (String)entry.getValue(); + + Reference r1 = getRef(compositeRef); + Reference r2 = getRef(componentRef); + + if(r1 != null && r2 != null){ + addWire(r2, r1); + } + } + } + + private void addServicePromotion() { + + for(Iterator it= comp.getPromoteAService().entrySet().iterator(); + it.hasNext();){ + Entry entry = (Entry) it.next(); + String compositeSer = (String)entry.getKey(); + String componentSer = (String)entry.getValue(); + + Service s1 = getSer(compositeSer); + Service s2 = getSer(componentSer); + + if(s1 != null && s2 != null){ + addWire(s1, s2); + } + } + } + + /** * Connects references to services. */ - private void addConnections() { + private void addComponentConnections() { - for(Entity ent: entities){ + for(Entity ent: comp.getComponentList()){ if(ent instanceof ComponentEntity){ for(Iterator it= ((ComponentEntity)ent).getReferenceToServiceMap().entrySet().iterator(); @@ -111,10 +175,24 @@ public class DiagramGenerator { private void addWire(Reference r, Service s) { - Wire edge = new Wire(); + Wire edge = new NormalWire(); Element wire = edge.addElement(doc, svgNS, r, s); svgRoot.appendChild(wire); } + + private void addWire(Service s1, Service s2) { + + DashedWire edge = new DashedWire(); + Element wire = edge.addElement(doc, svgNS, s1, s2); + svgRoot.appendChild(wire); + } + + private void addWire(Reference r1, Reference r2) { + + DashedWire edge = new DashedWire(); + Element wire = edge.addElement(doc, svgNS, r1, r2); + svgRoot.appendChild(wire); + } private Service getSer(String ser) { @@ -204,7 +282,7 @@ public class DiagramGenerator { } for(String eName: e.getAdjacentEntities()){ - for(Entity ent: entities){ + for(Entity ent: comp.getComponentList()){ if(ent.getName().equals(eName)){ for(String s : sers){ @@ -240,6 +318,19 @@ public class DiagramGenerator { } } + //adding references which are not connected to any service + for(String ref : refs){ + for(int i=0; i<orderedRefs.length ; i++){ + if(ref.equals(orderedRefs[i])){ + break; + } + else if(orderedRefs[i] == null){ + orderedRefs[i] = ref; + break; + } + } + } + return orderedRefs; } @@ -269,10 +360,83 @@ public class DiagramGenerator { sers.add(serve); } } + + private void addCompositeService(CompositeEntity comp) { + + int serHeight = comp.getSerHeight(); + int x= comp.getX()-(serHeight*2/3); + int y= comp.getY() + Service.SPACING_FOR_COMPOSITE; + System.err.println(serHeight); + System.out.println("''''''"+((CompositeEntity)comp).getName() +" '''''' "+ comp.getServices().size()); + for(String ser: comp.getServices()){ + + Service serve= new Service(); + Element polygon = serve.addElement(doc, svgNS, x, y, serHeight); + Element text; + if(!ser.endsWith("Impl")) + text = Text.addTextElement(doc, svgNS, x, y+serHeight/2, ser); + else + text = Text.addTextElement(doc, svgNS, x, y+serHeight/2, ""); + + svgRoot.appendChild(polygon); + svgRoot.appendChild(text); + + y += (serHeight + Service.SPACING_FOR_COMPOSITE); + + serve.setName(ser); + serve.setContainerName(comp.getName()); + sers.add(serve); + } + } + + private void addCompositeReference(CompositeEntity comp) { + + int refHeight = comp.getRefHeight(); + int x=(comp.getX()+comp.getWidth())-(refHeight*2/3); + int y=comp.getY() + Reference.SPACING_FOR_COMPOSITE; + + for(String ref: comp.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_FOR_COMPOSITE); + + refer.setName(ref); + refer.setContainerName(comp.getName()); + refs.add(refer); + + } + + } + + private void addCompositeProperties(CompositeEntity comp) { + int propLen = comp.getPropLength(); + int x= comp.getX() + Property.SPACING_FOR_COMPOSITE; + int y= comp.getY()-propLen/2; + + for(String prop: comp.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_FOR_COMPOSITE); + + pro.setName(prop); + pro.setContainerName(comp.getName()); + } + } + private void addComponent(Entity ent) { Component comp = new Component(); + System.err.println(ent.getX()); 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), @@ -287,13 +451,14 @@ public class DiagramGenerator { 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); + + Element composi = composite.addElement(doc, svgNS, comp.getX(), comp.getY(), comp.getHeight(), comp.getWidth()); + Element text = Text.addTextElement(doc, svgNS, comp.getX() +comp.getWidth()/2, comp.getY() +20, comp.getName()); svgRoot.appendChild(composi); svgRoot.appendChild(text); - composite.setName(compositeName); + composite.setName(comp.getName()); } |