package org.limewire.mojito.visual.components; import java.util.LinkedHashSet; import java.util.Set; import org.limewire.mojito.visual.components.BinaryEdge.EdgeType; import edu.uci.ics.jung.graph.Edge; import edu.uci.ics.jung.graph.Vertex; import edu.uci.ics.jung.graph.impl.DirectedSparseVertex; public class InteriorNodeVertex extends DirectedSparseVertex { private Vertex leftChild; private Vertex rightChild; public InteriorNodeVertex() { super(); } @Override protected void addNeighbor_internal(Edge e, Vertex v) { super.addNeighbor_internal(e, v); if (! (e instanceof BinaryEdge)) throw new IllegalArgumentException("This vertex " + "implementation only accepts binary edges"); BinaryEdge be = (BinaryEdge) e; if(this == be.getSource()) { if(be.getType().equals(EdgeType.LEFT)) { if(leftChild == null) { leftChild = v; } else { throw new IllegalArgumentException("This vertex " + "already has a left child!"); } } else { if(rightChild == null) { rightChild = v; } else { throw new IllegalArgumentException("This vertex " + "already has a right child!"); } } } } @Override protected void removeNeighbor_internal(Edge e, Vertex v) { super.removeNeighbor_internal(e, v); if (! (e instanceof BinaryEdge)) throw new IllegalArgumentException("This vertex " + "implementation only accepts binary edges"); BinaryEdge be = (BinaryEdge) e; if(this == be.getSource()) { if(be.getType().equals(EdgeType.LEFT)) { if(leftChild == null) { throw new IllegalArgumentException("This vertex " + "has no left child!"); } else { leftChild = null; } } else { if(rightChild == null) { throw new IllegalArgumentException("This vertex " + "has no right child!"); } else { rightChild = null; } } } } @Override public Set getSuccessors() { Set<Vertex> res = new LinkedHashSet<Vertex>(); if(leftChild!= null) { res.add(leftChild); } if(rightChild != null) { res.add(rightChild); } return res; } public Vertex getLeftChild() { return leftChild; } public Vertex getRightChild() { return rightChild; } }