import com.hp.hpl.jena.graph.Triple;
import org.apache.jena.riot.Lang;
import org.apache.jena.riot.RiotReader;
import org.apache.jena.riot.lang.LangRIOT;
import org.apache.jena.riot.lang.PipedRDFIterator;
import org.apache.jena.riot.lang.PipedRDFStream;
import org.apache.jena.riot.lang.PipedTriplesStream;
import org.apache.jena.riot.system.ErrorHandler;
import org.apache.jena.riot.system.ParserProfile;
import org.apache.jena.riot.system.RiotLib;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class JenaStreamTest {
    protected PipedRDFIterator rdfIter;
    protected PipedRDFStream rdfInputStream;
    protected Lang lang;

    public static void main(String[] args) throws FileNotFoundException {
        JenaStreamTest main = new JenaStreamTest();
        main.run(args);
    }

    public void run(String[] args) throws FileNotFoundException {
        System.err.println("Jean streaming test...");

        final String fsname = "/tmp/badchar.ttl";
        final InputStream in = new FileInputStream(fsname);

        lang = Lang.TURTLE;
        rdfIter = new PipedRDFIterator<Triple>();
        rdfInputStream = new PipedTriplesStream(rdfIter);

        // Create a runnable for our parser thread
        Runnable parser = new Runnable() {
            @Override
            public void run() {
                LangRIOT parser = RiotReader.createParser(in, lang, fsname, rdfInputStream);
                parser.parse();
            }
        };

        // Run it
        new Thread(parser).start();

        if (rdfIter.hasNext()) {
            System.err.println("But wait, there's more!");
        }
    }
}
