/*
* Carrot2 project.
*
* Copyright (C) 2002-2014, Dawid Weiss, Stanisław Osiński.
* All rights reserved.
*
* Refer to the full license file "carrot2.LICENSE"
* in the root folder of the repository checkout or at:
* http://www.carrot2.org/carrot2.LICENSE
*/
package org.carrot2.workbench.velocity;
import org.apache.commons.collections.ExtendedProperties;
import org.apache.commons.lang.StringUtils;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.RuntimeInstance;
import org.apache.velocity.runtime.log.NullLogChute;
import org.apache.velocity.tools.generic.EscapeTool;
import org.carrot2.workbench.core.WorkbenchCorePlugin;
import org.carrot2.workbench.core.preferences.PreferenceConstants;
import org.eclipse.jface.preference.IPreferenceStore;
/**
* See {@link #createInstance(String, String)}.
*/
public final class VelocityInitializer
{
private VelocityInitializer()
{
// No instances.
}
/**
* Initialize Velocity engine instance, disables logging,
* sets bundle-relative resource loader.
*/
public static RuntimeInstance createInstance(String bundleID, String templatePrefix)
{
try
{
final ExtendedProperties p = new ExtendedProperties();
p.setProperty("resource.loader", "bundle");
p.setProperty("bundle.resource.loader.instance", new BundleResourceLoader(
bundleID, templatePrefix));
p.setProperty(RuntimeConstants.SET_NULL_ALLOWED, "true");
// Disable separate Velocity logging.
p.setProperty(RuntimeConstants.RUNTIME_LOG_LOGSYSTEM_CLASS,
NullLogChute.class.getName());
final RuntimeInstance velocity = new RuntimeInstance();
velocity.setConfiguration(p);
return velocity;
}
catch (Exception e)
{
throw new RuntimeException("Velocity initialization failed.", e);
}
}
/**
* Create Velocity context and place default tools into it.
*/
public static VelocityContext createContext()
{
final VelocityContext context = new VelocityContext();
context.put("esc", new EscapeTool());
context.put("stringutils", new StringUtils());
context.put("annotationutils", new AnnotationUtils());
final IPreferenceStore store = WorkbenchCorePlugin.getDefault().getPreferenceStore();
int maxFieldLength = store.getInt(PreferenceConstants.MAX_FIELD_LENGTH);
if (maxFieldLength == 0) maxFieldLength = Integer.MAX_VALUE;
context.put("maxFieldLength", maxFieldLength);
return context;
}
}