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 | 1414 |
1 files changed, 700 insertions, 714 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 b859e2de55..387afd22c0 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 @@ -21,727 +21,713 @@ package org.apache.tuscany.sca.impl.layout; import java.util.ArrayList; import java.util.HashMap; + import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class EntityBuilder { - private Document dom; - - //components connected to each other are tracked using following map - private HashMap<String, ArrayList<String>> connectedEntities = new HashMap<String, ArrayList<String>>(); - private int totalWidth=0; - private int totalHeight=0; - - CompositeEntity composite = null; - - /** - * Constructor which initiates the DOM document - * @param aDom DOM document - */ - public EntityBuilder(Document aDom){ - 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); - - //System.out.println("ComponentEntity "+comps[0].getLevel()); - int[][] conns = buildConnectionMatrix(comps); - - composite.setComponentList(comps); - composite.setConnections(conns); - - LayoutBuilder buildLayout = new LayoutBuilder(comps , conns); - buildLayout.placeEntities(); - - - //System.out.println("conns "+conns[0][0]); - - - buildCompositeService(docEle); - buildCompositeReference(docEle); - buildCompositeProperty(docEle); - - addInclusions(docEle); - - 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) { - - for(ComponentEntity comp: comps){ - comp.setParent(composite); - } - } - - private void buildCompositeService(Element docEle) { - - 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) { - - 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 targetStr = elt.getAttribute("promote"); - - String[] targets = targetStr.split(" "); - - for(String target: targets){ - - 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) { - - 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 void addInclusions(Element docEle) { - - NodeList nl = docEle.getElementsByTagName("include"); - //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 compToBeIncluded = elt.getAttribute("name"); - composite.addToIncludedComposites(compToBeIncluded); - } - } - } - } - - 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; - } - - - public ComponentEntity[] buildComponentEntities(Element docEle){ - - 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 - 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; -// } -// - ComponentEntity e1 = findEntity(elts, referenceComp); - //ComponentEntity e2 = findEntity(comps, serviceComp); - - //System.out.println("^^^^^^^^^ "+e1.getName()); - if(e1 != null){ - //System.out.println("^^^^^^^^^ "+e1.getId()); - //connections[e1.getId()][e2.getId()] = 1; - createConnection(e1, reference, serviceComp, service); - } - } - } - - } - - private ComponentEntity findEntity(ComponentEntity[] elts, String componentName) { - - for(ComponentEntity e: elts){ - if(e.getName().equals(componentName)){ - return e; - } - } - return null; - } - - private void setReferences(Element nVal, ComponentEntity ent) { - - 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); - String target = elt.getAttribute("target"); - String ref = elt.getAttribute("name"); - if(target.contains("/")){ - String[] arr = target.split("/"); - createConnection(ent, ref, arr[0], arr[1]); -// ent.addToRefToSerMap(ref, arr[1]); -// ent.addAnAdjacentEntity(arr[0]); -// addToConnectedEntities(ent.getComponentName(), arr[0]); -// addToConnectedEntities(arr[0], ent.getComponentName()); - } - else if(!target.equals("")){ - createConnection(ent, ref, target, null); -// ent.addToRefToSerMap(ref, target); -// ent.addAnAdjacentEntity(target); -// addToConnectedEntities(ent.getComponentName(), target); -// addToConnectedEntities(target, ent.getComponentName()); - } - - ent.addAReference(ref); - - } - } - } - - private void createConnection(ComponentEntity ent, String reference, - 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); - } - else if(reference == null && service != null){ - ent.addToRefToSerMap(referenceComp, service); - ent.addAnAdjacentEntity(serviceComp); - addToConnectedEntities(referenceComp, serviceComp); - addToConnectedEntities(serviceComp, referenceComp); - } - else if(reference != null && service == null){ - ent.addToRefToSerMap(reference, serviceComp); - ent.addAnAdjacentEntity(serviceComp); - addToConnectedEntities(referenceComp, serviceComp); - addToConnectedEntities(serviceComp, referenceComp); - } - else{ - ent.addToRefToSerMap(referenceComp, serviceComp); - ent.addAnAdjacentEntity(serviceComp); - addToConnectedEntities(referenceComp, serviceComp); - addToConnectedEntities(serviceComp, referenceComp); - } - } - -// 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; -// } - - - @SuppressWarnings("unused") - private void print(ComponentEntity[] elts) { - - for(ComponentEntity ent: elts){ - System.out.println(ent.getName()+" : "+ent.getLevel()+" : " - +ent.getLane()+" : "+ent.getX()+" : "+ent.getY()); - } - } - -// 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 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, ComponentEntity ent) { - - 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); - ent.addAService(elt.getAttribute("name")); - } - } - else{ - - NodeList nl1 = nVal.getElementsByTagName("implementation.java"); - if(nl1 != null && nl1.getLength() > 0 ) { - for(int i = 0 ; i < nl1.getLength();i++) { - Element elt = (Element)nl1.item(i); - //System.out.println(elt.getAttribute("class")); - String serName = extractServiceName(elt.getAttribute("class")); - ent.addAService(serName); - } - } - - } - - } - - /** - * - * 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"); - 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")); - } - } - } - -// public void setCompositeName(String compositeName) { -// this.compositeName = compositeName; -// } -// -// public String getCompositeName() { -// return compositeName; -// } - - public int getTotalWidth() { - return totalWidth; - } - - public int getTotalHeight() { - return totalHeight; - } + private Document dom; + + //components connected to each other are tracked using following map + private HashMap<String, ArrayList<String>> connectedEntities = new HashMap<String, ArrayList<String>>(); + private int totalWidth = 0; + private int totalHeight = 0; + + CompositeEntity composite = null; + + /** + * Constructor which initiates the DOM document + * @param aDom DOM document + */ + public EntityBuilder(Document aDom) { + 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); + + //System.out.println("ComponentEntity "+comps[0].getLevel()); + int[][] conns = buildConnectionMatrix(comps); + + composite.setComponentList(comps); + composite.setConnections(conns); + + LayoutBuilder buildLayout = new LayoutBuilder(comps, conns); + buildLayout.placeEntities(); + + //System.out.println("conns "+conns[0][0]); + + buildCompositeService(docEle); + buildCompositeReference(docEle); + buildCompositeProperty(docEle); + + addInclusions(docEle); + + 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) { + + for (ComponentEntity comp : comps) { + comp.setParent(composite); + } + } + + private void buildCompositeService(Element docEle) { + + 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) { + + 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 targetStr = elt.getAttribute("promote"); + String[] targets = targetStr.split(" "); + for (String target : targets) { + + 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) { + + 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 void addInclusions(Element docEle) { + + NodeList nl = docEle.getElementsByTagName("include"); + //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 compToBeIncluded = elt.getAttribute("name"); + composite.addToIncludedComposites(compToBeIncluded); + } + } + } + } + + 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; + } + + public ComponentEntity[] buildComponentEntities(Element docEle) { + + 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 + 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; + // } + // + ComponentEntity e1 = findEntity(elts, referenceComp); + //ComponentEntity e2 = findEntity(comps, serviceComp); + + //System.out.println("^^^^^^^^^ "+e1.getName()); + if (e1 != null) { + //System.out.println("^^^^^^^^^ "+e1.getId()); + //connections[e1.getId()][e2.getId()] = 1; + createConnection(e1, reference, serviceComp, service); + } + } + } + + } + + private ComponentEntity findEntity(ComponentEntity[] elts, String componentName) { + + for (ComponentEntity e : elts) { + if (e.getName().equals(componentName)) { + return e; + } + } + return null; + } + + private void setReferences(Element nVal, ComponentEntity ent) { + + 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); + String target = elt.getAttribute("target"); + String ref = elt.getAttribute("name"); + if (target.contains("/")) { + String[] arr = target.split("/"); + createConnection(ent, ref, arr[0], arr[1]); + // ent.addToRefToSerMap(ref, arr[1]); + // ent.addAnAdjacentEntity(arr[0]); + // addToConnectedEntities(ent.getComponentName(), arr[0]); + // addToConnectedEntities(arr[0], ent.getComponentName()); + } else if (!target.equals("")) { + createConnection(ent, ref, target, null); + // ent.addToRefToSerMap(ref, target); + // ent.addAnAdjacentEntity(target); + // addToConnectedEntities(ent.getComponentName(), target); + // addToConnectedEntities(target, ent.getComponentName()); + } + + ent.addAReference(ref); + + } + } + } + + private void createConnection(ComponentEntity ent, String reference, 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); + } else if (reference == null && service != null) { + ent.addToRefToSerMap(referenceComp, service); + ent.addAnAdjacentEntity(serviceComp); + addToConnectedEntities(referenceComp, serviceComp); + addToConnectedEntities(serviceComp, referenceComp); + } else if (reference != null && service == null) { + ent.addToRefToSerMap(reference, serviceComp); + ent.addAnAdjacentEntity(serviceComp); + addToConnectedEntities(referenceComp, serviceComp); + addToConnectedEntities(serviceComp, referenceComp); + } else { + ent.addToRefToSerMap(referenceComp, serviceComp); + ent.addAnAdjacentEntity(serviceComp); + addToConnectedEntities(referenceComp, serviceComp); + addToConnectedEntities(serviceComp, referenceComp); + } + } + + // 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; + // } + + @SuppressWarnings("unused") + private void print(ComponentEntity[] elts) { + + for (ComponentEntity ent : elts) { + System.out.println(ent.getName() + " : " + + ent.getLevel() + + " : " + + ent.getLane() + + " : " + + ent.getX() + + " : " + + ent.getY()); + } + } + + // 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 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, ComponentEntity ent) { + + 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); + ent.addAService(elt.getAttribute("name")); + } + } else { + + NodeList nl1 = nVal.getElementsByTagName("implementation.java"); + if (nl1 != null && nl1.getLength() > 0) { + for (int i = 0; i < nl1.getLength(); i++) { + Element elt = (Element)nl1.item(i); + //System.out.println(elt.getAttribute("class")); + String serName = extractServiceName(elt.getAttribute("class")); + ent.addAService(serName); + } + } + + } + + } + + /** + * + * 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"); + 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")); + } + } + } + + // public void setCompositeName(String compositeName) { + // this.compositeName = compositeName; + // } + // + // public String getCompositeName() { + // return compositeName; + // } + + public int getTotalWidth() { + return totalWidth; + } + + public int getTotalHeight() { + return totalHeight; + } } |