<<<<<<< HEAD
package trafficdefinition;
import classes.ProjectElement;
import interfaces.DrawableElement;
import interfaces.HandleListener;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.AffineTransform;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.List;
import java.util.Map.Entry;
/**
* Abstract class decribing an element used to define a traffic pattern.
*/
public abstract class TrafficDefinitionElement extends ProjectElement implements Serializable, HandleListener, DrawableElement {
/**
*
*/
private static final long serialVersionUID = -8283034182313177579L;
/**
* Helper variable used to give new names to new layers
*/
protected static int increment = 1;
/**
* Graphical UI handles that can be used by the user to change the element's
* location or shape
*/
protected Hashtable<String, Handle> handles;
/**
* The element's name. This name is used in the output files.
*/
protected String name = null;
/**
* Flag to define whether the polygon of this element will be exported to an
* additional file to be loaded in SUMO
*/
protected boolean exportPolygon = false;
/**
* Flag to define whether the traffic element will be exported
*/
protected boolean enabled = true;
/**
* The traffic definition layer that this element is placed on
*/
protected TrafficDefinitionLayer layer = null;
/**
* Class constructor
*/
public TrafficDefinitionElement() {
handles = new Hashtable<String, Handle>();
}
/**
* Creates a new {@link TrafficDefinitionElement} that is a copy of the
* specified element
*
* @param source
* the element to copy
*/
protected TrafficDefinitionElement(TrafficDefinitionElement source) {
// Copy the handle's name
name = source.name;
// Create the handles collection
handles = new Hashtable<String, Handle>();
// Copy the handles
for (Entry<String, Handle> e : source.handles.entrySet()) {
Handle h = new Handle(e.getValue());
h.setHandleListener(this);
handles.put(e.getKey(), h);
}
// Copy other properties
exportPolygon = source.exportPolygon;
}
/**
* Returns an exact deep copy of this element
*
* @return
*/
public abstract TrafficDefinitionElement elementClone();
/* (non-Javadoc)
* @see trafficdefinition.DrawableElement#Draw(java.awt.Graphics2D, double, boolean, boolean)
*/
@Override
public void Draw(Graphics2D g, double zoomFactor, boolean isDeleted, boolean isSelected) {
// If the element is selected draw its handles
if (isSelected) {
for (Handle handle : handles.values()) {
handle.Draw(g);
}
}
}
/**
* @return the name
* @uml.property name="name"
*/
public String getName() {
return name;
}
/**
* Checks to see if the mouse is over one of the handles
*
* @param p
* @param tx
* @return The handle hit or null
*/
public Handle handleHit(Point p, AffineTransform tx) {
for (Handle handle : handles.values()) {
if (handle.hit(p, tx)) {
return handle;
}
}
return null;
}
/**
* @param name the name to set
* @uml.property name="name"
*/
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
/**
* Adds the specified handles to the element's handle list and registers the
* element as a listener to be notified when the handle's location has
* changed
*
* @param handles
*/
protected void addHandles(List<Handle> handles) {
for (Handle h : handles) {
this.handles.put(h.getName(), h);
h.setHandleListener(this);
}
}
/**
* @return the exportPolygon
* @uml.property name="exportPolygon"
*/
public boolean getExportPolygon() {
return exportPolygon;
}
/**
* @param exportPolygon the exportPolygon to set
* @uml.property name="exportPolygon"
*/
public void setExportPolygon(boolean e) {
exportPolygon = e;
}
/**
* Returns an XML description of the element's geometry. The description has
* to be in the format supported by SUMO (poly/poi).
*
* @return
*/
public String getGeometryXML() {
return "";
}
/**
* If the element is enabled then traffic will be generated during the export of the simulation
* @uml.property name="enabled"
*/
public boolean isEnabled() {
return enabled;
}
/**
* @param enabled the enabled to set
* @uml.property name="enabled"
*/
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
/**
* Returns an xml representation of the element
* @return
*/
public abstract String toXML();
/**
* @return the layer on which the element is placed
* @uml.property name="layer"
*/
public TrafficDefinitionLayer getLayer() {
return layer;
}
/**
* @param layer the layer on which the element is placed
* @uml.property name="layer"
*/
public void setLayer(TrafficDefinitionLayer layer) {
this.layer = layer;
}
}
=======
package trafficdefinition;
import classes.ProjectElement;
import interfaces.DrawableElement;
import interfaces.HandleListener;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.AffineTransform;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.List;
import java.util.Map.Entry;
/**
* Abstract class decribing an element used to define a traffic pattern.
*/
public abstract class TrafficDefinitionElement extends ProjectElement implements Serializable, HandleListener, DrawableElement {
/**
*
*/
private static final long serialVersionUID = -8283034182313177579L;
/**
* Helper variable used to give new names to new layers
*/
protected static int increment = 1;
/**
* Graphical UI handles that can be used by the user to change the element's
* location or shape
*/
protected Hashtable<String, Handle> handles;
/**
* The element's name. This name is used in the output files.
*/
protected String name = null;
/**
* Flag to define whether the polygon of this element will be exported to an
* additional file to be loaded in SUMO
*/
protected boolean exportPolygon = false;
/**
* Flag to define whether the traffic element will be exported
*/
protected boolean enabled = true;
/**
* The traffic definition layer that this element is placed on
*/
protected TrafficDefinitionLayer layer = null;
/**
* Class constructor
*/
public TrafficDefinitionElement() {
handles = new Hashtable<String, Handle>();
}
/**
* Creates a new {@link TrafficDefinitionElement} that is a copy of the
* specified element
*
* @param source
* the element to copy
*/
protected TrafficDefinitionElement(TrafficDefinitionElement source) {
// Copy the handle's name
name = source.name;
// Create the handles collection
handles = new Hashtable<String, Handle>();
// Copy the handles
for (Entry<String, Handle> e : source.handles.entrySet()) {
Handle h = new Handle(e.getValue());
h.setHandleListener(this);
handles.put(e.getKey(), h);
}
// Copy other properties
exportPolygon = source.exportPolygon;
}
/**
* Returns an exact deep copy of this element
*
* @return
*/
public abstract TrafficDefinitionElement elementClone();
/* (non-Javadoc)
* @see trafficdefinition.DrawableElement#Draw(java.awt.Graphics2D, double, boolean, boolean)
*/
@Override
public void Draw(Graphics2D g, double zoomFactor, boolean isDeleted, boolean isSelected) {
// If the element is selected draw its handles
if (isSelected) {
for (Handle handle : handles.values()) {
handle.Draw(g);
}
}
}
/**
* @return the name
* @uml.property name="name"
*/
public String getName() {
return name;
}
/**
* Checks to see if the mouse is over one of the handles
*
* @param p
* @param tx
* @return The handle hit or null
*/
public Handle handleHit(Point p, AffineTransform tx) {
for (Handle handle : handles.values()) {
if (handle.hit(p, tx)) {
return handle;
}
}
return null;
}
/**
* @param name the name to set
* @uml.property name="name"
*/
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return name;
}
/**
* Adds the specified handles to the element's handle list and registers the
* element as a listener to be notified when the handle's location has
* changed
*
* @param handles
*/
protected void addHandles(List<Handle> handles) {
for (Handle h : handles) {
this.handles.put(h.getName(), h);
h.setHandleListener(this);
}
}
/**
* @return the exportPolygon
* @uml.property name="exportPolygon"
*/
public boolean getExportPolygon() {
return exportPolygon;
}
/**
* @param exportPolygon the exportPolygon to set
* @uml.property name="exportPolygon"
*/
public void setExportPolygon(boolean e) {
exportPolygon = e;
}
/**
* Returns an XML description of the element's geometry. The description has
* to be in the format supported by SUMO (poly/poi).
*
* @return
*/
public String getGeometryXML() {
return "";
}
/**
* If the element is enabled then traffic will be generated during the export of the simulation
* @uml.property name="enabled"
*/
public boolean isEnabled() {
return enabled;
}
/**
* @param enabled the enabled to set
* @uml.property name="enabled"
*/
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
/**
* Returns an xml representation of the element
* @return
*/
public abstract String toXML();
/**
* @return the layer on which the element is placed
* @uml.property name="layer"
*/
public TrafficDefinitionLayer getLayer() {
return layer;
}
/**
* @param layer the layer on which the element is placed
* @uml.property name="layer"
*/
public void setLayer(TrafficDefinitionLayer layer) {
this.layer = layer;
}
}
>>>>>>> origin/abdalla