package com.revolsys.geometry.graph;
import java.util.AbstractList;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class EdgeList<T> extends AbstractList<Edge<T>> {
private List<Integer> edgeIds;
private final Graph<T> graph;
public EdgeList(final Graph<T> graph) {
this(graph, new ArrayList<Integer>());
}
public EdgeList(final Graph<T> graph, final List<Integer> edgeIds) {
this.graph = graph;
this.edgeIds = edgeIds;
}
@Override
public boolean add(final Edge<T> edge) {
final int edgeId = edge.getId();
return this.edgeIds.add(edgeId);
}
@Override
public void add(final int index, final Edge<T> edge) {
final int edgeId = edge.getId();
this.edgeIds.add(index, edgeId);
}
@Override
public boolean addAll(final Collection<? extends Edge<T>> collection) {
boolean added = false;
for (final Edge<T> edge : collection) {
added = true;
add(edge);
}
return added;
}
@Override
public boolean addAll(int i, final Collection<? extends Edge<T>> collection) {
boolean added = false;
for (final Edge<T> edge : collection) {
added = true;
add(i++, edge);
}
return added;
}
@Override
public Edge<T> get(final int index) {
final Integer edgeId = this.edgeIds.get(index);
return this.graph.getEdge(edgeId);
}
@Override
public boolean remove(final Object o) {
if (o instanceof Edge) {
@SuppressWarnings("unchecked")
final Edge<T> edge = (Edge<T>)o;
final Object id = edge.getId();
return this.edgeIds.remove(id);
} else {
return false;
}
}
@Override
public boolean removeAll(final Collection<?> collection) {
boolean removed = false;
for (final Object object : collection) {
removed |= remove(object);
}
return removed;
}
@Override
public Edge<T> set(final int index, final Edge<T> edge) {
final int edgeId = edge.getId();
this.edgeIds.set(index, edgeId);
return edge;
}
@Override
public int size() {
return this.edgeIds.size();
}
}