TemplateUtils.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2025 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.utils.resources;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Map;
import org.apache.commons.io.input.CharSequenceReader;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.ObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
/**
* TemplateUtils
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class TemplateUtils {
/** -------- Utility per la creazione delle configurazioni ------------- */
public static Configuration newTemplateEngine() {
return TemplateUtils.newTemplateEngine(TemplateUtils.class,"", null,null);
}
public static Configuration newTemplateEngine(String prefix) {
return TemplateUtils.newTemplateEngine(TemplateUtils.class,prefix, null,null);
}
public static Configuration newTemplateEngine(Class<?> c) {
return TemplateUtils.newTemplateEngine(c,"", null,null);
}
public static Configuration newTemplateEngine(Class<?> c,String prefix) {
return TemplateUtils.newTemplateEngine(c, prefix, null,null);
}
public static Configuration newTemplateEngine(Class<?> c,String prefix,ObjectWrapper wrapper) {
return TemplateUtils.newTemplateEngine(c, prefix, wrapper, null);
}
public static Configuration newTemplateEngine(Class<?> c,String prefix,ObjectWrapper wrapper,TemplateLoader templateLoader) {
// Initialize the FreeMarker configuration;
// - Create a configuration instance
Configuration cfgFreeMarker = new Configuration(Configuration.VERSION_2_3_23);
cfgFreeMarker.setClassForTemplateLoading(c, prefix);
if(wrapper!=null){
cfgFreeMarker.setObjectWrapper(wrapper);
}
if(templateLoader!=null){
cfgFreeMarker.setTemplateLoader(templateLoader);
}
return cfgFreeMarker;
}
/** -------- Utility per la creazione dei template ------------- */
public static Template getTemplate(Configuration cfg,String templateName) throws IOException{
return cfg.getTemplate(templateName);
}
public static Template getTemplate(String templateName) throws IOException{
Configuration cfg = TemplateUtils.newTemplateEngine();
return cfg.getTemplate(templateName);
}
public static Template getTemplate(String prefix,String templateName) throws IOException{
Configuration cfg = TemplateUtils.newTemplateEngine(prefix);
return cfg.getTemplate(templateName);
}
public static Template getTemplate(Class<?> c,String prefix,String templateName) throws IOException{
Configuration cfg = TemplateUtils.newTemplateEngine(c,prefix);
return cfg.getTemplate(templateName);
}
public static Template getTemplate(Class<?> c,String prefix,ObjectWrapper wrapper,String templateName) throws IOException{
Configuration cfg = TemplateUtils.newTemplateEngine(c,prefix,wrapper);
return cfg.getTemplate(templateName);
}
public static Template buildTemplate(String name,byte[] bytes) throws IOException{
return new Template(name, new CharSequenceReader(new String(bytes)),newTemplateEngine());
}
public static Template buildTemplate(Configuration cfg,String name,byte[] bytes) throws IOException{
return new Template(name, new CharSequenceReader(new String(bytes)),cfg);
}
/** -------- Trasformazioni dei template ------------- */
public static byte[] toByteArray(Template template,Map<?, ?> map) throws IOException,TemplateException{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(bout);
template.process(map, writer);
writer.flush();
writer.close();
bout.flush();
bout.close();
return bout.toByteArray();
}
public static String toString(Template template,Map<?, ?> map) throws IOException,TemplateException{
ByteArrayOutputStream bout = new ByteArrayOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(bout);
template.process(map, writer);
writer.flush();
writer.close();
bout.flush();
bout.close();
return bout.toString();
}
public static void writeFile(Template template,Map<?, ?> map,File file,boolean overwrite) throws Exception{
if(!overwrite){
if(file.exists()){
System.out.println(": WARNING !! File ["+file.getAbsolutePath()+"] is already exist, it is not overwritten !!");
return;
}
}
FileSystemUtilities.mkdirParentDirectory(file);
FileSystemUtilities.writeFile(file, TemplateUtils.toByteArray(template, map));
}
}