/* * 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 arq.cmdline; import jena.cmd.ArgDecl; import jena.cmd.CmdArgModule; import jena.cmd.CmdGeneral; import jena.cmd.ModBase; import jena.cmd.TerminationException; import org.apache.jena.query.ResultSet ; import org.apache.jena.query.ResultSetFactory ; import org.apache.jena.shared.NotFoundException ; import org.apache.jena.sparql.ARQInternalErrorException ; import org.apache.jena.sparql.resultset.ResultsFormat ; public class ModResultsIn extends ModBase { protected final ArgDecl resultsInputFmtDecl = new ArgDecl(ArgDecl.HasValue, "in") ; protected final ArgDecl fileDecl = new ArgDecl(ArgDecl.HasValue, "file") ; private ResultsFormat inputFormat = ResultsFormat.FMT_TEXT ; private String resultsFilename = null ; private ResultSet resultSet = null ; @Override public void registerWith(CmdGeneral cmdLine) { cmdLine.getUsage().startCategory("Results") ; cmdLine.add(fileDecl, "--file", "Input file") ; cmdLine.add(resultsInputFmtDecl, "--in", "Results format (XML, JSON; RDF serialization)") ; } @Override public void processArgs(CmdArgModule cmdline) throws IllegalArgumentException { // Input file. if ( cmdline.contains(fileDecl) ) resultsFilename = cmdline.getValue(fileDecl) ; if ( cmdline.getNumPositional() == 0 && resultsFilename == null ) cmdline.cmdError("No results file") ; if ( cmdline.getNumPositional() > 1 ) cmdline.cmdError("Only one result set file allowed") ; if ( cmdline.getNumPositional() == 1 && resultsFilename != null ) cmdline.cmdError("Either result set file or --file - not both") ; if ( resultsFilename == null ) // One positional argument. resultsFilename = cmdline.getPositionalArg(0) ; // Guess format if ( resultsFilename != null ) inputFormat = ResultsFormat.guessSyntax(resultsFilename) ; // Set format if ( cmdline.contains(resultsInputFmtDecl) ) { String rFmt = cmdline.getValue(resultsInputFmtDecl) ; inputFormat = ResultsFormat.lookup(rFmt) ; if ( inputFormat == null ) cmdline.cmdError("Unrecognized output format: "+rFmt) ; } } public void checkCommandLine(CmdArgModule cmdLine) {} public ResultSet getResultSet() { if ( resultSet != null ) return resultSet ; if ( resultsFilename == null ) { System.err.println("No result file name" ) ; throw new TerminationException(1) ; } try { if ( resultsFilename.equals("-") ) return ResultSetFactory.load(System.in, inputFormat) ; ResultSet rs = ResultSetFactory.load(resultsFilename, inputFormat) ; if ( rs == null ) { System.err.println("Failed to read the result set") ; throw new TerminationException(9) ; } resultSet = rs ; return resultSet ; } catch (NotFoundException ex) { System.err.println("File not found: "+resultsFilename) ; throw new TerminationException(9) ; } catch (ARQInternalErrorException intEx) { System.err.println(intEx.getMessage()) ; if ( intEx.getCause() != null ) { System.err.println("Cause:") ; intEx.getCause().printStackTrace(System.err) ; System.err.println() ; } intEx.printStackTrace(System.err) ; throw new TerminationException(99) ; } } public ResultsFormat getInputFormat() { return inputFormat ; } }