/* Copyright (c) 2008, University of Oslo, Norway * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * * Neither the name of the University of Oslo nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package no.uio.total.frida; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.util.HashMap; import java.util.Map; import javax.ws.rs.WebApplicationException; import javax.ws.rs.ext.Provider; import com.sun.ws.rest.spi.resource.Singleton; import com.sun.ws.rest.spi.template.TemplateProcessor; import freemarker.cache.ClassTemplateLoader; import freemarker.cache.TemplateLoader; import freemarker.template.Configuration; import freemarker.template.TemplateException; /** * A simple Freemarker template processor. */ @Provider @Singleton public class FreemarkerTemplateProcessor implements TemplateProcessor { private Configuration freemarkerCfg; private TemplateLoader templateLoader; private synchronized void init() { if (this.freemarkerCfg != null) { return; } freemarkerCfg = new Configuration(); templateLoader = new ClassTemplateLoader(this.getClass(), "/"); freemarkerCfg.setTemplateLoader(templateLoader); } public String resolve(String path) { if (this.freemarkerCfg == null) { init(); } if (!path.endsWith(".ftl")) path = path + ".ftl"; System.out.println("Hello world: " + path); try { if (freemarkerCfg.getTemplate(path) == null) { return null; } } catch (IOException e) { e.printStackTrace(); return null; } return path; } public void writeTo(String resolvedPath, Object object, OutputStream out) throws IOException { Map model = new HashMap(); model.put("resource", object); try { this.freemarkerCfg.getTemplate(resolvedPath).process(model, new OutputStreamWriter(out)); } catch (TemplateException e) { throw new WebApplicationException(e); } } }