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.java199
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());
}