/* * 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; import java.util.Iterator ; import javax.servlet.http.HttpServletRequest ; import org.apache.commons.lang.StringUtils ; import org.apache.jena.atlas.web.ContentType ; import org.apache.jena.ext.com.google.common.collect.ArrayListMultimap; import org.apache.jena.ext.com.google.common.collect.Multimap; import org.apache.jena.fuseki.servlets.HttpAction ; import org.apache.jena.graph.Graph ; import org.apache.jena.graph.Node ; import org.apache.jena.graph.Triple ; import org.apache.jena.riot.Lang ; import org.apache.jena.riot.RDFLanguages ; import org.apache.jena.shared.PrefixMapping ; import org.apache.jena.sparql.core.DatasetGraph ; import org.apache.jena.sparql.core.Quad ; import org.apache.jena.sparql.util.Convert ; public class FusekiLib { /** Get the content type of an action or return the default. * @param action * @return ContentType */ public static ContentType getContentType(HttpAction action) { return getContentType(action.request) ; } /** Get the content type of an action or return the default. * @param request * @return ContentType */ public static ContentType getContentType(HttpServletRequest request) { String contentTypeHeader = request.getContentType() ; if ( contentTypeHeader == null ) return null ; return ContentType.create(contentTypeHeader) ; } /** Get the incoming Lang based on Content-Type of an action. * @param action * @param dft Default if no "Content-Type:" found. * @return ContentType */ public static Lang getLangFromAction(HttpAction action, Lang dft) { String contentTypeHeader = action.request.getContentType() ; if ( contentTypeHeader == null ) return dft ; return RDFLanguages.contentTypeToLang(contentTypeHeader) ; } static String fmtRequest(HttpServletRequest request) { StringBuilder sbuff = new StringBuilder() ; sbuff.append(request.getMethod()) ; sbuff.append(" ") ; sbuff.append(Convert.decWWWForm(request.getRequestURL())) ; String qs = request.getQueryString() ; if ( qs != null ) { String tmp = request.getQueryString() ; tmp = Convert.decWWWForm(tmp) ; tmp = tmp.replace('\n', ' ') ; tmp = tmp.replace('\r', ' ') ; sbuff.append("?").append(tmp) ; } return sbuff.toString() ; } /** Parse the query string - do not process the body even for a form */ public static Multimap<String, String> parseQueryString(HttpServletRequest req) { Multimap<String, String> map = ArrayListMultimap.create() ; // Don't use ServletRequest.getParameter or getParamterNames // as that reads form data. This code parses just the query string. if ( req.getQueryString() != null ) { String[] params = req.getQueryString().split("&") ; for ( String p : params ) { String[] x = p.split( "=", 2 ); String name = null; String value = null; if ( x.length == 0 ) { // No "=" name = p; value = ""; } else if ( x.length == 1 ) { // param= name = x[0]; value = ""; } else { // param=value name = x[0]; value = x[1]; } map.put( name, value ); } } return map ; } public static String safeParameter(HttpServletRequest request, String pName) { String value = request.getParameter(pName) ; value = StringUtils.replaceChars(value, "\r", "") ; value = StringUtils.replaceChars(value, "\n", "") ; return value ; } // Do the addition directly on the dataset public static void addDataInto(Graph data, DatasetGraph dsg, Node graphName) { // Prefixes? if ( graphName == null ) graphName = Quad.defaultGraphNodeGenerated ; Iterator<Triple> iter = data.find(Node.ANY, Node.ANY, Node.ANY) ; for (; iter.hasNext();) { Triple t = iter.next() ; dsg.add(graphName, t.getSubject(), t.getPredicate(), t.getObject()) ; } PrefixMapping pmapSrc = data.getPrefixMapping() ; PrefixMapping pmapDest = dsg.getDefaultGraph().getPrefixMapping() ; pmapDest.setNsPrefixes(pmapSrc) ; } }