Refactor WebContent.determineCT to make the arguments clearer. Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/4491980b Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/4491980b Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/4491980b
Branch: refs/heads/master Commit: 4491980bfed389f6d42d8408026c81adb90a6532 Parents: 88836ee Author: Andy Seaborne <[email protected]> Authored: Tue Sep 23 14:41:23 2014 +0100 Committer: Andy Seaborne <[email protected]> Committed: Tue Sep 23 14:41:23 2014 +0100 ---------------------------------------------------------------------- .../java/org/apache/jena/riot/RDFDataMgr.java | 101 +++++++++++++------ .../java/org/apache/jena/riot/ResultSetMgr.java | 2 +- .../java/org/apache/jena/riot/WebContent.java | 37 +++++-- .../org/apache/jena/riot/system/StreamOps.java | 2 +- .../jena/riot/writer/TriGWriterBlocks.java | 9 +- .../apache/jena/riot/writer/TriGWriterFlat.java | 9 +- .../jena/riot/writer/TurtleWriterBlocks.java | 9 +- .../jena/riot/writer/TurtleWriterFlat.java | 9 +- .../apache/jena/riot/writer/WriterStream.java | 76 -------------- .../riot/writer/WriterStreamRDFBatched.java | 75 +++++++------- .../jena/riot/writer/WriterStreamRDFBlocks.java | 89 +++++++--------- 11 files changed, 193 insertions(+), 225 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java index 7f38f7b..284b1c3 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java @@ -67,6 +67,7 @@ import com.hp.hpl.jena.sparql.util.Utils ; * <li>{@code parse} -- Read data and send to an {@link StreamRDF}</li> * <li>{@code open} -- Open a typed input stream to the location, using any alternative locations</li> * <li>{@code write} -- Write Model/Dataset etc</li> + * <li>{@code create} -- Create a reader or writer explicitly</li> * </ul> */ @@ -80,16 +81,8 @@ public class RDFDataMgr static Logger log = LoggerFactory.getLogger(RDFDataMgr.class) ; private static String riotBase = "http://jena.apache.org/riot/" ; -// private static String dataStreamManagerSymbolStr = riotBase+"dataStreamManager" ; -// public static Symbol dataStreamManagerSymbol = Symbol.create(dataStreamManagerSymbolStr) ; -// -// private static String StreamManagerSymbolStr = riotBase+"streamManager" ; -// /** @deprecated Use {@linkplain #dataStreamManagerSymbol} */ -// @Deprecated -// public static Symbol streamManagerSymbolOld = Symbol.create(riotBase+"streamManager") ; - - private static String StreamManagerSymbolStr = riotBase+"streamManager" ; - public static Symbol streamManagerSymbol = Symbol.create(riotBase+"streamManager") ; + private static String StreamManagerSymbolStr = riotBase+"streamManager" ; + public static Symbol streamManagerSymbol = Symbol.create(riotBase+"streamManager") ; /** Read triples into a Model from the given location. * The syntax is detemined from input source URI (content negotiation or extension). @@ -326,8 +319,6 @@ public class RDFDataMgr private static DatasetGraph createDatasetGraph() { return DatasetGraphFactory.createMem() ; } // Load: - // Macros would be nice. - /** Create a memory Model and read in some data * @see #read(Model,String) */ @@ -885,33 +876,51 @@ public class RDFDataMgr return in ; } - // ----- - // Readers are algorithms and must be stateless (or they must create a per run - // instance of something) because they may be called concurrency from different threads. - // The Context Readerobject gives the per-run configuration. - - // Alternative: A two step factory-instance design means - // readers can be created and passed around (e,.g. to set specific features) - // We could have had two step design - ReaderFactory-ReaderInstance - // no - put the bruden on complicated readers, not everyone. - - private static void process(StreamRDF destination, TypedInputStream in, String baseUri, Lang hintLang, Context context) - { - ContentType ct = WebContent.determineCT(baseUri, in.getContentType(), hintLang) ; + // ----- + // Readers are algorithms and must be stateless (or they must create a per + // run instance of something) because they may be called concurrency from + // different threads. The Context Reader object gives the per-run + // configuration. + + private static void process(StreamRDF destination, TypedInputStream in, String baseUri, Lang lang, Context context) + { + // Issue is whether lang overrides all. + // Not in the case of remote conneg, no file extension, when lang is default. +// // ---- NEW +// if ( lang != null ) { +// ReaderRIOT reader = createReader(lang) ; +// if ( reader == null ) +// throw new RiotException("No parser registered for language: "+lang.getLabel()) ; +// reader.read(in, baseUri, lang.getContentType(), destination, context) ; +// return ; +// } +// // ---- NEW + + ContentType ct = WebContent.determineCT(in.getContentType(), lang, baseUri) ; if ( ct == null ) - throw new RiotException("Failed to determine the content type: (URI="+baseUri+" : stream="+in.getContentType()+" : hint="+hintLang+")") ; + throw new RiotException("Failed to determine the content type: (URI="+baseUri+" : stream="+in.getContentType()+")") ; ReaderRIOT reader = getReader(ct) ; if ( reader == null ) throw new RiotException("No parser registered for content type: "+ct.getContentType()) ; reader.read(in, baseUri, ct, destination, context) ; } - + // java.io.Readers are NOT preferred. private static void process(StreamRDF destination, Reader in, String baseUri, Lang lang, Context context ) { +// // ---- NEW +// if ( lang != null ) { +// ReaderRIOT reader = createReader(lang) ; +// if ( reader == null ) +// throw new RiotException("No parser registered for language: "+lang.getLabel()) ; +// reader.read(in, baseUri, lang.getContentType(), destination, context) ; +// return ; +// } +// // ---- NEW + // Not as good as from an InputStream - ContentType ct = WebContent.determineCT(baseUri, null, lang) ; + ContentType ct = WebContent.determineCT(null, lang, baseUri) ; if ( ct == null ) throw new RiotException("Failed to determine the content type: (URI="+baseUri+" : hint="+lang+")") ; ReaderRIOT reader = getReader(ct) ; @@ -920,6 +929,38 @@ public class RDFDataMgr reader.read(in, baseUri, ct, destination, context) ; } +// ///---- NEW / rewrite +// // Lang is definitive. needs further consideration +// private static void process2(StreamRDF destination, TypedInputStream in, String uri, Lang givenLang, Context context) +// { +// Pair<Lang, ContentType> p = selectLang(in.getMediaType(), uri, givenLang, context) ; +// Lang lang = p.getLeft() ; +// ContentType ct = p.getRight() ; +// +// if ( lang == null ) +// throw new RiotException("Syntax not identified (URI="+uri+" : stream="+in.getContentType()+")") ; +// +// ReaderRIOT reader = createReader(lang) ; +// if ( reader == null ) +// throw new RiotException("No parser registered for lang: "+lang.getLabel()) ; +// reader.read(in, uri, ct, destination, context) ; +// } +// +// private static Pair<Lang, ContentType> selectLang(ContentType ct, String uri, Lang lang, Context context) { +// if ( lang != null ) +// return Pair.create(lang, lang.getContentType()) ; +// +// Lang ctLang = RDFLanguages.contentTypeToLang(ct) ; +// if ( ctLang != null ) +// return Pair.create(ctLang, ct) ; +// +// Lang filenameLang = RDFLanguages.filenameToLang(uri) ; +// if ( filenameLang != null ) +// return Pair.create(filenameLang, filenameLang.getContentType()) ; +// return null ; +// } +// ///---- NEW + /** * @see RDFLanguages#shortnameToLang to go from Jena short name to {@linkplain Lang} * @see RDFLanguages#contentTypeToLang to go from content type to {@linkplain Lang} @@ -947,7 +988,7 @@ public class RDFDataMgr /** Determine the Lang, given the URI target, any content type header string and a hint */ public static Lang determineLang(String target, String ctStr, Lang hintLang) { - ContentType ct = WebContent.determineCT(target, ctStr, hintLang) ; + ContentType ct = WebContent.determineCT(ctStr, hintLang, target) ; if ( ct == null ) return hintLang ; Lang lang = RDFLanguages.contentTypeToLang(ct) ; @@ -1226,7 +1267,7 @@ public class RDFDataMgr RDFFormat serialization = RDFWriterRegistry.defaultSerialization(lang) ; return createGraphWriter$(serialization) ; } - + /** Create a writer for an RDF language * @param serialization Serialization format * @return WriterGraphRIOT http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java b/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java index ded6a79..0a18e0c 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java @@ -129,7 +129,7 @@ public class ResultSetMgr { } private static ResultSet process(TypedInputStream in, String srcURI, Lang hintLang, Context context) { - ContentType ct = WebContent.determineCT(srcURI, in.getContentType(), hintLang) ; + ContentType ct = WebContent.determineCT(in.getContentType(), hintLang, srcURI) ; if ( ct == null ) throw new RiotException("Failed to determine the content type: (URI="+srcURI+" : stream="+in.getContentType()+" : hint="+hintLang+")") ; ResultSetReader reader = getReader(ct) ; http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java b/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java index 6e49ef5..fd5875f 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java @@ -214,18 +214,35 @@ public class WebContent return contentTypeMultipartFormData.equalsIgnoreCase(ct.getContentType()) ; } - /** Determine the content type to be used, given the target URL, the content-type from + /** + * <p> + * Determine the content type to be used, given the target URL, the content-type from * Content Negotiation and a hint language. This is a pragmatic balance. - * A content-type of "text/plain" is ignored - it is too often wrong. + * A content-type of "text/plain" is ignored - it is too often wrong. + * </p><p> + * The decision is + * <blockquote> + * <i>Content type</i> (but not text/plain) > <i>hint</i> > <i>file extension</i>. + * </blockquote> + * We make content type (via content negotiation) strongest because a server + * may return something unexpected because that is all it can do. We are + * assuming servers don't lie. The "hint" is really a hint just for file extenion override. + * </p><p> + * In the case of no file extension, this reduces to the hint being + * the default choice if conneg does not produce anything useful. + * </p> + * + * @param contentTypeStr Content-Type string + * @param hintLang Default language + * @param target The URL of the target (file extension may be used) + * + * @return ContentType or null */ - public static ContentType determineCT(String target, String ctStr, Lang hintLang) { - boolean isTextPlain = contentTypeTextPlain.equals(ctStr) ; + public static ContentType determineCT(String contentTypeStr, Lang hintLang, String target) { + boolean isTextPlain = contentTypeTextPlain.equals(contentTypeStr) ; - if ( ctStr != null ) - ctStr = contentTypeCanonical(ctStr) ; - - // The decision is: - // Content type (but not text/plain) > hint > file extension. + if ( contentTypeStr != null ) + contentTypeStr = contentTypeCanonical(contentTypeStr) ; // If it's text plain, we ignore it because a lot of naive // server setups return text/plain for any file type. @@ -234,7 +251,7 @@ public class WebContent ContentType ct = null ; if ( ! isTextPlain ) // Not guaranteed to be registered as a language here. - ct = (ctStr==null) ? null : ContentType.create(ctStr) ; + ct = (contentTypeStr==null) ? null : ContentType.create(contentTypeStr) ; if ( ct == null && hintLang != null ) ct = hintLang.getContentType() ; http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamOps.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamOps.java b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamOps.java index 4ad7fd1..fff48c5 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/system/StreamOps.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/system/StreamOps.java @@ -81,7 +81,7 @@ public class StreamOps { } // -// /** Send a dataset to a StreamRDF as triples and quads, using the xpelcitily given prefix map */ +// /** Send a dataset to a StreamRDF as triples and quads, using the explicitly given prefix map */ // public static void datasetToStream(DatasetGraph datasetGraph, StreamRDF stream, PrefixMap prefixMap) { // // } http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterBlocks.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterBlocks.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterBlocks.java index fbe1308..a2740fb 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterBlocks.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterBlocks.java @@ -20,6 +20,7 @@ package org.apache.jena.riot.writer; import org.apache.jena.atlas.io.IndentedWriter ; import org.apache.jena.riot.system.PrefixMap ; +import org.apache.jena.riot.system.StreamOps ; import org.apache.jena.riot.system.StreamRDF ; import com.hp.hpl.jena.sparql.core.DatasetGraph ; @@ -30,10 +31,12 @@ import com.hp.hpl.jena.sparql.core.DatasetGraph ; public class TriGWriterBlocks extends TriGWriterBase { @Override - protected void output(IndentedWriter iOut, DatasetGraph dsg, PrefixMap prefixMap, String baseURI) - { + protected void output(IndentedWriter iOut, DatasetGraph dsg, PrefixMap prefixMap, String baseURI) { StreamRDF dest = new WriterStreamRDFBlocks(iOut) ; - WriterStream.write(dest, dsg, prefixMap, baseURI) ; + dest.start() ; + dest.base(baseURI) ; + StreamOps.sendDatasetToStream(dsg, dest, prefixMap) ; + dest.finish() ; } } http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterFlat.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterFlat.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterFlat.java index 54ef31d..66ea06c 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterFlat.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/TriGWriterFlat.java @@ -20,6 +20,7 @@ package org.apache.jena.riot.writer; import org.apache.jena.atlas.io.IndentedWriter ; import org.apache.jena.riot.system.PrefixMap ; +import org.apache.jena.riot.system.StreamOps ; import org.apache.jena.riot.system.StreamRDF ; import com.hp.hpl.jena.sparql.core.DatasetGraph ; @@ -31,9 +32,11 @@ import com.hp.hpl.jena.sparql.core.DatasetGraph ; public class TriGWriterFlat extends TriGWriterBase { @Override - protected void output(IndentedWriter iOut, DatasetGraph datasetGraph, PrefixMap prefixMap, String baseURI) - { + protected void output(IndentedWriter iOut, DatasetGraph datasetGraph, PrefixMap prefixMap, String baseURI) { StreamRDF dest = new WriterStreamRDFFlat(iOut) ; - WriterStream.write(dest, datasetGraph, prefixMap, baseURI) ; + dest.start() ; + dest.base(baseURI) ; + StreamOps.sendDatasetToStream(datasetGraph, dest, prefixMap) ; + dest.finish() ; } } http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterBlocks.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterBlocks.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterBlocks.java index 5013dc8..90bc962 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterBlocks.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterBlocks.java @@ -20,6 +20,7 @@ package org.apache.jena.riot.writer; import org.apache.jena.atlas.io.IndentedWriter ; import org.apache.jena.riot.system.PrefixMap ; +import org.apache.jena.riot.system.StreamOps ; import org.apache.jena.riot.system.StreamRDF ; import com.hp.hpl.jena.graph.Graph ; @@ -30,10 +31,12 @@ import com.hp.hpl.jena.graph.Graph ; public class TurtleWriterBlocks extends TurtleWriterBase { @Override - protected void output(IndentedWriter out, Graph graph, PrefixMap prefixMap, String baseURI) - { + protected void output(IndentedWriter out, Graph graph, PrefixMap prefixMap, String baseURI) { StreamRDF dest = new WriterStreamRDFBlocks(out) ; - WriterStream.write(dest, graph, prefixMap, baseURI) ; + dest.start() ; + dest.base(baseURI) ; + StreamOps.sendGraphToStream(graph, dest, prefixMap) ; + dest.finish() ; } } http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterFlat.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterFlat.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterFlat.java index 6bf4704..9770b04 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterFlat.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/TurtleWriterFlat.java @@ -20,6 +20,7 @@ package org.apache.jena.riot.writer; import org.apache.jena.atlas.io.IndentedWriter ; import org.apache.jena.riot.system.PrefixMap ; +import org.apache.jena.riot.system.StreamOps ; import org.apache.jena.riot.system.StreamRDF ; import com.hp.hpl.jena.graph.Graph ; @@ -28,9 +29,11 @@ import com.hp.hpl.jena.graph.Graph ; public class TurtleWriterFlat extends TurtleWriterBase { @Override - protected void output(IndentedWriter out, Graph graph, PrefixMap prefixMap, String baseURI) - { + protected void output(IndentedWriter out, Graph graph, PrefixMap prefixMap, String baseURI) { StreamRDF dest = new WriterStreamRDFFlat(out) ; - WriterStream.write(dest, graph, prefixMap, baseURI) ; + dest.start() ; + dest.base(baseURI) ; + StreamOps.sendGraphToStream(graph, dest, prefixMap) ; + dest.finish() ; } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStream.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStream.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStream.java deleted file mode 100644 index f794f91..0000000 --- a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStream.java +++ /dev/null @@ -1,76 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.jena.riot.writer; - -import java.util.Iterator ; -import java.util.Map.Entry ; - -import org.apache.jena.riot.system.PrefixMap ; -import org.apache.jena.riot.system.StreamOps ; -import org.apache.jena.riot.system.StreamRDF ; - -import com.hp.hpl.jena.graph.Graph ; -import com.hp.hpl.jena.graph.Triple ; -import com.hp.hpl.jena.sparql.core.DatasetGraph ; -import com.hp.hpl.jena.sparql.core.Quad ; - -/** Library class with helpers for writing streams of RDF (as {@linkplain StreamRDF}) */ -public class WriterStream -{ - // In development. - // This is really utilities for StreamRDF and should go into StreamRDFLib. - // It's the nature of the StreamRDF that does the writing. - private WriterStream() {} - - protected static void finish(StreamRDF dest) - { dest.finish() ; } - - protected static void start(StreamRDF dest) - { dest.start() ; } - - protected static void writePrefixes(StreamRDF dest, PrefixMap prefixMap) - { - if ( prefixMap != null ) - { - for ( Entry<String, String> e : prefixMap.getMappingCopyStr().entrySet()) - dest.prefix(e.getKey(), e.getValue()) ; - } - } - - protected static void write(StreamRDF dest, DatasetGraph datasetGraph, PrefixMap prefixes, String baseURI) - { - start(dest) ; - dest.base(baseURI) ; - writePrefixes(dest, prefixes) ; - Iterator<Quad> iter = datasetGraph.find(null, null, null, null) ; - StreamOps.sendQuadsToStream(iter, dest) ; - finish(dest) ; - } - - protected static void write(StreamRDF dest, Graph graph, PrefixMap prefixes, String baseURI) - { - start(dest) ; - dest.base(baseURI) ; - writePrefixes(dest, prefixes) ; - Iterator<Triple> iter = graph.find(null, null, null) ; - StreamOps.sendTriplesToStream(iter, dest) ; - finish(dest) ; - } -} - http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBatched.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBatched.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBatched.java index 9667b62..e271557 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBatched.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBatched.java @@ -33,6 +33,8 @@ import com.hp.hpl.jena.sparql.core.Quad ; /** Convert the incoming print stream into batches. */ abstract class WriterStreamRDFBatched extends WriterStreamRDFBase { + // This has nothing to do with printing except it's under WriterStreamRDFBase + // so the operation is "print" private Node currentSubject ; private Node currentGraph ; private List<Triple> batchTriples ; @@ -53,39 +55,38 @@ abstract class WriterStreamRDFBatched extends WriterStreamRDFBase @Override protected final void endData() { flush() ; } - private void flush() - { - finishBatchTriple(currentSubject) ; + private void flush() { + finishBatchTriples(currentSubject) ; finishBatchQuad(currentGraph, currentSubject) ; finalizeRun() ; } - + @Override - protected final void reset() - { - currentSubject = null ; - currentGraph = null ; - batchTriples = null ; - batchQuads = null ; + protected final void reset() { + currentSubject = null ; + currentGraph = null ; + batchTriples = null ; + batchQuads = null ; } @Override - protected final void print(Quad quad) - { - if ( false ) - { + protected final void print(Quad quad) { + if ( false ) { // Merge to a triple stream. triple(quad.asTriple()) ; return ; } - + Node g = quad.getGraph() ; Node s = quad.getSubject() ; - - if ( ! Lib.equal(g, currentGraph) || ! Lib.equal(s, currentSubject) ) - { - if ( currentSubject != null ) - finishBatchQuad(currentGraph, currentSubject) ; + + if ( !Lib.equal(g, currentGraph) || !Lib.equal(s, currentSubject) ) { + if ( currentSubject != null ) { + if ( currentGraph == null ) + finishBatchTriples(currentSubject) ; + else + finishBatchQuad(currentGraph, currentSubject) ; + } startBatchQuad(g, s) ; currentGraph = g ; currentSubject = s ; @@ -94,13 +95,11 @@ abstract class WriterStreamRDFBatched extends WriterStreamRDFBase } @Override - protected final void print(Triple triple) - { + protected final void print(Triple triple) { Node s = triple.getSubject() ; - if ( ! Lib.equal(s, currentSubject) ) - { + if ( !Lib.equal(s, currentSubject) ) { if ( currentSubject != null ) - finishBatchTriple(currentSubject) ; + finishBatchTriples(currentSubject) ; startBatchTriple(s) ; currentGraph = null ; @@ -108,40 +107,34 @@ abstract class WriterStreamRDFBatched extends WriterStreamRDFBase } processTriple(triple) ; } - - private void startBatchTriple(Node subject) - { + + private void startBatchTriple(Node subject) { batchTriples = new ArrayList<>() ; } - - private void processTriple(Triple triple) - { + + private void processTriple(Triple triple) { batchTriples.add(triple) ; } - private void finishBatchTriple(Node subject) - { + private void finishBatchTriples(Node subject) { if ( batchTriples != null && batchTriples.size() > 0 ) { printBatchTriples(currentSubject, batchTriples) ; batchTriples.clear() ; } } - private void startBatchQuad(Node graph, Node subject) - { + private void startBatchQuad(Node graph, Node subject) { batchQuads = new ArrayList<>() ; } - - private void processQuad(Quad Quad) - { + + private void processQuad(Quad Quad) { batchQuads.add(Quad) ; } - private void finishBatchQuad(Node graph, Node subject) - { + private void finishBatchQuad(Node graph, Node subject) { if ( batchQuads != null && batchQuads.size() > 0 ) { printBatchQuads(currentGraph, currentSubject, batchQuads) ; - batchQuads.clear(); + batchQuads.clear() ; } } http://git-wip-us.apache.org/repos/asf/jena/blob/4491980b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBlocks.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBlocks.java b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBlocks.java index 4513848..23819ea 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBlocks.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/writer/WriterStreamRDFBlocks.java @@ -70,69 +70,59 @@ public class WriterStreamRDFBlocks extends WriterStreamRDFBatched protected boolean firstGraph = true ; protected int currentGraphIndent = 0; - public WriterStreamRDFBlocks(OutputStream output) - { + public WriterStreamRDFBlocks(OutputStream output) { super(output) ; } - - public WriterStreamRDFBlocks(Writer output) - { + + public WriterStreamRDFBlocks(Writer output) { super(output) ; } - public WriterStreamRDFBlocks(IndentedWriter output) - { + public WriterStreamRDFBlocks(IndentedWriter output) { super(output) ; } - + @Override - protected void printBatchQuads(Node g, Node s, List<Quad> quads) - { + protected void printBatchQuads(Node g, Node s, List<Quad> quads) { if ( g == null ) g = Quad.defaultGraphNodeGenerated ; - if ( Lib.equal(g, lastGraph )) - { + if ( Lib.equal(g, lastGraph) ) { // Same graph, different subject. out.println(" .") ; out.println() ; - } - else - { + } else { // Start graph endGraph(g) ; startGraph(g) ; lastGraph = g ; } - List<Triple> triples = GLib.quads2triples(quads.iterator()).toList(); + List<Triple> triples = GLib.quads2triples(quads.iterator()).toList() ; printBatch(s, triples) ; // No trailing "." has been printed. lastSubject = s ; } - private void gap(int gap) - { + private void gap(int gap) { out.print(' ', gap) ; } @Override - protected void printBatchTriples(Node s, List<Triple> triples) - { + protected void printBatchTriples(Node s, List<Triple> triples) { // Blank line? // Not if not prefixes and first batch. if ( out.getRow() > 1 ) out.println() ; - + printBatch(s, triples) ; // End of cluster. out.print(" .") ; - out.println() ; + out.println() ; } - private void printBatch(Node s, List<Triple> triples) - { + private void printBatch(Node s, List<Triple> triples) { outputNode(s) ; if ( out.getCol() > LONG_SUBJECT ) - out.println() ; + out.println() ; else gap(GAP_S_P) ; out.incIndent(INDENT_PREDICATE) ; @@ -141,18 +131,16 @@ public class WriterStreamRDFBlocks extends WriterStreamRDFBatched out.decIndent(INDENT_PREDICATE) ; } - private void writePredicateObjectList(Collection<Triple> triples) - { + private void writePredicateObjectList(Collection<Triple> triples) { // Find width int predicateMaxWidth = RiotLib.calcWidthTriples(pMap, baseURI, triples, MIN_PREDICATE, LONG_PREDICATE) ; boolean first = true ; - for ( Triple triple : triples ) - { - if ( ! first ) + for ( Triple triple : triples ) { + if ( !first ) out.println(" ;") ; else first = false ; - + Node p = triple.getPredicate() ; outputNode(p) ; out.pad(predicateMaxWidth) ; @@ -163,8 +151,7 @@ public class WriterStreamRDFBlocks extends WriterStreamRDFBatched } @Override - protected void finalizeRun() - { + protected void finalizeRun() { if ( lastGraph != null ) // last was a quad endGraph(null) ; @@ -173,34 +160,30 @@ public class WriterStreamRDFBlocks extends WriterStreamRDFBatched protected boolean dftGraph() { return lastGraph == Quad.defaultGraphNodeGenerated ; } protected boolean dftGraph(Node g) { return g == Quad.defaultGraphNodeGenerated ; } - protected void startGraph(Node g) - { + protected void startGraph(Node g) { // Start graph - if ( lastGraph == null ) - { - boolean NL_START = ( dftGraph(g) ? NL_GDFT_START : NL_GNMD_START ) ; - - if ( ! firstGraph ) + if ( lastGraph == null ) { + boolean NL_START = (dftGraph(g) ? NL_GDFT_START : NL_GNMD_START) ; + + if ( !firstGraph ) out.println() ; firstGraph = false ; - + lastSubject = null ; - if ( ! dftGraph(g) ) - { + if ( !dftGraph(g) ) { outputNode(g) ; out.print(" ") ; } - + if ( NL_START ) out.println("{") ; else out.print("{ ") ; - + if ( dftGraph() ) setGraphIndent(INDENT_GDFT) ; - else - { - int x = NL_START ? INDENT_GNMD : out.getCol() ; + else { + int x = NL_START ? INDENT_GNMD : out.getCol() ; setGraphIndent(x) ; } out.incIndent(graphIndent()) ; @@ -208,15 +191,13 @@ public class WriterStreamRDFBlocks extends WriterStreamRDFBatched lastGraph = g ; } - protected void endGraph(Node g) - { + protected void endGraph(Node g) { if ( lastGraph == null ) return ; - + // End of graph - if ( ! equal(lastGraph, g) ) - { - boolean NL_END = ( dftGraph(g) ? NL_GDFT_END : NL_GNMD_END ) ; + if ( !equal(lastGraph, g) ) { + boolean NL_END = (dftGraph(g) ? NL_GDFT_END : NL_GNMD_END) ; if ( lastSubject != null ) out.print(" .") ;
