/** * 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.build; import java.io.IOException ; import java.io.InputStream ; import java.util.Map ; import java.util.Map.Entry ; import org.apache.jena.atlas.io.IO ; import org.apache.jena.fuseki.Fuseki ; import org.apache.jena.riot.Lang ; import org.apache.jena.util.FileUtils ; public class TemplateFunctions { /** Read in a template from a file, substitute for {NAME} and return the string. */ public static String templateFile(String templateName, Map<String, String> params, Lang lang) { String templateFilename = Template.getPath(templateName).toString() ; String template ; try { template = FileUtils.readWholeFileAsUTF8(templateFilename) ; } catch (IOException ex) { Fuseki.serverLog.error("File not found: "+templateFilename); IO.exception(ex); return null ; } return templateString(template, params, lang) ; } /** Read a template file, substitute for {NAME} and return the model. */ public static String templateResource(String resourceName, Map<String, String> params, Lang lang) { String template ; try { InputStream in = TemplateFunctions.class.getClassLoader().getResourceAsStream(resourceName) ; if ( in == null ) Fuseki.serverLog.error("Resource not found: "+resourceName); template = FileUtils.readWholeFileAsUTF8(in) ; } catch (IOException ex) { Fuseki.serverLog.error("Error reading resource: "+resourceName); IO.exception(ex); return null ; } return templateString(template, params, lang) ; } /** Create a template from a String */ public static String templateString(String template, Map<String, String> params, Lang lang) { for ( Entry<String, String> e : params.entrySet() ) { // Literal string replacement. // If using .replaceAll, need to use Match.quoteReplacement on the value. String x = e.getValue() ; String k = "{"+e.getKey()+"}" ; if ( lang != null ) { if ( Lang.TTL.equals(lang) || Lang.TRIG.equals(lang) || Lang.NT.equals(lang) || Lang.NQ.equals(lang) || Lang.JSONLD.equals(lang) || Lang.RDFJSON.equals(lang) ) { // Make safe for a RDF language ""-string - especially MS Windows \ path separators. x = x.replace("\\", "\\\\") ; x = x.replace("\"", "\\\"") ; } } template = template.replace(k, x) ; } return template ; } }