diff options
Diffstat (limited to 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java')
-rwxr-xr-x | collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java | 236 |
1 files changed, 180 insertions, 56 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 index dad3518b90..75dd21f5c3 100755 --- 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 @@ -1,6 +1,8 @@ package org.apache.tuscany.sca.impl.layout; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; import org.apache.tuscany.sca.impl.artifacts.Component; import org.w3c.dom.Document; @@ -9,128 +11,250 @@ 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>(); + private ArrayList<Integer> levelCount = new ArrayList<Integer>();//keeps track of levels used in lanes + private HashMap<String, ArrayList<String>> connectedEntities = new HashMap<String, ArrayList<String>>(); + public final int totalLength=0, totalHeight=0; 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"); + NodeList nl = docEle.getElementsByTagName("component"); if(nl != null && nl.getLength() > 0 ) { elts = new Entity[nl.getLength()]; for(int i = 0 ; i < nl.getLength();i++) { + elts[i] = new Entity(); Element nVal = (Element)nl.item(i); + //System.out.println(nVal.hasAttribute("name")); elts[i].setComponentName(nVal.getAttribute("name")); - setReferences(nVal, elts[i]); setServices(nVal, elts[i]); + setReferences(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; - } - } - } - } - + + // //get a nodelist of elements + // NodeList nl2 = docEle.getElementsByTagName("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; + // } + // } + // } + // } + + //correctMap(elts); + positionEntities(elts); - + + print(elts); + return elts; - + } - + + // private void correctMap(Entity[] elts) { + // + // for(Entity ent: elts){ + // for(Iterator it=ent.getReferenceToServiceMap().values().iterator();it.hasNext();){ + // String target = (String)it.next(); + // if(target.startsWith("#")){ + // for(Entity e: elts){ + // if(e.getComponentName().equals(target.substring(1))){ + // + // } + // } + // } + // } + // } + // } + + private void print(Entity[] elts) { + + for(Entity ent: elts){ + System.out.println(ent.getComponentName()+" : "+ent.getLevel()+" : " + +ent.getLane()+" : "+ent.getX()+" : "+ent.getY()); + } + } + private void positionEntities(Entity[] ents){ Entity startEnt = null; for(Entity ent: ents){ - if(ent.getAdjacentEntities().size() != 0){ + if(ent.getAdjacentEntities().size() != 0 || ents.length==1){ setPosition(ent, initPoint, initPoint, 0, 0); levelCount.add(0, 1); startEnt = ent; + System.err.println(ent.getComponentName()); break; } } +// for(Entity ent: ents){ +// if(ent != startEnt){ +// assignPosition(ent, ents); +// } +// } + if(startEnt != null) assignPositions(ents, startEnt); + + } + + private void assignPosition(Entity ent, Entity[] ents) { + } - + 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); + + //for(Entity ent: ents){ + + if(ent.getAdjacentEntities().size()>0){ + System.out.println(ent.getComponentName()); + for(String name: ent.getAdjacentEntities()){ + System.out.println("eee "+name); + for(Entity aEnt: ents){ + i++; + if(name.equalsIgnoreCase(aEnt.getComponentName())){ + int lane = ent.getLane()+1; + if(levelCount.size()<= lane){ + 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); + } + if(i<ents.length) + assignPositions(ents, aEnt); + break; } - assignPositions(ents, aEnt); - break; + } } - i++; } - } + + //} + else{ + ArrayList<String> conns = connectedEntities.get(ent.getComponentName()); + System.err.println(conns.size()); + if(conns.size()>0){ + + for(String conn: conns){ + System.err.println("conn "+conn +" : "+ent.getComponentName()); + for(Entity e: ents){ + if(e.getLane() == -1 && e.getComponentName().equals(conn)){ + + int lane = ent.getLane()-1; + System.err.println(lane); + int level = levelCount.get(lane); + levelCount.add(lane, level+1); + setPosition(e, ent.getX()-spaceX, ent.getY()+spaceY*level, level, lane); + +// if(levelCount.size()<= lane){ +// 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); +// } +// System.err.println(e.getComponentName()); +// assignPositions(ents, e); + break; + } + } + } + } + } + } + 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"); + NodeList nl = nVal.getElementsByTagName("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")); + String target = elt.getAttribute("target"); + String ref = elt.getAttribute("name"); + if(target.contains("/")){ + ent.addToRefToSerMap(ref, target.split("/")[1]); + ent.addAnAdjacentEntity(target.split("/")[0]); + addToConnectedEntities(ent.getComponentName(), target.split("/")[0]); + addToConnectedEntities(target.split("/")[0], ent.getComponentName()); + } + else if(!target.equals("")){ + //adding a #, since this is not the name of the service + //but the component which has only one service + ent.addToRefToSerMap(ref, "#"+target); + ent.addAnAdjacentEntity(target); + addToConnectedEntities(ent.getComponentName(), target); + addToConnectedEntities(target, ent.getComponentName()); + } + + ent.addAReference(ref); + } } } - + + private void addToConnectedEntities(String ent1, String ent2) { + System.err.println(ent1+" : "+ent2); + ArrayList<String> list; + if(connectedEntities.containsKey(ent1)){ + list = connectedEntities.get(ent1); + + } + else{ + list =new ArrayList<String>(); + + } + list.add(ent2); + connectedEntities.put(ent1, list); + } + private void setServices(Element nVal, Entity ent) { - NodeList nl = nVal.getElementsByTagName("sca:service"); + NodeList nl = nVal.getElementsByTagName("service"); if(nl != null && nl.getLength() > 0 ) { for(int i = 0 ; i < nl.getLength();i++) { Element elt = (Element)nl.item(i); @@ -138,10 +262,10 @@ public class EntityBuilder { } } } - + private void setProperties(Element nVal, Entity ent) { - NodeList nl = nVal.getElementsByTagName("sca:property"); + NodeList nl = nVal.getElementsByTagName("property"); if(nl != null && nl.getLength() > 0 ) { for(int i = 0 ; i < nl.getLength();i++) { Element elt = (Element)nl.item(i); @@ -149,7 +273,7 @@ public class EntityBuilder { } } } - - + + } |