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 | 661 |
1 files changed, 503 insertions, 158 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 e8c7bf76e8..4157f93409 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 @@ -38,8 +38,9 @@ public class EntityBuilder { private int totalWidth=0; private int totalHeight=0; private ComponentEntity startEnt = null; - private String compositeName; - ComponentEntity[] elts = null; + //private String compositeName; + + CompositeEntity composite = null; /** * Constructor which initiates the DOM document @@ -49,6 +50,263 @@ public class EntityBuilder { dom = aDom; } + public CompositeEntity buildCompositeEntity(){ + + //get the root element + Element docEle = dom.getDocumentElement(); + + String compositeName; + compositeName = docEle.getAttribute("name"); + //System.out.println("compositeName "+compositeName); + + ComponentEntity[] comps = buildComponentEntities(docEle); + + composite = new CompositeEntity(compositeName); + + setParent(comps, composite); + + //System.out.println("ComponentEntity "+comps[0].getLevel()); + int[][] conns = buildConnectionMatrix(comps); + + composite.setComponentList(comps); + composite.setConnections(conns); + + LayoutBuilder buildLayout = new LayoutBuilder(comps , conns); + buildLayout.buildEntities(); + + + System.out.println("conns "+conns[0][0]); + + + buildCompositeService(docEle, composite); + buildCompositeReference(docEle, composite); + buildCompositeProperty(docEle, composite); + + composite.setAttributes(); + + return composite; + } + +// private void assignCoordinates() { +// +// for(Entity ent: elts){ +// ent.setX(ent.getParent().getX() + ent.getStartPosition()); +// ent.setY(ent.getParent().getY() + ent.getStartPosition()/2); +// } +// } + + private void setParent(ComponentEntity[] comps, Entity parent) { + + for(ComponentEntity comp: comps){ + comp.setParent(parent); + } + } + + private void buildCompositeService(Element docEle, + CompositeEntity composite) { + + NodeList nl = docEle.getElementsByTagName("service"); + System.err.println("^^^^^^^^^ "+nl.getLength()); + if(nl != null && nl.getLength() > 0 ) { + + for(int i = 0 ; i < nl.getLength();i++) { + + Element elt = (Element)nl.item(i); + + if(elt.getParentNode().getNodeName().equals("composite")){ + String compositeSer = elt.getAttribute("name"); + composite.addAService(compositeSer); + + String target = elt.getAttribute("promote"); + + String service, serviceComp; + String[] arr1 = extractComp(target); + serviceComp = arr1[0]; + service = arr1[1]; + + if(service == null){ + composite.addToPromoteAService(compositeSer, serviceComp); + } + else{ + composite.addToPromoteAService(compositeSer, service); + } + } + + } + } + } + + private void buildCompositeReference(Element docEle, + CompositeEntity composite) { + + NodeList nl = docEle.getElementsByTagName("reference"); + //System.out.println("^^^^^^^^^ "+nl.getLength()); + if(nl != null && nl.getLength() > 0 ) { + + for(int i = 0 ; i < nl.getLength();i++) { + + Element elt = (Element)nl.item(i); + + if(elt.getParentNode().getNodeName().equals("composite")){ + String compositeRef = elt.getAttribute("name"); + composite.addAReference(compositeRef); + + String target = elt.getAttribute("promote"); + + String reference, referenceComp; + String[] arr1 = extractComp(target); + referenceComp = arr1[0]; + reference = arr1[1]; + + if(reference == null){ + composite.addToPromoteAReference(compositeRef, referenceComp); + } + else{ + composite.addToPromoteAReference(compositeRef, reference); + } + + } + } + } + } + + private void buildCompositeProperty(Element docEle, + CompositeEntity composite) { + + NodeList nl = docEle.getElementsByTagName("property"); + //System.out.println("^^^^^^^^^ "+nl.getLength()); + if(nl != null && nl.getLength() > 0 ) { + + for(int i = 0 ; i < nl.getLength();i++) { + + Element elt = (Element)nl.item(i); + + if(elt.getParentNode().getNodeName().equals("composite")){ + String compositeProp = elt.getAttribute("name"); + composite.addAProperty(compositeProp); + } + } + } + } + + private int[][] buildConnectionMatrix(ComponentEntity[] comps) { + + int[][] connections = new int[comps.length][comps.length]; + connections = initConnections(connections); + +// //sec. 5.4 in the spec +// NodeList nl = docEle.getElementsByTagName("wire"); +// //System.out.println("^^^^^^^^^ "+nl.getLength()); +// if(nl != null && nl.getLength() > 0 ) { +// +// for(int i = 0 ; i < nl.getLength();i++) { +// +// Element elt = (Element)nl.item(i); +// +// String source = elt.getAttribute("source"); +// String target = elt.getAttribute("target"); +// +// String service, serviceComp, reference, referenceComp; +// +// String[] arr1 = extractComp(target); +// serviceComp = arr1[0]; +// service = arr1[1]; +// +// String[] arr2 = extractComp(source); +// referenceComp = arr2[0]; +// reference = arr2[1]; + +// //System.out.println("^^^^^^^^^ "+source+" ::: "+target); +// if(target.contains("/")){ +// String[] arr = target.split("/"); +// serviceComp = arr[0]; +// service = arr[1]; +// } +// else{ +// serviceComp = target; +// service = null; +// } +// +// if(source.contains("/")){ +// String[] arr = source.split("/"); +// referenceComp = arr[0]; +// reference = arr[1]; +// } +// else{ +// referenceComp = source; +// reference = null; +// } +// //sec. 5.4 in the spec +// NodeList nl = docEle.getElementsByTagName("wire"); +// //System.out.println("^^^^^^^^^ "+nl.getLength()); +// if(nl != null && nl.getLength() > 0 ) { +// +// for(int i = 0 ; i < nl.getLength();i++) { +// +// Element elt = (Element)nl.item(i); +// +// String source = elt.getAttribute("source"); +// String target = elt.getAttribute("target"); +// +// String service, serviceComp, reference, referenceComp; +// +// String[] arr1 = extractComp(target); +// serviceComp = arr1[0]; +// service = arr1[1]; +// +// String[] arr2 = extractComp(source); +// referenceComp = arr2[0]; +// reference = arr2[1]; + + for(Entity ent: comps){ + for(String name: ent.getAdjacentEntities()){ + ComponentEntity e2 = findEntity(comps, name); + if(ent != null && e2 != null){ + System.out.println("^^^^^^^^^ "+e2.getName()); + connections[ent.getId()][e2.getId()] = 1; + } + } + + } +// ComponentEntity e1 = findEntity(comps, referenceComp); +// ComponentEntity e2 = findEntity(comps, serviceComp); +// +// System.out.println("^^^^^^^^^ "+e1.getName()); +// if(e1 != null && e2 != null){ +// System.out.println("^^^^^^^^^ "+e1.getId()); +// connections[e1.getId()][e2.getId()] = 1; +// createConnection(e1, reference, serviceComp, service); +// } +// } +// } +// + return connections; + } + + private String[] extractComp(String str) { + + String[] arr = new String[2]; + + if(str.contains("/")){ + arr = str.split("/"); + } + else{ + arr[0] = str; + arr[1] = null; + } + return arr; + } + + private int[][] initConnections(int[][] connections) { + + for(int i=0; i<connections.length ; i++){ + for(int j=0; j<connections.length ; j++){ + connections[i][j] =0; + } + } + return connections; + } + /** * Layout Building Algorithm * ~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -76,79 +334,146 @@ public class EntityBuilder { * * @return */ - public ComponentEntity[] buildEntities(){ + public ComponentEntity[] buildComponentEntities(Element docEle){ - //get the root element - Element docEle = dom.getDocumentElement(); - compositeName = docEle.getAttribute("name"); - System.out.println("compositeName "+compositeName); + ComponentEntity[] elts = null; + +// //get the root element +// Element docEle = dom.getDocumentElement(); +// compositeName = docEle.getAttribute("name"); +// System.out.println("compositeName "+compositeName); //get a nodelist of elements NodeList nl = docEle.getElementsByTagName("component"); if(nl != null && nl.getLength() > 0 ) { elts = new ComponentEntity[nl.getLength()]; + for(int i = 0 ; i < nl.getLength();i++) { elts[i] = new ComponentEntity(); Element nVal = (Element)nl.item(i); //System.out.println(nVal.hasAttribute("name")); + elts[i].setId(i); elts[i].setName(nVal.getAttribute("name")); + setServices(nVal, elts[i]); setReferences(nVal, elts[i]); setProperties(nVal, elts[i]); + elts[i].referenceHeight(); elts[i].serviceHeight(); elts[i].propertyLength(); } } + + buildWires(docEle, elts); +// //sec. 5.4 in the spec +// nl = docEle.getElementsByTagName("wire"); +// System.out.println("^^^^^^^^^ "+nl.getLength()); +// if(nl != null && nl.getLength() > 0 ) { +// for(int i = 0 ; i < nl.getLength();i++) { +// Element elt = (Element)nl.item(i); +// String source = elt.getAttribute("source"); +// String target = elt.getAttribute("target"); +// String service, serviceComp, reference, referenceComp; +// +// System.out.println("^^^^^^^^^ "+source+" ::: "+target); +// if(target.contains("/")){ +// String[] arr = target.split("/"); +// serviceComp = arr[0]; +// service = arr[1]; +// } +// else{ +// serviceComp = target; +// service = null; +// } +// +// if(source.contains("/")){ +// String[] arr = source.split("/"); +// referenceComp = arr[0]; +// reference = arr[1]; +// } +// else{ +// referenceComp = source; +// reference = null; +// } +// +// ComponentEntity e = findEntity(referenceComp); +// System.out.println("^^^^^^^^^ "+e.getName()); +// if(e != null){ +// createConnection(e, reference, serviceComp, service); +// } +// } +// } +// +// positionEntities(elts); +// +// calculateProperties(elts); + // print(elts); + + return elts; + + } + + private void buildWires(Element docEle, ComponentEntity[] elts) { + //sec. 5.4 in the spec - nl = docEle.getElementsByTagName("wire"); - System.out.println("^^^^^^^^^ "+nl.getLength()); + NodeList nl = docEle.getElementsByTagName("wire"); + //System.out.println("^^^^^^^^^ "+nl.getLength()); if(nl != null && nl.getLength() > 0 ) { + for(int i = 0 ; i < nl.getLength();i++) { + Element elt = (Element)nl.item(i); + String source = elt.getAttribute("source"); String target = elt.getAttribute("target"); + String service, serviceComp, reference, referenceComp; - System.out.println("^^^^^^^^^ "+source+" ::: "+target); - if(target.contains("/")){ - String[] arr = target.split("/"); - serviceComp = arr[0]; - service = arr[1]; - } - else{ - serviceComp = target; - service = null; - } + String[] arr1 = extractComp(target); + serviceComp = arr1[0]; + service = arr1[1]; - if(source.contains("/")){ - String[] arr = source.split("/"); - referenceComp = arr[0]; - reference = arr[1]; - } - else{ - referenceComp = source; - reference = null; - } + String[] arr2 = extractComp(source); + referenceComp = arr2[0]; + reference = arr2[1]; + +// //System.out.println("^^^^^^^^^ "+source+" ::: "+target); +// if(target.contains("/")){ +// String[] arr = target.split("/"); +// serviceComp = arr[0]; +// service = arr[1]; +// } +// else{ +// serviceComp = target; +// service = null; +// } +// +// if(source.contains("/")){ +// String[] arr = source.split("/"); +// referenceComp = arr[0]; +// reference = arr[1]; +// } +// else{ +// referenceComp = source; +// reference = null; +// } +// + ComponentEntity e1 = findEntity(elts, referenceComp); + //ComponentEntity e2 = findEntity(comps, serviceComp); - ComponentEntity e = findEntity(referenceComp); - System.out.println("^^^^^^^^^ "+e.getName()); - if(e != null){ - createConnection(e, reference, serviceComp, service); + System.out.println("^^^^^^^^^ "+e1.getName()); + if(e1 != null){ + System.out.println("^^^^^^^^^ "+e1.getId()); + //connections[e1.getId()][e2.getId()] = 1; + createConnection(e1, reference, serviceComp, service); } } } - positionEntities(elts); - - calculateProperties(elts); - print(elts); - - return elts; - } - - private ComponentEntity findEntity(String componentName) { + + private ComponentEntity findEntity(ComponentEntity[] elts, String componentName) { for(ComponentEntity e: elts){ if(e.getName().equals(componentName)){ @@ -192,13 +517,13 @@ public class EntityBuilder { String serviceComp, String service) { String referenceComp = ent.getName(); - + if(reference != null && service != null){ - - ent.addToRefToSerMap(reference, service); - ent.addAnAdjacentEntity(serviceComp); - addToConnectedEntities(referenceComp, serviceComp); - addToConnectedEntities(serviceComp, referenceComp); + + ent.addToRefToSerMap(reference, service); + ent.addAnAdjacentEntity(serviceComp); + addToConnectedEntities(referenceComp, serviceComp); + addToConnectedEntities(serviceComp, referenceComp); } else if(reference == null && service != null){ ent.addToRefToSerMap(referenceComp, service); @@ -220,25 +545,25 @@ public class EntityBuilder { } } - private void calculateProperties(ComponentEntity[] elts) { - int level=0, lane=0; - - for(ComponentEntity ent: elts){ - level = max(level, ent.getLevel()); - lane = max(lane, ent.getLane()); - - } - totalHeight += spaceY*(level+1) + initPoint; - totalWidth += spaceX*(lane+1) + initPoint; - - System.err.println(totalHeight + " :: "+totalWidth); - } +// private void calculateProperties(ComponentEntity[] elts) { +// int level=0, lane=0; +// +// for(ComponentEntity ent: elts){ +// level = max(level, ent.getLevel()); +// lane = max(lane, ent.getLane()); +// +// } +// totalHeight += spaceY*(level+1) + initPoint; +// totalWidth += spaceX*(lane+1) + initPoint; +// +// System.err.println(totalHeight + " :: "+totalWidth); +// } - private int max(int a, int b){ - if(a>=b) - return a; - return b; - } +// private int max(int a, int b){ +// if(a>=b) +// return a; +// return b; +// } private void print(ComponentEntity[] elts) { @@ -249,91 +574,91 @@ public class EntityBuilder { } } - private void positionEntities(ComponentEntity[] ents){ - - for(ComponentEntity ent: ents){ - if(ent.getAdjacentEntities().size() != 0 || ents.length==1){ - setPosition(ent, initPoint, initPoint, 0, 0); - levelCount.add(0, 1); - startEnt = ent; - System.err.println(ent.getName()); - break; - } - } - - - if(startEnt != null) - assignPositions(ents, startEnt); - - } - - private void assignPositions(ComponentEntity[] ents, ComponentEntity ent){ - int i=0; - if(ent.getAdjacentEntities().size()>0){ - - System.out.println(ent.getName()); - for(String name: ent.getAdjacentEntities()){ - //System.out.println("eee "+name); - for(ComponentEntity aEnt: ents){ - i++; - if(name.equalsIgnoreCase(aEnt.getName())){ - 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); -// else -// System.out.println(i+ " <<<<< "+ents.length); - break; - } - - } - } - } - - - else{ - ArrayList<String> conns = connectedEntities.get(ent.getName()); - System.err.println(conns.size()); - if(conns.size()>0){ - - for(String conn: conns){ - System.err.println("conn "+conn +" : "+ent.getName()); - for(ComponentEntity e: ents){ - if(e.getLane() == -1 && e.getName().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); - - break; - } - } - } - } - } - } - - private void setPosition(ComponentEntity 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 positionEntities(ComponentEntity[] ents){ +// +// for(ComponentEntity ent: ents){ +// if(ent.getAdjacentEntities().size() != 0 || ents.length==1){ +// setPosition(ent, initPoint, initPoint, 0, 0); +// levelCount.add(0, 1); +// startEnt = ent; +// System.err.println(ent.getName()); +// break; +// } +// } +// +// +// if(startEnt != null) +// assignPositions(ents, startEnt); +// +// } +// +// private void assignPositions(ComponentEntity[] ents, ComponentEntity ent){ +// int i=0; +// if(ent.getAdjacentEntities().size()>0){ +// +// System.out.println(ent.getName()); +// for(String name: ent.getAdjacentEntities()){ +// //System.out.println("eee "+name); +// for(ComponentEntity aEnt: ents){ +// i++; +// if(name.equalsIgnoreCase(aEnt.getName())){ +// 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); +//// else +//// System.out.println(i+ " <<<<< "+ents.length); +// break; +// } +// +// } +// } +// } +// +// +// else{ +// ArrayList<String> conns = connectedEntities.get(ent.getName()); +// System.err.println(conns.size()); +// if(conns.size()>0){ +// +// for(String conn: conns){ +// System.err.println("conn "+conn +" : "+ent.getName()); +// for(ComponentEntity e: ents){ +// if(e.getLane() == -1 && e.getName().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); +// +// break; +// } +// } +// } +// } +// } +// } +// +// private void setPosition(ComponentEntity 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("/"); +// } @@ -368,7 +693,7 @@ public class EntityBuilder { for(int i = 0 ; i < nl1.getLength();i++) { Element elt = (Element)nl1.item(i); System.out.println(elt.getAttribute("class")); - String serName = elt.getAttribute("class").split("\\.")[1]; + String serName = extractServiceName(elt.getAttribute("class")); ent.addAService(serName); } } @@ -377,6 +702,26 @@ public class EntityBuilder { } + /** + * + * This will extract the service name part from the class attribute of + * implementation.java element. + * eg: if class = "NirmalServiceImpl", returning service name would be "NirmalService" + */ + private String extractServiceName(String classAttr) { + if(classAttr != null){ + String[] x=classAttr.split("\\."); + String name = x[x.length-1]; + if(name.endsWith("Impl")){ + return name.substring(0, name.length()-4); + } + else{ + return name; + } + } + return ""; + } + private void setProperties(Element nVal, ComponentEntity ent) { NodeList nl = nVal.getElementsByTagName("property"); @@ -388,13 +733,13 @@ public class EntityBuilder { } } - public void setCompositeName(String compositeName) { - this.compositeName = compositeName; - } - - public String getCompositeName() { - return compositeName; - } +// public void setCompositeName(String compositeName) { +// this.compositeName = compositeName; +// } +// +// public String getCompositeName() { +// return compositeName; +// } public int getTotalWidth() { return totalWidth; |