package com.mysema.rdfbean.jena; import java.io.Writer; import java.util.List; import java.util.Map; import com.hp.hpl.jena.graph.Node; import com.hp.hpl.jena.graph.Triple; import com.hp.hpl.jena.n3.N3TurtleJenaWriter; import com.hp.hpl.jena.query.Dataset; import com.hp.hpl.jena.query.Query; import com.hp.hpl.jena.query.QueryExecution; import com.hp.hpl.jena.rdf.model.Model; import com.hp.hpl.jena.rdf.model.RDFWriter; import com.hp.hpl.jena.rdf.model.impl.NTripleWriter; import com.hp.hpl.jena.util.iterator.ExtendedIterator; import com.hp.hpl.jena.xmloutput.impl.Basic; import com.mysema.commons.lang.CloseableIterator; import com.mysema.rdfbean.model.Format; import com.mysema.rdfbean.model.NODE; import com.mysema.rdfbean.model.STMT; /** * @author tiwe * */ public class GraphQueryImpl extends AbstractQueryImpl { public GraphQueryImpl(Query query, Dataset dataset, JenaDialect dialect) { super(query, dataset, dialect); } @Override public boolean getBoolean() { throw new UnsupportedOperationException(); } @Override public ResultType getResultType() { return ResultType.TRIPLES; } @Override public CloseableIterator<STMT> getTriples() { QueryExecution exec = createExecution(); Model resultModel = query.isConstructType() ? exec.execConstruct() : exec.execDescribe(); ExtendedIterator<Triple> triples = resultModel.getGraph().find(Node.ANY, Node.ANY, Node.ANY); return new TriplesIterator(dialect, triples, null); } @Override public CloseableIterator<Map<String, NODE>> getTuples() { throw new UnsupportedOperationException(); } @Override public List<String> getVariables() { throw new UnsupportedOperationException(); } @Override public void streamTriples(Writer w, String contentType) { Format format = Format.getFormat(contentType, Format.RDFXML); RDFWriter writer; if (format == Format.RDFXML) { writer = new Basic(); } else if (format == Format.NTRIPLES) { writer = new NTripleWriter(); } else if (format == Format.TURTLE || format == Format.N3) { writer = new N3TurtleJenaWriter(); } else { throw new IllegalArgumentException(format.toString()); } QueryExecution exec = createExecution(); Model resultModel = query.isConstructType() ? exec.execConstruct() : exec.execDescribe(); writer.write(resultModel, w, null); } }