Author: andy
Date: Fri Nov 22 14:22:29 2013
New Revision: 1544549
URL: http://svn.apache.org/r1544549
Log:
More validators
Added:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/DataValidator.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/IRIValidator.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/UpdateValidator.java
Removed:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation/DataValidator.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation/IRIValidator.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation/QueryValidator.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation/UpdateValidator.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation/ValidatorBase.java
Modified:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/QueryValidator.java
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/ValidatorBaseJson.java
Modified:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
URL:
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java?rev=1544549&r1=1544548&r2=1544549&view=diff
==============================================================================
---
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
(original)
+++
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/server/SPARQLServer.java
Fri Nov 22 14:22:29 2013
@@ -34,10 +34,10 @@ import org.apache.jena.fuseki.mgt.Action
import org.apache.jena.fuseki.mgt.MgtFunctions ;
import org.apache.jena.fuseki.mgt.PageNames ;
import org.apache.jena.fuseki.servlets.* ;
-import org.apache.jena.fuseki.validation.DataValidator ;
-import org.apache.jena.fuseki.validation.IRIValidator ;
+import org.apache.jena.fuseki.validation2.DataValidator ;
+import org.apache.jena.fuseki.validation2.IRIValidator ;
import org.apache.jena.fuseki.validation2.QueryValidator ;
-import org.apache.jena.fuseki.validation.UpdateValidator ;
+import org.apache.jena.fuseki.validation2.UpdateValidator ;
import org.apache.jena.riot.WebContent ;
import org.eclipse.jetty.http.MimeTypes ;
import org.eclipse.jetty.security.* ;
@@ -262,6 +262,7 @@ public class SPARQLServer {
// Validators
HttpServlet validateQuery = new QueryValidator() ;
HttpServlet validateUpdate = new UpdateValidator() ;
+
HttpServlet validateData = new DataValidator() ;
HttpServlet validateIRI = new IRIValidator() ;
Added:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/DataValidator.java
URL:
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/DataValidator.java?rev=1544549&view=auto
==============================================================================
---
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/DataValidator.java
(added)
+++
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/DataValidator.java
Fri Nov 22 14:22:29 2013
@@ -0,0 +1,130 @@
+/**
+ * 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.fuseki.validation2;
+
+import static org.apache.jena.riot.SysRIOT.fmtMessage ;
+
+import java.io.StringReader ;
+import java.util.ArrayList ;
+import java.util.List ;
+
+import org.apache.jena.atlas.json.JsonBuilder ;
+import org.apache.jena.atlas.json.JsonObject ;
+import org.apache.jena.riot.* ;
+import org.apache.jena.riot.system.ErrorHandler ;
+import org.apache.jena.riot.system.StreamRDF ;
+import org.apache.jena.riot.system.StreamRDFLib ;
+
+public class DataValidator extends ValidatorBaseJson {
+ public DataValidator() { }
+
+ static final String jInput = "input" ;
+
+ static final String paramFormat = "outputFormat" ;
+ static final String paramIndirection = "url" ;
+ static final String paramData = "data" ;
+ static final String paramSyntax = "languageSyntax" ;
+ @Override
+ protected JsonObject execute(ValidationAction action) {
+ JsonBuilder obj = new JsonBuilder() ;
+ obj.startObject() ;
+
+
+ String syntax = getArgOrNull(action, paramSyntax) ;
+ if ( syntax == null || syntax.equals("") )
+ syntax = RDFLanguages.NQUADS.getName() ;
+
+ Lang language = RDFLanguages.shortnameToLang(syntax) ;
+ if ( language == null ) {
+ errorBadRequest("Unknown syntax: " + syntax) ;
+ return null ;
+ }
+
+ String string = getArg(action, paramData) ;
+ StringReader sr = new StringReader(string) ;
+ obj.key(jInput).value(string) ;
+ StreamRDF dest = StreamRDFLib.sinkNull() ;
+
+ try {
+ // Set error handler!
+ RDFDataMgr.parse(dest, sr, null, language) ;
+ } catch (RiotParseException ex) {
+ obj.key(jErrors) ;
+
+ obj.startArray() ; // Errors array
+ obj.startObject() ;
+ obj.key(jParseError).value(ex.getMessage()) ;
+ obj.key(jParseErrorLine).value(ex.getLine()) ;
+ obj.key(jParseErrorCol).value(ex.getCol()) ;
+ obj.finishObject() ;
+ obj.finishArray() ;
+
+ obj.finishObject() ; // Outer object
+ return obj.build().getAsObject() ;
+ } catch (RiotException ex) {
+ obj.key(jErrors) ;
+
+ obj.startArray() ; // Errors array
+ obj.startObject() ;
+ obj.key(jParseError).value(ex.getMessage()) ;
+ obj.finishObject() ;
+ obj.finishArray() ;
+
+ obj.finishObject() ; // Outer object
+ return obj.build().getAsObject() ;
+ }
+
+
+ obj.finishObject() ;
+ return obj.build().getAsObject() ;
+ }
+ @Override
+ protected String validatorName() {
+ return "RDF Data" ;
+ }
+
+ // Error handler that records messages
+ private static class ErrorHandlerMsg implements ErrorHandler
+ {
+ private List<String> messages = new ArrayList<String>() ;
+
+ ErrorHandlerMsg(List<String> messages) { this.messages = messages; }
+
+ @Override
+ public void warning(String message, long line, long col)
+ { output(message, line, col, "Warning", "warning") ; }
+
+ // Attempt to continue.
+ @Override
+ public void error(String message, long line, long col)
+ { output(message, line, col, "Error", "error") ; }
+
+ @Override
+ public void fatal(String message, long line, long col)
+ { output(message, line, col, "Fatal", "error") ; throw new
RiotException(fmtMessage(message, line, col)) ; }
+
+ private void output(String message, long line, long col, String
typeName, String className)
+ {
+ String str = fmtMessage(message, line, col) ;
+ messages.add(str) ;
+ }
+ }
+
+}
+
Added:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/IRIValidator.java
URL:
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/IRIValidator.java?rev=1544549&view=auto
==============================================================================
---
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/IRIValidator.java
(added)
+++
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/IRIValidator.java
Fri Nov 22 14:22:29 2013
@@ -0,0 +1,167 @@
+/**
+ * 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.fuseki.validation2;
+
+import java.util.ArrayList ;
+import java.util.Iterator ;
+import java.util.List ;
+
+import org.apache.jena.atlas.json.JsonBuilder ;
+import org.apache.jena.atlas.json.JsonObject ;
+import org.apache.jena.iri.IRI ;
+import org.apache.jena.iri.IRIFactory ;
+import org.apache.jena.iri.Violation ;
+import org.apache.jena.riot.system.IRIResolver ;
+
+public class IRIValidator extends ValidatorBaseJson {
+ public IRIValidator() { }
+
+ static IRIFactory iriFactory = IRIResolver.iriFactory ;
+
+ static final String paramIRI = "iri" ;
+
+ // Output is an object { "iris" : [ ] }
+ // { "iri": "" , "error": [], "warnings": [] }
+ static final String jIRIs = "iris" ;
+ static final String jIRI = "iri" ;
+
+ @Override
+ protected JsonObject execute(ValidationAction action) {
+ JsonBuilder obj = new JsonBuilder() ;
+ obj.startObject() ;
+
+ String args[] = getArgs(action, paramIRI) ;
+ if ( args.length == 0 )
+ errorBadRequest("No IRIs supplied");
+
+ obj.key(jIRIs) ;
+ obj.startArray() ;
+
+ for ( String iriStr : args )
+ {
+ obj.startObject() ;
+ obj.key(jIRI).value(iriStr) ;
+
+ IRI iri = iriFactory.create(iriStr) ;
+
+
+ List<String> errors = new ArrayList<String>() ;
+ List<String> warnings = new ArrayList<String>() ;
+
+ if ( iri.isRelative() )
+ warnings.add("Relative IRI: "+iriStr) ;
+
+ Iterator<Violation> vIter = iri.violations(true) ;
+ for ( ; vIter.hasNext() ; )
+ {
+ Violation v = vIter.next() ;
+ String str = v.getShortMessage() ;
+ if ( v.isError() )
+ errors.add(str) ;
+ else
+ warnings.add(str) ;
+ }
+
+ obj.key(jErrors) ;
+ obj.startArray() ;
+ for ( String msg : errors )
+ obj.value(msg) ;
+ obj.finishArray() ;
+
+ obj.key(jWarnings) ;
+ obj.startArray() ;
+ for ( String msg : warnings )
+ obj.value(msg) ;
+ obj.finishArray() ;
+
+ obj.finishObject() ;
+ }
+
+
+ obj.finishArray() ;
+
+ obj.finishObject() ;
+ return obj.build().getAsObject() ;
+ }
+ @Override
+ protected String validatorName() {
+ return "RDF Data" ;
+ }
+}
+
+//static final String paramIRI = "iri" ;
+////static IRIFactory iriFactory = IRIFactory.iriImplementation() ;
+//static IRIFactory iriFactory = IRIResolver.iriFactory ;
+//
+//@Override
+//protected void execute(HttpServletRequest httpRequest, HttpServletResponse
httpResponse)
+//{
+// try {
+// String[] args = httpRequest.getParameterValues(paramIRI) ;
+// ServletOutputStream outStream = httpResponse.getOutputStream() ;
+// PrintStream stdout = System.out ;
+// PrintStream stderr = System.err ;
+// System.setOut(new PrintStream(outStream)) ;
+// System.setErr(new PrintStream(outStream)) ;
+//
+// setHeaders(httpResponse) ;
+//
+// outStream.println("<html>") ;
+// printHead(outStream, "Jena IRI Validator Report") ;
+// outStream.println("<body>") ;
+//
+// outStream.println("<h1>IRI Report</h1>") ;
+//
+// startFixed(outStream) ;
+//
+// try {
+// boolean first = true ;
+// for ( String iriStr : args )
+// {
+// if ( ! first )
+// System.out.println() ;
+// first = false ;
+//
+// IRI iri = iriFactory.create(iriStr) ;
+// System.out.println(iriStr + " ==> "+iri) ;
+// if ( iri.isRelative() )
+// System.out.println("Relative IRI: "+iriStr) ;
+//
+// Iterator<Violation> vIter = iri.violations(true) ;
+// for ( ; vIter.hasNext() ; )
+// {
+// String str = vIter.next().getShortMessage() ;
+// str = htmlQuote(str) ;
+//
+// System.out.println(str) ;
+// }
+// }
+// } finally
+// {
+// finishFixed(outStream) ;
+// System.out.flush() ;
+// System.err.flush() ;
+// System.setOut(stdout) ;
+// System.setErr(stdout) ;
+// }
+//
+// outStream.println("</body>") ;
+// outStream.println("</html>") ;
+// } catch (IOException ex) {}
+//}
Modified:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/QueryValidator.java
URL:
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/QueryValidator.java?rev=1544549&r1=1544548&r2=1544549&view=diff
==============================================================================
---
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/QueryValidator.java
(original)
+++
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/QueryValidator.java
Fri Nov 22 14:22:29 2013
@@ -49,11 +49,6 @@ public class QueryValidator extends Vali
static final String jAlgebraOpt = "algebra-opt" ;
static final String jAlgebraOptQuads = "algebra-opt-quads" ;
- static final String jErrors = "errors" ;
- static final String jParseError = "parse-error" ;
- static final String jParseErrorLine = "parse-error-line" ;
- static final String jParseErrorCol = "parse-error-column" ;
-
@Override
protected JsonObject execute(ValidationAction action) {
JsonBuilder obj = new JsonBuilder() ;
Added:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/UpdateValidator.java
URL:
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/UpdateValidator.java?rev=1544549&view=auto
==============================================================================
---
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/UpdateValidator.java
(added)
+++
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/UpdateValidator.java
Fri Nov 22 14:22:29 2013
@@ -0,0 +1,90 @@
+/**
+ * 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.fuseki.validation2;
+
+import org.apache.jena.atlas.io.IndentedLineBuffer ;
+import org.apache.jena.atlas.json.JsonBuilder ;
+import org.apache.jena.atlas.json.JsonObject ;
+
+import com.hp.hpl.jena.query.QueryParseException ;
+import com.hp.hpl.jena.query.Syntax ;
+import com.hp.hpl.jena.update.UpdateFactory ;
+import com.hp.hpl.jena.update.UpdateRequest ;
+
+public class UpdateValidator extends ValidatorBaseJson {
+ public UpdateValidator() {}
+
+ static final String paramUpdate = "update" ;
+ static final String paramSyntax = "languageSyntax" ;
+
+ static final String jInput = "input" ;
+ static final String jFormatted = "formatted" ;
+
+ @Override
+ protected JsonObject execute(ValidationAction action) {
+ JsonBuilder obj = new JsonBuilder() ;
+ obj.startObject() ;
+
+ final String updateString = getArg(action, paramUpdate) ;
+ String updateSyntax = getArgOrNull(action, paramSyntax) ;
+ if ( updateSyntax == null || updateSyntax.equals("") )
+ updateSyntax = "SPARQL" ;
+
+ Syntax language = Syntax.lookup(updateSyntax) ;
+ if ( language == null ) {
+ errorBadRequest("Unknown syntax: " + updateSyntax) ;
+ return null ;
+ }
+
+ obj.key(jInput).value(updateString) ;
+ UpdateRequest request = null ;
+ try {
+ request = UpdateFactory.create(updateString,
"http://example/base/", language) ;
+ } catch (QueryParseException ex) {
+ obj.key(jErrors) ;
+ obj.startArray() ; // Errors array
+ obj.startObject() ;
+ obj.key(jParseError).value(ex.getMessage()) ;
+ obj.key(jParseErrorLine).value(ex.getLine()) ;
+ obj.key(jParseErrorCol).value(ex.getColumn()) ;
+ obj.finishObject() ;
+ obj.finishArray() ;
+
+ obj.finishObject() ; // Outer object
+ return obj.build().getAsObject() ;
+ }
+
+ formatted(obj, request) ;
+
+ obj.finishObject() ;
+ return obj.build().getAsObject() ;
+ }
+
+ private void formatted(JsonBuilder obj, UpdateRequest updateRequest) {
+ IndentedLineBuffer out = new IndentedLineBuffer() ;
+ updateRequest.output(out) ;
+ obj.key(jFormatted).value(out.asString()) ;
+ }
+
+ @Override
+ protected String validatorName() {
+ return "SPARQL Update" ;
+ }
+}
+
Modified:
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/ValidatorBaseJson.java
URL:
http://svn.apache.org/viewvc/jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/ValidatorBaseJson.java?rev=1544549&r1=1544548&r2=1544549&view=diff
==============================================================================
---
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/ValidatorBaseJson.java
(original)
+++
jena/branches/jena-fuseki-new-ui/src/main/java/org/apache/jena/fuseki/validation2/ValidatorBaseJson.java
Fri Nov 22 14:22:29 2013
@@ -42,6 +42,13 @@ import com.hp.hpl.jena.sparql.util.Conte
/** ValidationBase for JSON out */
public abstract class ValidatorBaseJson extends ServletBase
{
+ public static final String jErrors = "errors" ;
+ public static final String jWarnings = "warning" ;
+
+ public static final String jParseError = "parse-error" ;
+ public static final String jParseErrorLine = "parse-error-line" ;
+ public static final String jParseErrorCol = "parse-error-column" ;
+
protected static Logger serviceLog = Fuseki.requestLog ;
public static final String respService = "X-Service" ;
@@ -80,7 +87,6 @@ public abstract class ValidatorBaseJson
responseSendError(response, ex.rc, ex.message) ;
else
responseSendError(response, ex.rc) ;
- //(null, string, statusCode) ;
} catch (Throwable th) {
responseSendError(response, HttpSC.INTERNAL_SERVER_ERROR_500,
"Internal Error") ;
}