package org.neo4j.rdf.sail;
import info.aduna.iteration.CloseableIteration;
import org.openrdf.model.Namespace;
import org.openrdf.model.impl.NamespaceImpl;
import org.openrdf.sail.SailException;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.GraphDatabaseService;
import java.util.Iterator;
import java.util.Collection;
import java.util.LinkedList;
/**
* Author: josh
* Date: Apr 25, 2008
* Time: 7:10:31 PM
*/
public class GraphDatabaseNamespaceIteration implements CloseableIteration<Namespace, SailException> {
private final Iterator<Namespace> iterator;
public GraphDatabaseNamespaceIteration(final Node node, final GraphDatabaseService graphDb) {
Transaction tx = graphDb.beginTx();
try {
Collection<Namespace> namespaces = new LinkedList<Namespace>();
Iterator<String> keys = node.getPropertyKeys().iterator();
while (keys.hasNext()) {
String key = keys.next();
String uri = (String) node.getProperty(key);
namespaces.add(new NamespaceImpl(key, uri));
}
this.iterator = namespaces.iterator();
} finally {
tx.finish();
}
}
public void close() throws SailException {
// Not needed
}
public boolean hasNext() throws SailException {
return iterator.hasNext();
}
public Namespace next() throws SailException {
return iterator.next();
}
public void remove() throws SailException {
// TODO: decide whether remove() should be supported
}
}