package org.openntf.domino.graph2.impl; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.ListIterator; import com.tinkerpop.blueprints.Direction; import com.tinkerpop.blueprints.Edge; import com.tinkerpop.blueprints.Vertex; public class DEdgeList implements org.openntf.domino.graph2.DEdgeList, Iterable<Edge> { @SuppressWarnings("unused") private static final long serialVersionUID = 1L; protected final DVertex sourceVertex_; protected List<Edge> delegate_; protected boolean isUnique_; protected String label_; private DEdgeList(final DVertex source, final List<Edge> list) { sourceVertex_ = source; delegate_ = list; } public DEdgeList(final DVertex source) { sourceVertex_ = source; delegate_ = new ArrayList<Edge>(); } /* (non-Javadoc) * @see org.openntf.domino.graph2.impl.IEdgeList#atomic() */ @Override public DEdgeList atomic() { return this; // return new DEdgeList(sourceVertex_, new AtomicTableImpl<Edge>(service())); } /* (non-Javadoc) * @see org.openntf.domino.graph2.impl.IEdgeList#unmodifiable() */ @Override public DEdgeList unmodifiable() { return this; // return new DEdgeList(sourceVertex_, new UnmodifiableTableImpl<Edge>(service())); } /* (non-Javadoc) * @see org.openntf.domino.graph2.impl.IEdgeList#findEdge(com.tinkerpop.blueprints.Vertex) */ @Override public Edge findEdge(final Vertex toVertex) { Edge result = null; Object toId = toVertex.getId(); Object fromId = sourceVertex_.getId(); if (this.size() > 0) { for (Edge edge : this) { if (edge instanceof DEdge) { DEdge dedge = (DEdge) edge; if (toId.equals(dedge.getOtherVertexId(sourceVertex_))) { result = dedge; break; } } else { Vertex inVertex = edge.getVertex(Direction.IN); if (fromId.equals(inVertex.getId())) { if (toId.equals(edge.getVertex(Direction.OUT))) { result = edge; break; } } else if (toId.equals(inVertex.getId())) { result = edge; break; } } } } else { // System.out.println("DEBUG: No edges defined in EdgeList"); } return result; } /* (non-Javadoc) * @see org.openntf.domino.graph2.impl.IEdgeList#applyFilter(java.lang.String, java.lang.Object) */ @Override public DEdgeList applyFilter(final String key, final Object value) { DEdgeList result = new DEdgeList(sourceVertex_); if (this.size() > 0) { for (Edge edge : this) { if (edge instanceof DEdge) { DEdge dedge = (DEdge) edge; if (value.equals(dedge.getProperty(key))) { result.add(edge); } } } } return result; } /* (non-Javadoc) * @see org.openntf.domino.graph2.impl.IEdgeList#toVertexList() */ @Override public DVertexList toVertexList() { // System.out.println("TEMP DEBUG Converting an edge list to a vertex list"); DVertexList result = new DVertexList(sourceVertex_); if (this.size() > 0) { for (Edge edge : this) { if (edge instanceof DEdge) { DEdge dedge = (DEdge) edge; try { DVertex vert = (DVertex) dedge.getOtherVertex(sourceVertex_); result.add(vert); } catch (Throwable t) { t.printStackTrace(); } } else { System.out.println("TEMP DEBUG EdgeList didn't have a DEdge. It had a " + edge.getClass().getName()); } } } else { // System.out.println("TEMP DEBUG EdgeList size is not greater than 0."); } return result; } @Override public boolean add(final Edge e) { if (!delegate_.contains(e)) { // System.out.println("TEMP DEBUG Adding Edge id " + e.getId()); return delegate_.add(e); } else { // System.out.println("TEMP DEBUG Edge id " + e.getId() + " already in list"); return false; } } @Override public void add(final int index, final Edge element) { delegate_.add(index, element); } @Override public boolean addAll(final Collection<? extends Edge> c) { return delegate_.addAll(c); } @Override public boolean addAll(final int index, final Collection<? extends Edge> c) { return delegate_.addAll(index, c); } @Override public void clear() { delegate_.clear(); } @Override public boolean contains(final Object o) { return delegate_.contains(o); } @Override public boolean containsAll(final Collection<?> c) { return delegate_.containsAll(c); } @Override public Edge get(final int index) { return delegate_.get(index); } @Override public int indexOf(final Object o) { return delegate_.indexOf(o); } @Override public boolean isEmpty() { return delegate_.isEmpty(); } @Override public Iterator<Edge> iterator() { return delegate_.iterator(); } @Override public int lastIndexOf(final Object o) { return delegate_.lastIndexOf(o); } @Override public ListIterator<Edge> listIterator() { return delegate_.listIterator(); } @Override public ListIterator<Edge> listIterator(final int index) { return delegate_.listIterator(index); } @Override public Edge remove(final int index) { return delegate_.remove(index); } @Override public boolean remove(final Object o) { // TODO Auto-generated method stub return false; } @Override public boolean removeAll(final Collection<?> c) { return delegate_.removeAll(c); } @Override public boolean retainAll(final Collection<?> c) { return delegate_.retainAll(c); } @Override public Edge set(final int index, final Edge element) { return delegate_.set(index, element); } @Override public int size() { return delegate_.size(); } @Override public List<Edge> subList(final int fromIndex, final int toIndex) { return new DEdgeList(sourceVertex_, delegate_.subList(fromIndex, toIndex)); } @Override public Object[] toArray() { return delegate_.toArray(); } @Override public <T> T[] toArray(final T[] a) { return delegate_.toArray(a); } @Override public boolean isUnique() { return isUnique_; } @Override public void setUnique(final boolean isUnique) { isUnique_ = isUnique; } @Override public String getLabel() { return label_; } @Override public void setLabel(final String label) { label_ = label; } }