package com.horstmann.violet.workspace.editorpart;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.horstmann.violet.product.diagram.abstracts.edge.IEdge;
import com.horstmann.violet.product.diagram.abstracts.node.INode;
import com.horstmann.violet.workspace.sidebar.graphtools.GraphTool;
public class EditorPartSelectionHandler implements IEditorPartSelectionHandler
{
public void setSelectedElement(INode node)
{
this.selectedNodes.clear();
this.selectedEdges.clear();
addSelectedElement(node);
}
public void setSelectedElement(IEdge edge)
{
this.selectedNodes.clear();
this.selectedEdges.clear();
addSelectedElement(edge);
}
public void updateSelectedElements(INode[] nodes)
{
for (int i = 0; i < nodes.length; i++)
{
if (isElementAlreadySelected(nodes[i]))
{
addSelectedElement(nodes[i]);
}
}
}
public void updateSelectedElements(IEdge[] edges)
{
for (int i = 0; i < edges.length; i++)
{
if (isElementAlreadySelected(edges[i]))
{
addSelectedElement(edges[i]);
}
}
}
public void addSelectedElement(INode node)
{
if (this.selectedNodes.contains(node))
{
this.removeElementFromSelection(node);
}
this.selectedNodes.add(node);
}
public void addSelectedElement(IEdge edge)
{
if (this.selectedEdges.contains(edge))
{
this.removeElementFromSelection(edge);
}
this.selectedEdges.add(edge);
}
public void removeElementFromSelection(INode node)
{
if (this.selectedNodes.contains(node))
{
int i = this.selectedNodes.indexOf(node);
this.selectedNodes.remove(i);
}
}
public void removeElementFromSelection(IEdge edge)
{
if (this.selectedEdges.contains(edge))
{
int i = this.selectedEdges.indexOf(edge);
this.selectedEdges.remove(i);
}
}
public boolean isElementAlreadySelected(INode node)
{
if (this.selectedNodes.contains(node)) return true;
return false;
}
public boolean isElementAlreadySelected(IEdge edge)
{
if (this.selectedEdges.contains(edge)) return true;
return false;
}
public void clearSelection()
{
this.selectedNodes.clear();
this.selectedEdges.clear();
}
public INode getLastSelectedNode()
{
return getLastElement(this.selectedNodes);
}
public IEdge getLastSelectedEdge()
{
return getLastElement(this.selectedEdges);
}
public boolean isNodeSelectedAtLeast()
{
return this.selectedNodes.size() > 0;
}
public boolean isEdgeSelectedAtLeast()
{
return this.selectedEdges.size() > 0;
}
public List<INode> getSelectedNodes()
{
return Collections.unmodifiableList(selectedNodes);
}
public List<IEdge> getSelectedEdges()
{
return Collections.unmodifiableList(selectedEdges);
}
@Override
public GraphTool getSelectedTool()
{
return this.selectedTool;
}
@Override
public void setSelectedTool(GraphTool graphTool)
{
this.selectedTool = graphTool;
}
private <T> T getLastElement(List<T> list)
{
int size = list.size();
if (size <= 0)
{
return null;
}
return list.get(size - 1);
}
private List<INode> selectedNodes = new ArrayList<INode>();
private List<IEdge> selectedEdges = new ArrayList<IEdge>();
private GraphTool selectedTool;
}