summaryrefslogtreecommitdiffstats
path: root/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-xcollaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java155
1 files changed, 155 insertions, 0 deletions
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"));
+ }
+ }
+ }
+
+
+
+}