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. * */ public class Entity { private String componentName; private int X, Y, level=-1, lane=-1, refHeight, serHeight, propLength; private final int height= Component.DEFAULT_HEIGHT, width= Component.DEFAULT_WIDTH; 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(); private HashSet connectedEntities = 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){ // System.out.println("eee "+x); adjacentEntities.add(x); } public void addAnConnectedEntity(String x){ // System.out.println("eee "+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 ArrayList getReferences() { return references; } 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; } public void setConnectedEntities(HashSet connectedEntities) { this.connectedEntities = connectedEntities; } public HashSet getConnectedEntities() { return connectedEntities; } public int getHeight() { return height; } public int getWidth() { return width; } }