diff options
Diffstat (limited to 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik')
15 files changed, 616 insertions, 94 deletions
diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/component.svg b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/component.svg new file mode 100755 index 0000000000..c1acd47edd --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/component.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript" zoomAndPan="magnify" contentStyleType="text/css" preserveAspectRatio="xMidYMid meet" version="1.0"><rect x="0" y="0" fill-opacity="0.75" fill="#3D59AB" width="200" rx="20" ry="20" height="130" stroke="#104E8B"/><text x="100" font-size="20" dominant-baseline="mathematical" y="70" text-anchor="middle">SCA Component</text></svg>
\ No newline at end of file diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/reference.svg b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/reference.svg new file mode 100755 index 0000000000..00a4f8e33e --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/reference.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript" zoomAndPan="magnify" contentStyleType="text/css" preserveAspectRatio="xMidYMid meet" version="1.0"><polygon fill="#BF3EFF" points="45,15 30,30 0,30 15,15 0,0 30,0 " stroke="#68228B"/></svg>
\ No newline at end of file diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/service.svg b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/service.svg new file mode 100755 index 0000000000..07f0a65b0b --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/service.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript" zoomAndPan="magnify" contentStyleType="text/css" preserveAspectRatio="xMidYMid meet" version="1.0"><polygon fill="#00CD66" points="15,15 0,0 30,0 45,15 30,30 0,30 " stroke="#008B45"/></svg>
\ No newline at end of file diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/test.svg b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/test.svg new file mode 100755 index 0000000000..c1acd47edd --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/output/test.svg @@ -0,0 +1 @@ +<?xml version="1.0" encoding="UTF-8"?><svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" contentScriptType="text/ecmascript" zoomAndPan="magnify" contentStyleType="text/css" preserveAspectRatio="xMidYMid meet" version="1.0"><rect x="0" y="0" fill-opacity="0.75" fill="#3D59AB" width="200" rx="20" ry="20" height="130" stroke="#104E8B"/><text x="100" font-size="20" dominant-baseline="mathematical" y="70" text-anchor="middle">SCA Component</text></svg>
\ No newline at end of file diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Artifact.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Artifact.java index 2b3ed336f5..9a14ecf929 100644 --- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Artifact.java +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Artifact.java @@ -32,9 +32,22 @@ public abstract class Artifact { private String svgNs; private static final String ROUND_CORNER = "20" ; + /** + * Abstract method + * @param document DOM document + * @param svgNs namespace URI + * @param x x-coordinate + * @param y y-coordinate + * @param height height of the shape + * @param width width of the shape + * @return DOM Element + */ public abstract Element addElement(Document document, String svgNs, int x, int y, int height, int width); + public abstract Element addElement(Document document, String svgNs, + int x, int y); + public int getHeight() { return height; } diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Component.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Component.java index 8af5dba7b2..8e7d20146e 100644 --- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Component.java +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Component.java @@ -24,8 +24,8 @@ import org.w3c.dom.Element; public class Component extends Artifact{ -// private static final String WIDTH = "200" ; -// private static final String HEIGHT = "130" ; + public static final int DEFAULT_WIDTH = 200 ; + public static final int DEFAULT_HEIGHT = 130 ; // public Element addElement(Document document, @@ -60,7 +60,9 @@ public class Component extends Artifact{ // return rectangle; // } - + /** + * Create an element with specified height and width + */ public Element addElement(Document document, String svgNs, int x, int y, int height, int width) { @@ -81,6 +83,17 @@ public class Component extends Artifact{ rectangle.setAttributeNS(null, "fill-opacity", "0.75"); return rectangle; } + + /** + * Create an element with default height and width + */ + public Element addElement(Document document, String svgNs, int x, int y) { + + return addElement(document, svgNs, x, y, DEFAULT_HEIGHT, DEFAULT_WIDTH); + + } + + } diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Composite.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Composite.java index 539a18e768..48491efe69 100644 --- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Composite.java +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Composite.java @@ -77,6 +77,11 @@ public class Composite extends Artifact{ return rectangle; } + + //OBSOLETE + public Element addElement(Document document, String svgNs, int x, int y) { + return null; + } diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Property.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Property.java index c751db9b77..0d236ccfaa 100644 --- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Property.java +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Property.java @@ -24,7 +24,8 @@ import org.w3c.dom.Element; public class Property extends Artifact{ -// private static final String WIDTH = "20" ; + public static final int MAXIMUM_HEIGHT = 20 ; //default value + public static final int SPACING = 20 ; //default value // public static Element addPropertyElement(Document document, // String svgNs, int x, int y) { @@ -40,17 +41,18 @@ public class Property extends Artifact{ // return rectangle; // } - + /** + * Property is a square. + * ___ + * | | + * |___| + * + */ public Element addElement(Document document, String svgNs, int x, int y, int height, int width) { - return this.addElement(document, svgNs, x, y, height); - } - - public Element addElement(Document document, String svgNs, int x, int y, - int height) { this.setHeight(height); - this.setWidth(height); + this.setWidth(width); this.setxCoordinate(x); this.setyCoordinate(y); @@ -65,5 +67,19 @@ public class Property extends Artifact{ return rectangle; } + + + public Element addElement(Document document, String svgNs, int x, int y, + int height) { + + return addElement(document, svgNs, x, y, height, height); + } + + + public Element addElement(Document document, String svgNs, int x, int y) { + + + return addElement(document, svgNs, x, y, MAXIMUM_HEIGHT); + } } diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Reference.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Reference.java index 5f49b39ba2..6a3f7ff9d1 100644 --- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Reference.java +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Reference.java @@ -24,6 +24,9 @@ import org.w3c.dom.Element; public class Reference extends Artifact { + public static final int MAXIMUM_HEIGHT = 30 ; //default value + public static final int SPACING = 10 ; //default value + //private static final int COMMON_LENGTH = 20 ; // public static Element addReferenceElement(Document document, String svgNs, int midX, int midY) { @@ -46,45 +49,33 @@ public class Reference extends Artifact { // } // - - public Element addElement(Document document, String svgNs, int x, int y, - int height, int width) { - return this.addElement(document, svgNs, x, y, height); - } - /** - * In a Reference the (x,y) coordinates refers to the outer edge of the polygon - * ______ - * \ \ - * \ \ ___ outer edge - * / / - * /____ / - * - * @param document - * @param svgNs - * @param x - * @param y - * @param height - * @return + * In a Reference the (x,y) coordinates refers to the top corner edge of the polygon + * (x,y)______ + * \ \ + * \ \ + * / / + * /____ / */ public Element addElement(Document document, String svgNs, int x, int y, - int height) { + int height, int width) { + this.setHeight(height); - this.setWidth(height); + this.setWidth(width); this.setxCoordinate(x); this.setyCoordinate(y); - int length = height/2; + int halfOfHeight = height/2; Element polygon = document.createElementNS(svgNs, "polygon"); polygon.setAttributeNS(null, "points", ""+ x +","+y+" " + - ""+ (x-length) +","+(y+length)+" " + - ""+ (x-length*3) +","+(y+length)+" " + - ""+ (x-length*2) +","+(y)+" " + - ""+ (x-length*3) +","+(y-length)+" " + - ""+ (x-length) +","+(y-length)+" " + ""+ (x+2*halfOfHeight) +","+(y)+" " + + ""+ (x+3*halfOfHeight) +","+(y-halfOfHeight)+" " + + ""+ (x+2*halfOfHeight) +","+(y-2*halfOfHeight)+" " + + ""+ (x) +","+(y-2*halfOfHeight)+" " + + ""+ (x+halfOfHeight) +","+(y-halfOfHeight)+" " ); polygon.setAttributeNS(null, "fill", "#BF3EFF"); @@ -92,5 +83,18 @@ public class Reference extends Artifact { return polygon; } + + + public Element addElement(Document document, String svgNs, int x, int y, + int height) { + + return this.addElement(document, svgNs, x, y, height, height*3/2); + } + + + public Element addElement(Document document, String svgNs, int x, int y) { + + return this.addElement(document, svgNs, x, y, MAXIMUM_HEIGHT); + } } diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Service.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Service.java index 997ea90448..986cc1b99c 100644 --- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Service.java +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/artifacts/Service.java @@ -24,7 +24,8 @@ import org.w3c.dom.Element; public class Service extends Artifact{ -// private static final int COMMON_LENGTH = 20 ; + public static final int MAXIMUM_HEIGHT = 30 ; //default value + public static final int SPACING = 10 ; //default value // public static Element addServiceElement(Document document, String svgNs, int midX, int midY) { // // Create the rectangle. @@ -43,45 +44,32 @@ public class Service extends Artifact{ // return polygon; // } - - public Element addElement(Document document, String svgNs, int x, int y, - int height, int width) { - return this.addElement(document, svgNs, x, y, height); - } - /** - * In a Service the (x,y) coordinates refers to the inner edge of the polygon - * ______ + * In a Service the (x,y) coordinates refers to the top corner edge of the polygon + * (x,y)______ * \ \ - * inner edge ____ \ \ + * \ \ * / / * /____ / - * - * @param document - * @param svgNs - * @param x - * @param y - * @param height - * @return */ public Element addElement(Document document, String svgNs, int x, int y, - int height) { + int height, int width) { this.setHeight(height); - this.setWidth(height); + this.setWidth(width); this.setxCoordinate(x); this.setyCoordinate(y); - int length = height/2; + int halfOfHeight = height/2; Element polygon = document.createElementNS(svgNs, "polygon"); polygon.setAttributeNS(null, "points", ""+ x +","+y+" " + - ""+ (x-length) +","+(y-length)+" " + - ""+ (x+length) +","+(y-length)+" " + - ""+ (x+(length*2)) +","+y+" " + - ""+ (x+length) +","+(y+length)+" " + - ""+ (x-length) +","+(y+length)+" " + ""+ (x+2*halfOfHeight) +","+(y)+" " + + ""+ (x+3*halfOfHeight) +","+(y-halfOfHeight)+" " + + ""+ (x+2*halfOfHeight) +","+(y-2*halfOfHeight)+" " + + ""+ (x) +","+(y-2*halfOfHeight)+" " + + ""+ (x+halfOfHeight) +","+(y-halfOfHeight)+" " ); polygon.setAttributeNS(null, "fill", "#00CD66"); @@ -90,5 +78,29 @@ public class Service extends Artifact{ return polygon; } + /** + * Width is 3/2 times of the height + * @param document + * @param svgNs + * @param x + * @param y + * @param height + * @return + */ + public Element addElement(Document document, String svgNs, int x, int y, + int height) { + + return this.addElement(document, svgNs, x, y, height, height*3/2); + } + + /** + * Use default height + */ + public Element addElement(Document document, String svgNs, int x, int y) { + + return this.addElement(document, svgNs, x, y, MAXIMUM_HEIGHT); + + } + } diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/io/XMLReader.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/io/XMLReader.java new file mode 100755 index 0000000000..92099a7104 --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/io/XMLReader.java @@ -0,0 +1,28 @@ +package org.apache.tuscany.sca.impl.io; + +import java.io.IOException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +public class XMLReader { + + //get the factory + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + private Document dom; + + public Document parseXMLFile(String file) throws Exception + { + //Using factory get an instance of document builder + DocumentBuilder db = dbf.newDocumentBuilder(); + + //parse using builder to get DOM representation of the XML file + dom = db.parse(file); + + return dom; + } +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java new file mode 100755 index 0000000000..34c750bbce --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java @@ -0,0 +1,246 @@ +package org.apache.tuscany.sca.impl.layout; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import org.apache.tuscany.sca.impl.artifacts.Component; +import org.apache.tuscany.sca.impl.artifacts.Property; +import org.apache.tuscany.sca.impl.artifacts.Reference; +import org.apache.tuscany.sca.impl.artifacts.Service; + +/** + * Represents an unit (a component including its references, services, properties + * and adjacent units) in the diagram. + * @author nirmal + * + */ +public class Entity { + + private String componentName; + private int X, Y, level, lane, refHeight, serHeight, propLength; + + public static final int defaultNoOfSers= Component.DEFAULT_HEIGHT / (Service.MAXIMUM_HEIGHT+Service.SPACING); + public static final int defaultNoOfRefs= Component.DEFAULT_HEIGHT / (Reference.MAXIMUM_HEIGHT+Reference.SPACING); //same value for defaultNoOfSers + public static final int defaultNoOfProps= Component.DEFAULT_WIDTH / (Property.MAXIMUM_HEIGHT+Property.SPACING); + + private HashMap<String, String> referenceToServiceMap = new HashMap<String, String>(); + + private ArrayList<String> references = new ArrayList<String>(); + private ArrayList<String> refProperties = new ArrayList<String>(); + + private ArrayList<String> services = new ArrayList<String>(); + private ArrayList<String> serProperties = new ArrayList<String>(); + + private ArrayList<String> properties = new ArrayList<String>(); + private ArrayList<String> propProperties = new ArrayList<String>(); + + private HashSet<String> adjacentEntities = new HashSet<String>(); + + + public Entity(){ + + + } + + public void referenceHeight(){ + if(Entity.defaultNoOfRefs < getNoOfRefs()){ + + refHeight = (Component.DEFAULT_HEIGHT / getNoOfRefs()) - Reference.SPACING; + } + else + refHeight = Reference.MAXIMUM_HEIGHT; + } + + public void serviceHeight(){ + if(Entity.defaultNoOfSers < getNoOfSers()){ + + serHeight = (Component.DEFAULT_HEIGHT / getNoOfSers()) - Service.SPACING; + } + else + serHeight = Service.MAXIMUM_HEIGHT; + } + + public void propertyLength(){ + if(Entity.defaultNoOfProps < getNoOfProps()){ + + propLength = (Component.DEFAULT_WIDTH / getNoOfProps()) - Property.SPACING; + } + else + propLength = Property.MAXIMUM_HEIGHT; + } + + public int getNoOfRefs(){ + return references.size(); + } + + public int getNoOfSers(){ + return services.size(); + } + + public int getNoOfProps(){ + return properties.size(); + } + + public int getNoOfAdjacentUnits(){ + return adjacentEntities.size(); + } + + /** + * Put a value to referenceToServiceMap + * @param ref + * @param ser + * @return successfully added or not + */ + //assumption there can not be two services for the same reference + public boolean addToRefToSerMap(String ref, String ser){ + ref = ref.toLowerCase(); + ser = ser.toLowerCase(); + + if (referenceToServiceMap.containsKey(ref)) + return false; + + referenceToServiceMap.put(ref, ser); + return true; + } + + /** + * Retrieve a service name for a given reference + * @param ref + * @return service name + */ + public String getSerOfRef(String ref){ + ref = ref.toLowerCase(); + + if (!referenceToServiceMap.containsKey(ref)) + return null; + + return referenceToServiceMap.get(ref); + } + + public void addAService(String serName){ + serName = serName.toLowerCase(); + services.add(serName); + + } + + public void addAReference(String refName){ + refName = refName.toLowerCase(); + references.add(refName); + + } + + public void addAProperty(String propName){ + propName = propName.toLowerCase(); + properties.add(propName); + + } + + public void addAnAdjacentEntity(String x){ + + adjacentEntities.add(x); + + } + + public void setComponentName(String componentName) { + this.componentName = componentName; + } + public String getComponentName() { + return componentName; + } + + public HashMap<String, String> getReferenceToServiceMap() { + return referenceToServiceMap; + } + public void setReferenceToServiceMap( + HashMap<String, String> referenceToServiceMap) { + this.referenceToServiceMap = referenceToServiceMap; + } + public ArrayList<String> getProperties() { + return properties; + } + public void setProperties(ArrayList<String> properties) { + this.properties = properties; + } + public HashSet<String> getAdjacentEntities() { + return adjacentEntities; + } + public void setAdjacentEntities(HashSet<String> adjacentEntities) { + this.adjacentEntities = adjacentEntities; + } + public void setServices(ArrayList<String> services) { + this.services = services; + } + public ArrayList<String> getServices() { + return services; + } + + public int getX() { + return X; + } + + public void setX(int x) { + X = x; + } + + public int getY() { + return Y; + } + + public void setY(int y) { + Y = y; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public int getLane() { + return lane; + } + + public void setLane(int lane) { + this.lane = lane; + } + + public ArrayList<String> getRefProperties() { + return refProperties; + } + + public void setRefProperties(ArrayList<String> refProperties) { + this.refProperties = refProperties; + } + + public ArrayList<String> getSerProperties() { + return serProperties; + } + + public void setSerProperties(ArrayList<String> serProperties) { + this.serProperties = serProperties; + } + + public ArrayList<String> getPropProperties() { + return propProperties; + } + + public void setPropProperties(ArrayList<String> propProperties) { + this.propProperties = propProperties; + } + + public int getRefHeight() { + return refHeight; + } + + public int getSerHeight() { + return serHeight; + } + + public int getPropLength() { + return propLength; + } + +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java new file mode 100755 index 0000000000..dad3518b90 --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java @@ -0,0 +1,155 @@ +package org.apache.tuscany.sca.impl.layout; + +import java.util.ArrayList; + +import org.apache.tuscany.sca.impl.artifacts.Component; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class EntityBuilder { + + private Document dom; + private final int initPoint = 100; + private final int spaceX = Component.DEFAULT_WIDTH*2; + private final int spaceY = Component.DEFAULT_HEIGHT*2; + private ArrayList<Integer> levelCount = new ArrayList<Integer>(); + + public EntityBuilder(Document aDom){ + dom = aDom; + } + + public Entity[] buildEntities(){ + Entity[] elts = null; + //get the root element + Element docEle = dom.getDocumentElement(); + + //get a nodelist of elements + NodeList nl = docEle.getElementsByTagName("sca:component"); + if(nl != null && nl.getLength() > 0 ) { + elts = new Entity[nl.getLength()]; + for(int i = 0 ; i < nl.getLength();i++) { + Element nVal = (Element)nl.item(i); + elts[i].setComponentName(nVal.getAttribute("name")); + setReferences(nVal, elts[i]); + setServices(nVal, elts[i]); + setProperties(nVal, elts[i]); + elts[i].referenceHeight(); + elts[i].serviceHeight(); + elts[i].propertyLength(); + } + } + + //get a nodelist of elements + NodeList nl2 = docEle.getElementsByTagName("sca:wire"); + if(nl2 != null && nl2.getLength() > 0 ) { + + for(int i = 0 ; i < nl2.getLength();i++) { + Element nVal = (Element)nl2.item(i); + String[] source = splitValues(nVal.getAttribute("source")); + String[] target = splitValues(nVal.getAttribute("target")); + + for(Entity ent: elts){ + if(ent.getComponentName().equalsIgnoreCase(source[0])){ + ent.addAnAdjacentEntity(target[0]); + ent.addToRefToSerMap(source[1], target[1]); + break; + } + } + } + } + + positionEntities(elts); + + return elts; + + } + + private void positionEntities(Entity[] ents){ + Entity startEnt = null; + for(Entity ent: ents){ + if(ent.getAdjacentEntities().size() != 0){ + setPosition(ent, initPoint, initPoint, 0, 0); + levelCount.add(0, 1); + startEnt = ent; + break; + } + } + + if(startEnt != null) + assignPositions(ents, startEnt); + + } + + private void assignPositions(Entity[] ents, Entity ent){ + int i=0; + for(String name: ent.getAdjacentEntities()){ + for(Entity aEnt: ents){ + if(name.equalsIgnoreCase(aEnt.getComponentName())){ + int lane = ent.getLane()+1; + if(levelCount.get(lane) != null){ + levelCount.add(lane, 1); + setPosition(aEnt, ent.getX()+spaceX, ent.getY(), 0, lane); + } + else{ + int level = levelCount.get(lane); + levelCount.add(lane, level+1); + setPosition(aEnt, ent.getX()+spaceX, ent.getY()+spaceY*level, level, lane); + } + assignPositions(ents, aEnt); + break; + } + } + i++; + } + } + + private void setPosition(Entity ent, int x, int y, int level, int lane){ + ent.setX(x); + ent.setY(y); + ent.setLevel(level); + ent.setLane(lane); + } + + + private String[] splitValues(String str){ + return str.split("/"); + } + + private void setReferences(Element nVal, Entity ent) { + + NodeList nl = nVal.getElementsByTagName("sca:reference"); + if(nl != null && nl.getLength() > 0 ) { + for(int i = 0 ; i < nl.getLength();i++) { + Element elt = (Element)nl.item(i); + ent.addAReference(elt.getAttribute("name")); + } + } + } + + private void setServices(Element nVal, Entity ent) { + + NodeList nl = nVal.getElementsByTagName("sca:service"); + if(nl != null && nl.getLength() > 0 ) { + for(int i = 0 ; i < nl.getLength();i++) { + Element elt = (Element)nl.item(i); + ent.addAService(elt.getAttribute("name")); + } + } + } + + private void setProperties(Element nVal, Entity ent) { + + NodeList nl = nVal.getElementsByTagName("sca:property"); + if(nl != null && nl.getLength() > 0 ) { + for(int i = 0 ; i < nl.getLength();i++) { + Element elt = (Element)nl.item(i); + ent.addAProperty(elt.getAttribute("name")); + } + } + } + + + +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java new file mode 100755 index 0000000000..1574d1247f --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java @@ -0,0 +1,26 @@ +package org.apache.tuscany.sca.impl.layout; + +import java.util.Iterator; + +import org.apache.tuscany.sca.impl.artifacts.Component; +import org.apache.tuscany.sca.impl.artifacts.Reference; + +public class PropertyAllocator { + Entity entity; + + public PropertyAllocator(Entity e) { + entity = e; + } + + public void allocatePropertiesOfRefs(){ + int height=0; + + + for(Iterator it=entity.getReferenceToServiceMap().keySet().iterator();it.hasNext();){ + String ref = it.next(); + + } + } + + +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/main/SVGDiagramGenerator.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/main/SVGDiagramGenerator.java index 6d17547d66..bce24de749 100644 --- a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/main/SVGDiagramGenerator.java +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/main/SVGDiagramGenerator.java @@ -1,5 +1,5 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one +un * 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 @@ -44,7 +44,7 @@ import org.apache.tuscany.sca.impl.artifacts.Wire; public class SVGDiagramGenerator { private static final File outFile = new File(System.getProperty("user.dir") - + "/output/test.svg"); + + "/output/reference.svg"); /** * @param args @@ -83,15 +83,15 @@ public class SVGDiagramGenerator { Wire edge1 = new Wire(); Wire edge2 = new Wire(); - Element rectangle1 = comp1.addElement(doc, svgNS, 50, 20, 130, 200); - Element text1 = Text.addTextElement(doc, svgNS, 150, 90, "SCA Component"); + Element rectangle1 = comp1.addElement(doc, svgNS, 0, 0, 130, 200); + Element text1 = Text.addTextElement(doc, svgNS, 100, 70, "SCA Component"); Element property1 = prop1.addElement(doc, svgNS, 120, 10, 20); Element property2 = prop2.addElement(doc, svgNS, 160, 10, 20); - Element polygon1 = ser1.addElement(doc, svgNS, 50, 85, 30); + Element polygon1 = ser1.addElement(doc, svgNS, 15, 15, 30); - Element polygon2 = ref1.addElement(doc, svgNS, 270, 60, 30); + Element polygon2 = ref1.addElement(doc, svgNS, 45, 15, 30); Element polygon3 = ref2.addElement(doc, svgNS, 270, 110, 30); //Element wire1 = edge1.addElement(doc, svgNS, 270, 60, 390, 85); @@ -112,37 +112,37 @@ public class SVGDiagramGenerator { //Element wire2 = Wire.addWireElement(doc, svgNS, 270, 110, 390, 265); // Set the width and height attributes on the root 'svg' element. - svgRoot.setAttributeNS(null, "width", "650"); - svgRoot.setAttributeNS(null, "height", "450"); +// svgRoot.setAttributeNS(null, "width", "200"); +// svgRoot.setAttributeNS(null, "height", "130"); Element composi = composite.addElement(doc, svgNS, 0, 0, 350, 650); Element text4 = Text.addTextElement(doc, svgNS, 75, 320, "Composite"); - svgRoot.appendChild(composi); - svgRoot.appendChild(text4); +// svgRoot.appendChild(composi); +// svgRoot.appendChild(text4); - // Attach the rectangle to the root 'svg' element. - svgRoot.appendChild(rectangle1); - svgRoot.appendChild(text1); - svgRoot.appendChild(property1); - svgRoot.appendChild(property2); - svgRoot.appendChild(polygon1); +// // Attach the rectangle to the root 'svg' element. +// svgRoot.appendChild(rectangle1); +// svgRoot.appendChild(text1); +// svgRoot.appendChild(property1); +// svgRoot.appendChild(property2); +// svgRoot.appendChild(polygon1); svgRoot.appendChild(polygon2); - svgRoot.appendChild(polygon3); - - svgRoot.appendChild(rectangle2); - svgRoot.appendChild(text2); - svgRoot.appendChild(polygon4); - //svgRoot.appendChild(polygon3); - - svgRoot.appendChild(rectangle3); - svgRoot.appendChild(text3); - svgRoot.appendChild(polygon5); - - svgRoot.appendChild(wire1); - svgRoot.appendChild(wire2); - //svgRoot.setAttributeNS(null, "fill", "#CAE1FF"); - //System.out.println(doc.getDocumentElement().getAttribute("width")); +// svgRoot.appendChild(polygon3); +// +// svgRoot.appendChild(rectangle2); +// svgRoot.appendChild(text2); +// svgRoot.appendChild(polygon4); +// //svgRoot.appendChild(polygon3); +// +// svgRoot.appendChild(rectangle3); +// svgRoot.appendChild(text3); +// svgRoot.appendChild(polygon5); +// +// svgRoot.appendChild(wire1); +// svgRoot.appendChild(wire2); +// //svgRoot.setAttributeNS(null, "fill", "#CAE1FF"); +// //System.out.println(doc.getDocumentElement().getAttribute("width")); return doc; } |