package org.linkeddatafragments.model; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.function.Function; import java.util.function.Predicate; import org.apache.jena.graph.Triple; import org.apache.jena.util.iterator.ExtendedIterator; import org.apache.jena.util.iterator.Filter; import org.apache.jena.util.iterator.Map1; import org.linkeddatafragments.client.LinkedDataFragmentsClient; /** * Created by ldevocht on 4/29/14. */ public class ExtendedTripleIteratorLDF implements ExtendedIterator<Triple> { protected ExtendedIterator<Triple> triples; protected Iterator<LinkedDataFragment> ldfIterator; public ExtendedTripleIteratorLDF(LinkedDataFragmentsClient ldfClient, LinkedDataFragment ldf) { triples = ldf.getTriples(); ldfIterator = LinkedDataFragmentIterator.create(ldf, ldfClient); } public static ExtendedIterator<Triple> create(LinkedDataFragmentsClient ldfClient, LinkedDataFragment ldf) { return new ExtendedTripleIteratorLDF(ldfClient, ldf); } @Override public Triple removeNext() { return triples.removeNext(); } @Override public <X extends Triple> ExtendedIterator<Triple> andThen(Iterator<X> other) { throw new UnsupportedOperationException(); } @Override public ExtendedIterator<Triple> filterKeep(Predicate<Triple> predicate) { return triples.filterKeep(predicate); } @Override public ExtendedIterator<Triple> filterDrop(Predicate<Triple> predicate) { return triples.filterDrop(predicate); } @Override public <U> ExtendedIterator<U> mapWith(Function<Triple, U> function) { return triples.mapWith(function); } @Override public List<Triple> toList() { return triples.toList(); } @Override public Set<Triple> toSet() { return triples.toSet(); } @Override public void close() { triples.close(); } @Override public boolean hasNext() { Boolean hasNext = triples.hasNext(); if(!hasNext) { if(ldfIterator.hasNext()) { triples = ldfIterator.next().getTriples(); if(triples.hasNext()) { return true; } else { return false; } } else { return false; } } else { return hasNext; } } @Override public Triple next() { Boolean hasNext = triples.hasNext(); if(!hasNext) { if(ldfIterator.hasNext()) { triples = ldfIterator.next().getTriples(); if(triples.hasNext()) { return triples.next(); } else { return null; } } else { return null; } } else { return triples.next(); } } @Override public void remove() { } }