VelocityTemplateUtils.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.HashMap;
- import java.util.Map;
- import java.util.Properties;
- import org.apache.velocity.Template;
- import org.apache.velocity.VelocityContext;
- import org.apache.velocity.app.VelocityEngine;
- import org.apache.velocity.runtime.RuntimeConstants;
- import org.apache.velocity.runtime.RuntimeInstance;
- import org.apache.velocity.runtime.parser.ParseException;
- /**
- * TemplateUtils
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class VelocityTemplateUtils {
-
- /** -------- Utility per la creazione delle configurazioni ------------- */
-
- public static VelocityEngine newTemplateEngine() {
- VelocityEngine engine = new VelocityEngine();
- engine.init();
- return engine;
- }
- public static VelocityEngine newTemplateEngine(String propsFileName) {
- VelocityEngine engine = new VelocityEngine();
- engine.init(propsFileName);
- return engine;
- }
- public static VelocityEngine newTemplateEngine(Properties p) {
- VelocityEngine engine = new VelocityEngine();
- engine.init(p);
- return engine;
- }
-
-
-
- /** -------- Utility per la creazione dei template ------------- */
-
- public static Template getTemplate(VelocityEngine engine,String templateName) throws IOException{
- return engine.getTemplate(templateName);
- }
- public static Template getTemplate(VelocityEngine engine,String templateName, String encoding) throws IOException{
- return engine.getTemplate(templateName, encoding);
- }
-
- public static Template buildTemplate(String name,byte[] bytes) throws IOException, ParseException{
- return buildTemplate(name, bytes, Charset.UTF_8.getValue(), null);
- }
- public static Template buildTemplate(String name,byte[] bytes, String encoding) throws IOException, ParseException{
- return buildTemplate(name, bytes, encoding,
- null);
- }
-
- public static Template buildTemplate(String name,byte[] bytes,
- Map<String, byte[]> templateIncludes) throws IOException, ParseException{
- return buildTemplate(name, bytes, Charset.UTF_8.getValue(),
- templateIncludes);
- }
- public static Template buildTemplate(String name,byte[] bytes, String encoding,
- Map<String, byte[]> templateIncludes) throws IOException, ParseException{
-
- RuntimeInstance instance = new RuntimeInstance();
-
- String defaultTemplate = "_____DEFAULT_TEMPLATE___";
-
- if(templateIncludes==null) {
- templateIncludes= new HashMap<String, byte[]>();
- }
- VelocityTemplateLoader loader = new VelocityTemplateLoader(templateIncludes);
- templateIncludes.put(defaultTemplate, bytes);
- instance.setProperty(RuntimeConstants.RESOURCE_LOADER, "govway_rl" );
- instance.setProperty("govway_rl."+RuntimeConstants.RESOURCE_LOADER+"."+RuntimeConstants.RESOURCE_LOADER_INSTANCE, loader);
- instance.init();
- Template template = instance.getTemplate(defaultTemplate, encoding);
-
- /*
- Metodo che non consentiva la risoluzione dei template interni
- Template template = new Template();
- template.setName(name);
- template.setEncoding(encoding);
- RuntimeServices runtimeServices = RuntimeSingleton.getRuntimeServices();
- StringReader reader = new StringReader(new String(bytes));
- SimpleNode node = runtimeServices.parse(reader, template);
- template.setRuntimeServices(runtimeServices);
- template.setData(node);
- template.initDocument();
- */
- return template;
- }
-
-
-
- /** -------- Trasformazioni dei template ------------- */
-
- public static VelocityContext toVelocityContext(Map<String, Object> map) {
- VelocityContext context = new VelocityContext(map);
- return context;
- }
-
- public static byte[] toByteArray(Template template,Map<String, Object> map) throws IOException {
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- OutputStreamWriter writer = new OutputStreamWriter(bout);
- template.merge( toVelocityContext(map), writer );
- writer.flush();
- writer.close();
- bout.flush();
- bout.close();
- return bout.toByteArray();
- }
- public static String toString(Template template,Map<String, Object> map) throws IOException{
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- OutputStreamWriter writer = new OutputStreamWriter(bout);
- template.merge( toVelocityContext(map), writer );
- writer.flush();
- writer.close();
- bout.flush();
- bout.close();
- return bout.toString();
- }
- public static void writeFile(Template template,Map<String, Object> 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, VelocityTemplateUtils.toByteArray(template, map));
- }
-
-
- }