| /* |
| * 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.update; |
| |
| import static org.apache.jena.query.Syntax.defaultUpdateSyntax ; |
| |
| import java.io.InputStream ; |
| |
| import org.apache.jena.atlas.io.IO ; |
| import org.apache.jena.query.Syntax ; |
| import org.apache.jena.riot.system.IRIResolver ; |
| import org.apache.jena.sparql.core.Prologue ; |
| import org.apache.jena.sparql.lang.UpdateParser ; |
| import org.apache.jena.sparql.modify.UpdateRequestSink ; |
| import org.apache.jena.sparql.modify.UpdateSink ; |
| import org.apache.jena.sparql.modify.UsingList ; |
| import org.apache.jena.sparql.modify.UsingUpdateSink ; |
| |
| public class UpdateFactory |
| { |
| /** Create an empty UpdateRequest */ |
| public static UpdateRequest create() { return new UpdateRequest() ; } |
| |
| /** Create an UpdateRequest by parsing from a string. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param string The update request as a string. |
| */ |
| public static UpdateRequest create(String string) |
| { |
| return create(string, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from a string. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param string The update request as a string. |
| * @param syntax The update language syntax |
| */ |
| public static UpdateRequest create(String string, Syntax syntax) |
| { |
| return create(string, null, syntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from a string. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param string The update request as a string. |
| * @param baseURI The base URI for resolving relative URIs. |
| */ |
| public static UpdateRequest create(String string, String baseURI) |
| { |
| return create(string, baseURI, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from a string. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param string The update request as a string. |
| * @param baseURI The base URI for resolving relative URIs. |
| * @param syntax The update language syntax |
| */ |
| public static UpdateRequest create(String string, String baseURI, Syntax syntax) |
| { |
| UpdateRequest request = new UpdateRequest() ; |
| make(request, string, baseURI, syntax) ; |
| return request ; |
| } |
| |
| // Worker. |
| /** Append update operations to a request */ |
| private static void make(UpdateRequest request, String input, String baseURI, Syntax syntax) |
| { |
| UpdateParser parser = setupParser(request, baseURI, syntax) ; |
| parser.parse(new UpdateRequestSink(request), input) ; |
| } |
| |
| /* Parse operations and add to an UpdateRequest */ |
| public static void parse(UpdateRequest request, String updateString) |
| { |
| make(request, updateString, null, defaultUpdateSyntax) ; |
| } |
| |
| /* Parse operations and add to an UpdateRequest */ |
| public static void parse(UpdateRequest request, String updateString, Syntax syntax) |
| { |
| make(request, updateString, null, syntax) ; |
| } |
| |
| /* Parse operations and add to an UpdateRequest */ |
| public static void parse(UpdateRequest request, String updateString, String baseURI) |
| { |
| make(request, updateString, baseURI, defaultUpdateSyntax) ; |
| } |
| |
| /* Parse operations and add to an UpdateRequest */ |
| public static void parse(UpdateRequest request, String updateString, String baseURI, Syntax syntax) |
| { |
| make(request, updateString, baseURI, syntax) ; |
| } |
| |
| /** Append update operations to a request */ |
| protected static UpdateParser setupParser(Prologue prologue, String baseURI, Syntax syntax) |
| { |
| UpdateParser parser = UpdateParser.createParser(syntax) ; |
| |
| if ( parser == null ) |
| throw new UnsupportedOperationException("Unrecognized syntax for parsing update: "+syntax) ; |
| |
| if ( prologue.getResolver() == null ) |
| { |
| IRIResolver resolver = null ; |
| try { |
| if ( baseURI != null ) |
| // Sort out the baseURI - if that fails, dump in a dummy one and continue. |
| resolver = IRIResolver.create(baseURI) ; |
| else |
| resolver = IRIResolver.create() ; |
| } |
| catch (Exception ex) {} |
| if ( resolver == null ) |
| resolver = IRIResolver.create("http://localhost/update/defaultBase#") ; |
| prologue.setResolver(resolver) ; |
| } |
| return parser ; |
| } |
| |
| /** Create an UpdateRequest by reading it from a file */ |
| public static UpdateRequest read(UsingList usingList, String fileName) |
| { |
| return read(usingList, fileName, null, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by reading it from a file */ |
| public static UpdateRequest read(String fileName) |
| { |
| return read(fileName, fileName, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by reading it from a file */ |
| public static UpdateRequest read(String fileName, Syntax syntax) |
| { |
| return read(fileName, fileName, syntax) ; |
| } |
| |
| /** Create an UpdateRequest by reading it from a file */ |
| public static UpdateRequest read(UsingList usingList, String fileName, Syntax syntax) |
| { |
| return read(usingList, fileName, fileName, syntax) ; |
| } |
| |
| /** Create an UpdateRequest by reading it from a file */ |
| public static UpdateRequest read(String fileName, String baseURI, Syntax syntax) |
| { |
| return read(null, fileName, baseURI, syntax); |
| } |
| |
| /** Create an UpdateRequest by reading it from a file */ |
| public static UpdateRequest read(UsingList usingList, String fileName, String baseURI, Syntax syntax) |
| { |
| InputStream in = null ; |
| try { |
| if ( fileName.equals("-") ) |
| in = System.in ; |
| else |
| { |
| in = IO.openFile(fileName) ; |
| if ( in == null ) |
| throw new UpdateException("File could not be opened: "+fileName) ; |
| } |
| return read(usingList, in, baseURI, syntax) ; |
| } finally { |
| if ( in != null && ! fileName.equals("-") ) |
| IO.close(in) ; |
| } |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param input The source of the update request (must be UTF-8). |
| */ |
| public static UpdateRequest read(InputStream input) |
| { |
| return read(input, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param usingList The list of externally defined USING statements |
| * @param input The source of the update request (must be UTF-8). |
| */ |
| public static UpdateRequest read(UsingList usingList, InputStream input) |
| { |
| return read(usingList, input, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param input The source of the update request (must be UTF-8). |
| * @param syntax The update language syntax |
| */ |
| public static UpdateRequest read(InputStream input, Syntax syntax) |
| { |
| return read(input, null, syntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param usingList The list of externally defined USING statements |
| * @param input The source of the update request (must be UTF-8). |
| * @param syntax The update language syntax |
| */ |
| public static UpdateRequest read(UsingList usingList, InputStream input, Syntax syntax) |
| { |
| return read(usingList, input, null, syntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param input The source of the update request (must be UTF-8). |
| * @param baseURI The base URI for resolving relative URIs. |
| */ |
| public static UpdateRequest read(InputStream input, String baseURI) |
| { |
| return read(input, baseURI, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param usingList The list of externally defined USING statements |
| * @param input The source of the update request (must be UTF-8). |
| * @param baseURI The base URI for resolving relative URIs. |
| */ |
| public static UpdateRequest read(UsingList usingList, InputStream input, String baseURI) |
| { |
| return read(usingList, input, baseURI, defaultUpdateSyntax) ; |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param input The source of the update request (must be UTF-8). |
| * @param baseURI The base URI for resolving relative URIs. |
| * @param syntax The update language syntax |
| */ |
| public static UpdateRequest read(InputStream input, String baseURI, Syntax syntax) |
| { |
| return read(null, input, baseURI, syntax); |
| } |
| |
| /** Create an UpdateRequest by parsing from an InputStream. |
| * See also <tt>read</tt> operations for parsing contents of a file. |
| * @param usingList The list of externally defined USING statements |
| * @param input The source of the update request (must be UTF-8). |
| * @param baseURI The base URI for resolving relative URIs. |
| * @param syntax The update language syntax |
| */ |
| public static UpdateRequest read(UsingList usingList, InputStream input, String baseURI, Syntax syntax) |
| { |
| UpdateRequest request = new UpdateRequest() ; |
| make(request, usingList, input, baseURI, syntax) ; |
| return request ; |
| } |
| |
| /** Append update operations to a request */ |
| private static void make(UpdateRequest request, UsingList usingList, InputStream input, String baseURI, Syntax syntax) |
| { |
| UpdateParser parser = setupParser(request, baseURI, syntax) ; |
| UpdateSink sink = new UsingUpdateSink(new UpdateRequestSink(request), usingList) ; |
| try |
| { |
| parser.parse(sink, input) ; |
| } |
| finally |
| { |
| sink.close() ; |
| } |
| } |
| } |