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 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java')
-rwxr-xr-xcollaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java236
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 {
}
}
}
-
-
+
+
}