From c6406ddd51887ba702991e960512161a92697d5e Mon Sep 17 00:00:00 2001 From: nirmal070125 Date: Tue, 7 Jun 2011 05:17:25 +0000 Subject: Work up to date: not stable git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1132863 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/tuscany/sca/impl/layout/Entity.java | 246 +++++++++++++++++++++ .../tuscany/sca/impl/layout/EntityBuilder.java | 155 +++++++++++++ .../tuscany/sca/impl/layout/PropertyAllocator.java | 26 +++ 3 files changed, 427 insertions(+) create mode 100755 collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java create mode 100755 collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java create mode 100755 collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java (limited to 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout') diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java new file mode 100755 index 0000000000..34c750bbce --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java @@ -0,0 +1,246 @@ +package org.apache.tuscany.sca.impl.layout; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; + +import org.apache.tuscany.sca.impl.artifacts.Component; +import org.apache.tuscany.sca.impl.artifacts.Property; +import org.apache.tuscany.sca.impl.artifacts.Reference; +import org.apache.tuscany.sca.impl.artifacts.Service; + +/** + * Represents an unit (a component including its references, services, properties + * and adjacent units) in the diagram. + * @author nirmal + * + */ +public class Entity { + + private String componentName; + private int X, Y, level, lane, refHeight, serHeight, propLength; + + public static final int defaultNoOfSers= Component.DEFAULT_HEIGHT / (Service.MAXIMUM_HEIGHT+Service.SPACING); + public static final int defaultNoOfRefs= Component.DEFAULT_HEIGHT / (Reference.MAXIMUM_HEIGHT+Reference.SPACING); //same value for defaultNoOfSers + public static final int defaultNoOfProps= Component.DEFAULT_WIDTH / (Property.MAXIMUM_HEIGHT+Property.SPACING); + + private HashMap referenceToServiceMap = new HashMap(); + + private ArrayList references = new ArrayList(); + private ArrayList refProperties = new ArrayList(); + + private ArrayList services = new ArrayList(); + private ArrayList serProperties = new ArrayList(); + + private ArrayList properties = new ArrayList(); + private ArrayList propProperties = new ArrayList(); + + private HashSet adjacentEntities = new HashSet(); + + + public Entity(){ + + + } + + public void referenceHeight(){ + if(Entity.defaultNoOfRefs < getNoOfRefs()){ + + refHeight = (Component.DEFAULT_HEIGHT / getNoOfRefs()) - Reference.SPACING; + } + else + refHeight = Reference.MAXIMUM_HEIGHT; + } + + public void serviceHeight(){ + if(Entity.defaultNoOfSers < getNoOfSers()){ + + serHeight = (Component.DEFAULT_HEIGHT / getNoOfSers()) - Service.SPACING; + } + else + serHeight = Service.MAXIMUM_HEIGHT; + } + + public void propertyLength(){ + if(Entity.defaultNoOfProps < getNoOfProps()){ + + propLength = (Component.DEFAULT_WIDTH / getNoOfProps()) - Property.SPACING; + } + else + propLength = Property.MAXIMUM_HEIGHT; + } + + public int getNoOfRefs(){ + return references.size(); + } + + public int getNoOfSers(){ + return services.size(); + } + + public int getNoOfProps(){ + return properties.size(); + } + + public int getNoOfAdjacentUnits(){ + return adjacentEntities.size(); + } + + /** + * Put a value to referenceToServiceMap + * @param ref + * @param ser + * @return successfully added or not + */ + //assumption there can not be two services for the same reference + public boolean addToRefToSerMap(String ref, String ser){ + ref = ref.toLowerCase(); + ser = ser.toLowerCase(); + + if (referenceToServiceMap.containsKey(ref)) + return false; + + referenceToServiceMap.put(ref, ser); + return true; + } + + /** + * Retrieve a service name for a given reference + * @param ref + * @return service name + */ + public String getSerOfRef(String ref){ + ref = ref.toLowerCase(); + + if (!referenceToServiceMap.containsKey(ref)) + return null; + + return referenceToServiceMap.get(ref); + } + + public void addAService(String serName){ + serName = serName.toLowerCase(); + services.add(serName); + + } + + public void addAReference(String refName){ + refName = refName.toLowerCase(); + references.add(refName); + + } + + public void addAProperty(String propName){ + propName = propName.toLowerCase(); + properties.add(propName); + + } + + public void addAnAdjacentEntity(String x){ + + adjacentEntities.add(x); + + } + + public void setComponentName(String componentName) { + this.componentName = componentName; + } + public String getComponentName() { + return componentName; + } + + public HashMap getReferenceToServiceMap() { + return referenceToServiceMap; + } + public void setReferenceToServiceMap( + HashMap referenceToServiceMap) { + this.referenceToServiceMap = referenceToServiceMap; + } + public ArrayList getProperties() { + return properties; + } + public void setProperties(ArrayList properties) { + this.properties = properties; + } + public HashSet getAdjacentEntities() { + return adjacentEntities; + } + public void setAdjacentEntities(HashSet adjacentEntities) { + this.adjacentEntities = adjacentEntities; + } + public void setServices(ArrayList services) { + this.services = services; + } + public ArrayList getServices() { + return services; + } + + public int getX() { + return X; + } + + public void setX(int x) { + X = x; + } + + public int getY() { + return Y; + } + + public void setY(int y) { + Y = y; + } + + public int getLevel() { + return level; + } + + public void setLevel(int level) { + this.level = level; + } + + public int getLane() { + return lane; + } + + public void setLane(int lane) { + this.lane = lane; + } + + public ArrayList getRefProperties() { + return refProperties; + } + + public void setRefProperties(ArrayList refProperties) { + this.refProperties = refProperties; + } + + public ArrayList getSerProperties() { + return serProperties; + } + + public void setSerProperties(ArrayList serProperties) { + this.serProperties = serProperties; + } + + public ArrayList getPropProperties() { + return propProperties; + } + + public void setPropProperties(ArrayList propProperties) { + this.propProperties = propProperties; + } + + public int getRefHeight() { + return refHeight; + } + + public int getSerHeight() { + return serHeight; + } + + public int getPropLength() { + return propLength; + } + +} 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 levelCount = new ArrayList(); + + 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")); + } + } + } + + + +} diff --git a/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java new file mode 100755 index 0000000000..1574d1247f --- /dev/null +++ b/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java @@ -0,0 +1,26 @@ +package org.apache.tuscany.sca.impl.layout; + +import java.util.Iterator; + +import org.apache.tuscany.sca.impl.artifacts.Component; +import org.apache.tuscany.sca.impl.artifacts.Reference; + +public class PropertyAllocator { + Entity entity; + + public PropertyAllocator(Entity e) { + entity = e; + } + + public void allocatePropertiesOfRefs(){ + int height=0; + + + for(Iterator it=entity.getReferenceToServiceMap().keySet().iterator();it.hasNext();){ + String ref = it.next(); + + } + } + + +} -- cgit v1.2.3