| /* |
| * 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 freemarker.manual; |
| |
| import static org.junit.Assert.*; |
| |
| import java.util.Date; |
| |
| import org.junit.Test; |
| |
| import freemarker.cache.ConditionalTemplateConfigurationFactory; |
| import freemarker.cache.FileExtensionMatcher; |
| import freemarker.cache.FileNameGlobMatcher; |
| import freemarker.cache.FirstMatchTemplateConfigurationFactory; |
| import freemarker.cache.MergingTemplateConfigurationFactory; |
| import freemarker.cache.OrMatcher; |
| import freemarker.cache.PathGlobMatcher; |
| import freemarker.core.HTMLOutputFormat; |
| import freemarker.core.PlainTextOutputFormat; |
| import freemarker.core.TemplateConfiguration; |
| import freemarker.core.UndefinedOutputFormat; |
| import freemarker.core.XMLOutputFormat; |
| import freemarker.template.Configuration; |
| import freemarker.template.Template; |
| import freemarker.template.utility.DateUtil; |
| |
| public class TemplateConfigurationExamples extends ExamplesTest { |
| |
| @Test |
| public void example1() throws Exception { |
| Configuration cfg = getConfiguration(); |
| |
| addTemplate("t.xml", ""); |
| |
| TemplateConfiguration tcUTF8XML = new TemplateConfiguration(); |
| tcUTF8XML.setEncoding("utf-8"); |
| tcUTF8XML.setOutputFormat(XMLOutputFormat.INSTANCE); |
| |
| { |
| cfg.setTemplateConfigurations(new ConditionalTemplateConfigurationFactory( |
| new FileExtensionMatcher("xml"), tcUTF8XML)); |
| |
| Template t = cfg.getTemplate("t.xml"); |
| assertEquals("utf-8", t.getEncoding()); |
| assertEquals(XMLOutputFormat.INSTANCE, t.getOutputFormat()); |
| } |
| |
| { |
| cfg.setTemplateConfigurations(null); |
| cfg.setSettings(loadPropertiesFile("TemplateConfigurationExamples1.properties")); |
| |
| Template t = cfg.getTemplate("t.xml"); |
| assertEquals("utf-8", t.getEncoding()); |
| assertEquals(XMLOutputFormat.INSTANCE, t.getOutputFormat()); |
| } |
| } |
| |
| @Test |
| public void example2() throws Exception { |
| Configuration cfg = getConfiguration(); |
| |
| addTemplate("t.subject.ftl", ""); |
| addTemplate("mail/t.subject.ftl", ""); |
| addTemplate("mail/t.body.ftl", ""); |
| |
| TemplateConfiguration tcSubject = new TemplateConfiguration(); |
| tcSubject.setOutputFormat(PlainTextOutputFormat.INSTANCE); |
| |
| TemplateConfiguration tcBody = new TemplateConfiguration(); |
| tcBody.setOutputFormat(HTMLOutputFormat.INSTANCE); |
| |
| cfg.setTemplateConfigurations( |
| new ConditionalTemplateConfigurationFactory( |
| new PathGlobMatcher("mail/**"), |
| new FirstMatchTemplateConfigurationFactory( |
| new ConditionalTemplateConfigurationFactory( |
| new FileNameGlobMatcher("*.subject.*"), |
| tcSubject), |
| new ConditionalTemplateConfigurationFactory( |
| new FileNameGlobMatcher("*.body.*"), |
| tcBody) |
| ) |
| .noMatchErrorDetails("Mail template names must contain \".subject.\" or \".body.\"!") |
| )); |
| |
| assertEquals(UndefinedOutputFormat.INSTANCE, cfg.getTemplate("t.subject.ftl").getOutputFormat()); |
| assertEquals(PlainTextOutputFormat.INSTANCE, cfg.getTemplate("mail/t.subject.ftl").getOutputFormat()); |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("mail/t.body.ftl").getOutputFormat()); |
| |
| // From properties: |
| |
| cfg.setTemplateConfigurations(null); |
| cfg.setSettings(loadPropertiesFile("TemplateConfigurationExamples2.properties")); |
| |
| assertEquals(UndefinedOutputFormat.INSTANCE, cfg.getTemplate("t.subject.ftl").getOutputFormat()); |
| assertEquals(PlainTextOutputFormat.INSTANCE, cfg.getTemplate("mail/t.subject.ftl").getOutputFormat()); |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("mail/t.body.ftl").getOutputFormat()); |
| }; |
| |
| @Test |
| public void example3() throws Exception { |
| Configuration cfg = getConfiguration(); |
| cfg.setDefaultEncoding("ISO-8859-1"); |
| cfg.setSharedVariable("ts", new Date(1440431606011L)); |
| |
| addTemplate("t.stats.html", "${ts?datetime} ${ts?date} ${ts?time}"); |
| addTemplate("t.html", ""); |
| addTemplate("t.htm", ""); |
| addTemplate("t.xml", ""); |
| addTemplate("mail/t.html", ""); |
| |
| TemplateConfiguration tcStats = new TemplateConfiguration(); |
| tcStats.setDateTimeFormat("iso"); |
| tcStats.setDateFormat("iso"); |
| tcStats.setTimeFormat("iso"); |
| tcStats.setTimeZone(DateUtil.UTC); |
| |
| TemplateConfiguration tcMail = new TemplateConfiguration(); |
| tcMail.setEncoding("utf-8"); |
| |
| TemplateConfiguration tcHTML = new TemplateConfiguration(); |
| tcHTML.setOutputFormat(HTMLOutputFormat.INSTANCE); |
| |
| TemplateConfiguration tcXML = new TemplateConfiguration(); |
| tcXML.setOutputFormat(XMLOutputFormat.INSTANCE); |
| |
| cfg.setTemplateConfigurations( |
| new MergingTemplateConfigurationFactory( |
| new ConditionalTemplateConfigurationFactory( |
| new FileNameGlobMatcher("*.stats.*"), |
| tcStats), |
| new ConditionalTemplateConfigurationFactory( |
| new PathGlobMatcher("mail/**"), |
| tcMail), |
| new FirstMatchTemplateConfigurationFactory( |
| new ConditionalTemplateConfigurationFactory( |
| new FileExtensionMatcher("xml"), |
| tcXML), |
| new ConditionalTemplateConfigurationFactory( |
| new OrMatcher( |
| new FileExtensionMatcher("html"), |
| new FileExtensionMatcher("htm")), |
| tcHTML) |
| ).allowNoMatch(true) |
| ) |
| ); |
| |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.html").getOutputFormat()); |
| assertEquals("ISO-8859-1", cfg.getTemplate("t.html").getEncoding()); |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.htm").getOutputFormat()); |
| assertEquals(XMLOutputFormat.INSTANCE, cfg.getTemplate("t.xml").getOutputFormat()); |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.stats.html").getOutputFormat()); |
| assertOutputForNamed("t.stats.html", "2015-08-24T15:53:26.011Z 2015-08-24 15:53:26.011Z"); |
| assertEquals("utf-8", cfg.getTemplate("mail/t.html").getEncoding()); |
| |
| // From properties: |
| |
| cfg.setTemplateConfigurations(null); |
| cfg.setSettings(loadPropertiesFile("TemplateConfigurationExamples3.properties")); |
| |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.html").getOutputFormat()); |
| assertEquals("ISO-8859-1", cfg.getTemplate("t.html").getEncoding()); |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.htm").getOutputFormat()); |
| assertEquals(XMLOutputFormat.INSTANCE, cfg.getTemplate("t.xml").getOutputFormat()); |
| assertEquals(HTMLOutputFormat.INSTANCE, cfg.getTemplate("t.stats.html").getOutputFormat()); |
| assertOutputForNamed("t.stats.html", "2015-08-24T15:53:26.011Z 2015-08-24 15:53:26.011Z"); |
| assertEquals("utf-8", cfg.getTemplate("mail/t.html").getEncoding()); |
| } |
| |
| } |