<<<<<<< HEAD package trafficdefinition; import classes.Layer; import enums.SelectionType; import java.awt.Graphics2D; import java.awt.Rectangle; import java.io.Serializable; import java.util.List; /** * Class representing a layer that contains {@link TrafficDefinitionElement} s. Each layer is independent of the others. The user may choose which layers to export to the simulation. The final traffic will be the set of the traffic of each layer. */ public abstract class TrafficDefinitionLayer extends Layer<TrafficDefinitionElement> implements Serializable { /** * Helper variable used to give new names to new layers */ private static int increment = 1; private static final long serialVersionUID = 1L; /** * The layer's name */ protected String name = null; /** * Class constructor used to create a new layer. * */ public TrafficDefinitionLayer() { super(); name = "New Layer " + String.valueOf(TrafficDefinitionLayer.increment); // Increment the name counter TrafficDefinitionLayer.increment++; } /** * Class constructor used to create a new layer as a copy of another layer * @param source the layer that will be used as the source layer */ public TrafficDefinitionLayer(TrafficDefinitionLayer source) { super(); //Copy the traffic elements for(TrafficDefinitionElement e:source.elements){ TrafficDefinitionElement clone = e.elementClone(); clone.setLayer(this); elements.add(clone); } for(TrafficDefinitionElement e:source.selectedElements){ TrafficDefinitionElement clone = e.elementClone(); clone.setLayer(this); selectedElements.add(e.elementClone()); } name = "Copy of " + source.getName(); } /** * Duplicates (clones) the current traffic definition layer * @return */ public abstract TrafficDefinitionLayer duplicate(); /** * Deletes the specified element from the layer * @param t the element to delete */ public void DeleteTrafficElement(TrafficDefinitionElement t){ elements.remove(t); } /** * Adds the specified element to the layer * @param t */ public void AddTrafficElement(TrafficDefinitionElement t) { elements.add(t); t.setLayer(this); //Select the new element SelectElement(t); //Notify registered listeners NotifyCollectionModified(); NotifySelectionChanged(); } @Override public void AlterSelection(Rectangle transformedRectangle, SelectionType type) { switch (type) { case New: SelectNoneElements(); //no break case Add: super.AddToSelection(transformedRectangle); break; case Remove: super.RemoveFromSelection(transformedRectangle); break; } NotifySelectionChanged(); } @Override public void DeleteSelectedElements() { //Remove the dependencies for any flows that are going to be deleted for (TrafficDefinitionElement t : selectedElements) { if (t instanceof Flow) { ((Flow) t).ReleaseDependencies(); } } //Just clear the list selectedElements.clear(); NotifyCollectionModified(); NotifySelectionChanged(); } @Override public void Draw(Graphics2D g, double zoomFactor) { // Draw traffic definition elements for (TrafficDefinitionElement e : elements) { e.Draw(g, zoomFactor, false, false); } // Draw selected traffic definition elements for (TrafficDefinitionElement e : selectedElements) { e.Draw(g, zoomFactor, false, true); } } /** * @return the name * @uml.property name="name" */ public String getName() { return name; } public List<TrafficDefinitionElement> getSelectedElements() { return selectedElements; } /** * Checks whether the specified element is selected * @param e * @return */ public boolean isElementSelected(TrafficDefinitionElement e) { return selectedElements.contains(e); } @Override public void SelectAllElements() { super.SelectAllElements(); NotifySelectionChanged(); } @Override public void SelectInverseElements() { super.SelectInverseElements(); NotifySelectionChanged(); } @Override public void SelectNoneElements() { super.SelectNoneElements(); NotifySelectionChanged(); } /** * @param name the name to set * @uml.property name="name" */ public void setName(String name) { this.name = name; } @Override public String toString() { return name; } public abstract String toXML(); } ======= package trafficdefinition; import classes.Layer; import enums.SelectionType; import java.awt.Graphics2D; import java.awt.Rectangle; import java.io.Serializable; import java.util.List; /** * Class representing a layer that contains {@link TrafficDefinitionElement} s. Each layer is independent of the others. The user may choose which layers to export to the simulation. The final traffic will be the set of the traffic of each layer. */ public abstract class TrafficDefinitionLayer extends Layer<TrafficDefinitionElement> implements Serializable { /** * Helper variable used to give new names to new layers */ private static int increment = 1; private static final long serialVersionUID = 1L; /** * The layer's name */ protected String name = null; /** * Class constructor used to create a new layer. * */ public TrafficDefinitionLayer() { super(); name = "New Layer " + String.valueOf(TrafficDefinitionLayer.increment); // Increment the name counter TrafficDefinitionLayer.increment++; } /** * Class constructor used to create a new layer as a copy of another layer * @param source the layer that will be used as the source layer */ public TrafficDefinitionLayer(TrafficDefinitionLayer source) { super(); //Copy the traffic elements for(TrafficDefinitionElement e:source.elements){ TrafficDefinitionElement clone = e.elementClone(); clone.setLayer(this); elements.add(clone); } for(TrafficDefinitionElement e:source.selectedElements){ TrafficDefinitionElement clone = e.elementClone(); clone.setLayer(this); selectedElements.add(e.elementClone()); } name = "Copy of " + source.getName(); } /** * Duplicates (clones) the current traffic definition layer * @return */ public abstract TrafficDefinitionLayer duplicate(); /** * Deletes the specified element from the layer * @param t the element to delete */ public void DeleteTrafficElement(TrafficDefinitionElement t){ elements.remove(t); } /** * Adds the specified element to the layer * @param t */ public void AddTrafficElement(TrafficDefinitionElement t) { elements.add(t); t.setLayer(this); //Select the new element SelectElement(t); //Notify registered listeners NotifyCollectionModified(); NotifySelectionChanged(); } @Override public void AlterSelection(Rectangle transformedRectangle, SelectionType type) { switch (type) { case New: SelectNoneElements(); //no break case Add: super.AddToSelection(transformedRectangle); break; case Remove: super.RemoveFromSelection(transformedRectangle); break; } NotifySelectionChanged(); } @Override public void DeleteSelectedElements() { //Remove the dependencies for any flows that are going to be deleted for (TrafficDefinitionElement t : selectedElements) { if (t instanceof Flow) { ((Flow) t).ReleaseDependencies(); } } //Just clear the list selectedElements.clear(); NotifyCollectionModified(); NotifySelectionChanged(); } @Override public void Draw(Graphics2D g, double zoomFactor) { // Draw traffic definition elements for (TrafficDefinitionElement e : elements) { e.Draw(g, zoomFactor, false, false); } // Draw selected traffic definition elements for (TrafficDefinitionElement e : selectedElements) { e.Draw(g, zoomFactor, false, true); } } /** * @return the name * @uml.property name="name" */ public String getName() { return name; } public List<TrafficDefinitionElement> getSelectedElements() { return selectedElements; } /** * Checks whether the specified element is selected * @param e * @return */ public boolean isElementSelected(TrafficDefinitionElement e) { return selectedElements.contains(e); } @Override public void SelectAllElements() { super.SelectAllElements(); NotifySelectionChanged(); } @Override public void SelectInverseElements() { super.SelectInverseElements(); NotifySelectionChanged(); } @Override public void SelectNoneElements() { super.SelectNoneElements(); NotifySelectionChanged(); } /** * @param name the name to set * @uml.property name="name" */ public void setName(String name) { this.name = name; } @Override public String toString() { return name; } public abstract String toXML(); } >>>>>>> origin/abdalla