summaryrefslogtreecommitdiffstats
path: root/collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout
diff options
context:
space:
mode:
Diffstat (limited to 'collaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout')
-rwxr-xr-xcollaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/Entity.java246
-rwxr-xr-xcollaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/EntityBuilder.java155
-rwxr-xr-xcollaboration/GSoC-2011-Nirmal/CompositeDiagramGeneratorUsingBatik/src/main/java/org/apache/tuscany/sca/impl/layout/PropertyAllocator.java26
3 files changed, 427 insertions, 0 deletions
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<String, String> referenceToServiceMap = new HashMap<String, String>();
+
+ private ArrayList<String> references = new ArrayList<String>();
+ private ArrayList<String> refProperties = new ArrayList<String>();
+
+ private ArrayList<String> services = new ArrayList<String>();
+ private ArrayList<String> serProperties = new ArrayList<String>();
+
+ private ArrayList<String> properties = new ArrayList<String>();
+ private ArrayList<String> propProperties = new ArrayList<String>();
+
+ private HashSet<String> adjacentEntities = new HashSet<String>();
+
+
+ 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<String, String> getReferenceToServiceMap() {
+ return referenceToServiceMap;
+ }
+ public void setReferenceToServiceMap(
+ HashMap<String, String> referenceToServiceMap) {
+ this.referenceToServiceMap = referenceToServiceMap;
+ }
+ public ArrayList<String> getProperties() {
+ return properties;
+ }
+ public void setProperties(ArrayList<String> properties) {
+ this.properties = properties;
+ }
+ public HashSet<String> getAdjacentEntities() {
+ return adjacentEntities;
+ }
+ public void setAdjacentEntities(HashSet<String> adjacentEntities) {
+ this.adjacentEntities = adjacentEntities;
+ }
+ public void setServices(ArrayList<String> services) {
+ this.services = services;
+ }
+ public ArrayList<String> 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<String> getRefProperties() {
+ return refProperties;
+ }
+
+ public void setRefProperties(ArrayList<String> refProperties) {
+ this.refProperties = refProperties;
+ }
+
+ public ArrayList<String> getSerProperties() {
+ return serProperties;
+ }
+
+ public void setSerProperties(ArrayList<String> serProperties) {
+ this.serProperties = serProperties;
+ }
+
+ public ArrayList<String> getPropProperties() {
+ return propProperties;
+ }
+
+ public void setPropProperties(ArrayList<String> 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<Integer> levelCount = new ArrayList<Integer>();
+
+ 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();
+
+ }
+ }
+
+
+}