Java tutorial
/* * 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); } }