package org.openntf.domino.rest.resources.frames; import com.ibm.commons.util.io.json.JsonArray; import com.ibm.commons.util.io.json.JsonException; import com.ibm.commons.util.io.json.JsonObject; import com.tinkerpop.frames.EdgeFrame; import com.tinkerpop.frames.VertexFrame; import java.util.Iterator; import java.util.List; import org.openntf.domino.graph2.annotations.FramedEdgeList; import org.openntf.domino.graph2.annotations.FramedVertexList; import org.openntf.domino.graph2.impl.DFramedTransactionalGraph; import org.openntf.domino.rest.service.Parameters.ParamMap; public class JsonFrameListAdapter implements JsonArray { protected static class FrameListAdapterIterator implements Iterator<Object> { protected final JsonFrameListAdapter parent_; protected final Iterator<Object> iterator_; public FrameListAdapterIterator(JsonFrameListAdapter parent) { parent_ = parent; iterator_ = parent.getList().iterator(); } @Override public boolean hasNext() { return iterator_.hasNext(); } @Override public Object next() { Object raw = iterator_.next(); if (raw == null) { return null; } else if (raw instanceof VertexFrame) { return new JsonFrameAdapter(parent_.getGraph(), (VertexFrame) raw, parent_.getParamMap()); } else if (raw instanceof EdgeFrame) { return new JsonFrameAdapter(parent_.getGraph(), (EdgeFrame) raw, parent_.getParamMap()); } else { throw new IllegalStateException("Iterator returned a " + raw.getClass().getName()); } } @Override public void remove() { iterator_.remove(); } } protected DFramedTransactionalGraph<?> graph_; protected List<Object> list_; protected ParamMap pm_; protected boolean isVertex_; @SuppressWarnings("unchecked") public JsonFrameListAdapter(DFramedTransactionalGraph<?> graph, FramedEdgeList<?> edgeList, ParamMap pm) { graph_ = graph; list_ = (List<Object>) edgeList; pm_ = pm; isVertex_ = false; // System.out.println("TEMP DEBUG JsonFrameListAdapter created from EdgeList"); } @SuppressWarnings("unchecked") public JsonFrameListAdapter(DFramedTransactionalGraph<?> graph, FramedVertexList<?> vertexList, ParamMap pm) { graph_ = graph; list_ = (List<Object>) vertexList; pm_ = pm; isVertex_ = true; // System.out.println("TEMP DEBUG JsonFrameListAdapter created from VertexList"); } protected DFramedTransactionalGraph<?> getGraph() { return graph_; } protected ParamMap getParamMap() { return pm_; } protected List<Object> getList() { return list_; } protected boolean isVertex() { return isVertex_; } @Override public Iterator<Object> iterator() { return new FrameListAdapterIterator(this); } @Override public int length() throws JsonException { return getList().size(); } @Override public Object get(int paramInt) throws JsonException { if (isVertex()) { return new JsonFrameAdapter(getGraph(), (VertexFrame) getList().get(paramInt), getParamMap()); } else { return new JsonFrameAdapter(getGraph(), (EdgeFrame) getList().get(paramInt), getParamMap()); } } @Override public String getString(int paramInt) throws JsonException { // TODO Auto-generated method stub return null; } @Override public double getNumber(int paramInt) throws JsonException { // TODO Auto-generated method stub return 0; } @Override public boolean getBoolean(int paramInt) throws JsonException { // TODO Auto-generated method stub return false; } @Override public JsonObject getObject(int paramInt) throws JsonException { return (JsonObject) get(paramInt); } @Override public JsonArray getArray(int paramInt) throws JsonException { // TODO Auto-generated method stub return null; } @Override public void put(int paramInt, Object paramObject) throws JsonException { // TODO Auto-generated method stub } @Override public void putString(int paramInt, String paramString) throws JsonException { // TODO Auto-generated method stub } @Override public void putNumber(int paramInt, double paramDouble) throws JsonException { // TODO Auto-generated method stub } @Override public void putBoolean(int paramInt, boolean paramBoolean) throws JsonException { // TODO Auto-generated method stub } @Override public void putObject(int paramInt, JsonObject paramJsonObject) throws JsonException { // TODO Auto-generated method stub } @Override public void putArray(int paramInt, JsonArray paramJsonArray) throws JsonException { // TODO Auto-generated method stub } @Override public Object remove(int paramInt) throws JsonException { // TODO Auto-generated method stub return null; } @Override public boolean add(Object paramObject) throws JsonException { // TODO Auto-generated method stub return false; } }