This is an automated email from the ASF dual-hosted git repository. afs pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit 0593354effbb20ee9494b548170737f16f8303de Author: Andy Seaborne <[email protected]> AuthorDate: Thu May 7 19:17:12 2026 +0100 GH-3908: riot - flush on error and warning --- apache-jena/cmd-maker | 3 +- .../src/main/java/org/apache/jena/cmd/CmdMain.java | 1 - jena-cmds/src/main/java/riotcmd/CmdLangParse.java | 75 +++++++++------------- .../src/main/java/riotcmd/ErrorHandlerCLI.java | 41 ++++++++---- 4 files changed, 63 insertions(+), 57 deletions(-) diff --git a/apache-jena/cmd-maker b/apache-jena/cmd-maker index 4c957871c2..92b497babd 100755 --- a/apache-jena/cmd-maker +++ b/apache-jena/cmd-maker @@ -17,7 +17,7 @@ ## limitations under the License. # Not xloader -## xloader (forerly "TDB 1 tdbloader2") is slightly different. +## xloader (formerly, "TDB 1 tdbloader2") is slightly different. ## The main program is not a java program ## It is split into several scripts that leverage a mixture of ## POSIX and java tools and should be maintained separately @@ -36,7 +36,6 @@ jena.schemagen arq.rdfdiff arq.sparql arq.arq -arq.juuid arq.rsparql arq.rset arq.qparse diff --git a/jena-cmds/src/main/java/org/apache/jena/cmd/CmdMain.java b/jena-cmds/src/main/java/org/apache/jena/cmd/CmdMain.java index 93340f4991..6279fbad2d 100644 --- a/jena-cmds/src/main/java/org/apache/jena/cmd/CmdMain.java +++ b/jena-cmds/src/main/java/org/apache/jena/cmd/CmdMain.java @@ -90,7 +90,6 @@ public abstract class CmdMain extends CmdGeneral return 0; } - protected abstract void exec(); protected final void mainMethod() { diff --git a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java index 7f7e0f832a..8147da71b7 100644 --- a/jena-cmds/src/main/java/riotcmd/CmdLangParse.java +++ b/jena-cmds/src/main/java/riotcmd/CmdLangParse.java @@ -126,27 +126,13 @@ public abstract class CmdLangParse extends CmdMain { void postParse(); } - protected static class ParseRecord { - // Display name (filename as given on the command line) - final String filename; - // Resolved filename as a URL string. - final String sourceURL; - final boolean success; - final long timeMillis; - final long triples; - final long quads; - final long tuples = 0; - final ErrorHandlerCLI errHandler; - - public ParseRecord(String filename, String sourceURL, boolean successful, long timeMillis, long countTriples, long countQuads, - ErrorHandlerCLI errHandler) { - this.filename = filename; - this.sourceURL = sourceURL; - this.success = successful; - this.timeMillis = timeMillis; - this.triples = countTriples; - this.quads = countQuads; - this.errHandler = errHandler; + protected record ParseRecord(String filename, String sourceURL, boolean success, long timeMillis, + long triples, long quads, long tuples, ErrorHandlerCLI errHandler) { + // Default tuples to 0 + ParseRecord(String filename, String sourceURL, boolean success, long timeMillis, + long triples, long quads, + ErrorHandlerCLI errHandler) { + this(filename, sourceURL, success, timeMillis,triples, quads, 0L, errHandler); } } @@ -364,14 +350,6 @@ public abstract class CmdLangParse extends CmdMain { if ( passRelativeURIs ) stopOnWarnings = false; - ErrorHandlerCLI errHandler = new ErrorHandlerCLI - (ErrorHandlerFactory.stdLogger - , passRelativeURIs // Silent warnings if allowing relative URIs. - , true // Fail on error - , stopOnWarnings // Fail on warnings - ); - builder.errorHandler(errHandler); - // Make into a cmd flag. (input and output subflags?) final boolean labelsAsGiven = false; // NodeToLabel labels = SyntaxLabels.createNodeToLabel() ; @@ -381,20 +359,30 @@ public abstract class CmdLangParse extends CmdMain { builder.labelToNode(LabelToNode.createUseLabelAsGiven()); // Build parser output additions. - StreamRDF s = parserOutputStream; - if ( setupRDFS != null ) { - // Remove literals as subjects - s = RDFSFactory.removeGeneralizedRDF(s); - // Generate RDFS (this feeds into the stream created above). - s = RDFSFactory.streamRDFS(s, setupRDFS); - // Parser sends data to RDFS, which goes to the filter, then to parserOutputStream + StreamRDFCounting parserOut; + { + StreamRDF s = parserOutputStream; + if ( setupRDFS != null ) { + // Remove literals as subjects + s = RDFSFactory.removeGeneralizedRDF(s); + // Generate RDFS (this feeds into the stream created above). + s = RDFSFactory.streamRDFS(s, setupRDFS); + // Parser sends data to RDFS, which goes to the filter, then to parserOutputStream + } + // If added here, count is quads and triples seen in the input. + if ( modLangParse.mergeQuads() ) + s = new QuadsToTriples(s); + parserOut = StreamRDFLib.count(s); + s = null; } - // If added here, count is quads and triples seen in the input. - if ( modLangParse.mergeQuads() ) - s = new QuadsToTriples(s); - StreamRDFCounting parserOut = StreamRDFLib.count(s); - s = null; + ErrorHandlerCLI errHandler = ErrorHandlerCLI.errorHandlerTracking(ErrorHandlerFactory.stdLogger, + passRelativeURIs, // Silent warnings if allowing relative URIs. + true, // Fail on error + stopOnWarnings, // Fail on warnings + ()->parserOut.finish() // Flush to align log messages + ); + builder.errorHandler(errHandler); boolean successful = true; modTime.startTimer(); @@ -412,8 +400,9 @@ public abstract class CmdLangParse extends CmdMain { successful = false; } parserOut.finish(); - long x = modTime.endTimer(); - ParseRecord outcome = new ParseRecord(filenameLabel, sourceURL, successful, x, parserOut.countTriples(), parserOut.countQuads(), errHandler); + long elapsedTime_ms = modTime.endTimer(); + ParseRecord outcome = new ParseRecord(filenameLabel, sourceURL, successful, elapsedTime_ms, + parserOut.countTriples(), parserOut.countQuads(), errHandler); return outcome; } diff --git a/jena-cmds/src/main/java/riotcmd/ErrorHandlerCLI.java b/jena-cmds/src/main/java/riotcmd/ErrorHandlerCLI.java index 5b84ccb8c1..311c9115cd 100644 --- a/jena-cmds/src/main/java/riotcmd/ErrorHandlerCLI.java +++ b/jena-cmds/src/main/java/riotcmd/ErrorHandlerCLI.java @@ -32,21 +32,29 @@ import org.slf4j.Logger; */ class ErrorHandlerCLI implements ErrorHandler { - /** Logs warnings and errors while tracking the counts of each and optionally throwing exceptions when errors and/or warnings are encounted */ - static ErrorHandlerCLI errorHandlerTracking(Logger log, boolean silentWarnings, boolean failOnError, boolean failOnWarning) - { return new ErrorHandlerCLI(log, silentWarnings, failOnError, failOnWarning); } + /** + * Logs warnings and errors while tracking the counts of each and optionally + * throwing exceptions when errors and/or warnings are encountered. + */ + static ErrorHandlerCLI errorHandlerTracking(Logger log, boolean silentWarnings, + boolean failOnError, boolean failOnWarning, Runnable onMessage) { + return new ErrorHandlerCLI(log, silentWarnings, failOnError, failOnWarning, onMessage); + } private final Logger log ; private final boolean silentWarnings; private final boolean failOnError; private final boolean failOnWarning; - private long errorCount, warningCount; + private final Runnable onMessage; + private long errorCount = 0; + private long warningCount = 0; - public ErrorHandlerCLI(Logger log, boolean silentWarnings, boolean failOnError, boolean failOnWarning) { + private ErrorHandlerCLI(Logger log, boolean silentWarnings, boolean failOnError, boolean failOnWarning, Runnable onMessage) { this.log = log ; this.silentWarnings = silentWarnings; this.failOnError = failOnError; this.failOnWarning = failOnWarning; + this.onMessage = onMessage; } /** report a warning */ @@ -95,21 +103,32 @@ class ErrorHandlerCLI implements ErrorHandler { return hadErrors() || hadWarnings(); } + private void onLogMessage() { + if ( onMessage != null ) + onMessage.run(); + } + /** report a warning */ private void logWarning(String message, long line, long col) { - if ( log != null ) - log.warn(fmtMessage(message, line, col)) ; + if ( log == null ) + return; + onLogMessage(); + log.warn(fmtMessage(message, line, col)) ; } /** report an error */ private void logError(String message, long line, long col) { - if ( log != null ) - log.error(fmtMessage(message, line, col)) ; + if ( log == null ) + return; + onLogMessage(); + log.error(fmtMessage(message, line, col)) ; } /** report a catastrophic error */ private void logFatal(String message, long line, long col) { - if ( log != null ) - logError(message, line, col) ; + if ( log == null ) + return; + onLogMessage(); + logError(message, line, col) ; } }
