diff options
Diffstat (limited to '')
-rwxr-xr-x | collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java | 155 |
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")); + } + } + } + + + +} |