/*
* Aipo is a groupware program developed by TOWN, Inc.
* Copyright (C) 2004-2015 TOWN, Inc.
* http://www.aipo.com
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.aimluck.eip.modules.parameters;
// Turbine support
import java.util.Map;
import org.apache.jetspeed.modules.parameters.ParameterPresentationStyle;
import org.apache.jetspeed.services.TemplateLocator;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.turbine.services.localization.LocalizationTool;
import org.apache.turbine.services.velocity.TurbineVelocity;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
import com.aimluck.eip.util.ALCommonUtils;
import com.aimluck.eip.util.ALJetspeedLink;
/**
* Generic Velocity-based presentation style. The following default objects are
* put in the context:
* <UL>
* <LI>data - rundata object</LI>
* <LI>name - name of the parameter</LI>
* <LI>value - current value of the parameter</LI>
* <LI>parms - map of additional style parameters</LI>
* </UL>
*
* <P>
* Supporting Velocity templates should be placed in
* ${velocity-templates-root}/parameters folder.
* </p>
*
* <P>
* It may be used directly with "template" as the only required parameter. This
* is useful when the no additional objects are needed by the template.
* </P>
*
* <P>
* If additional objects need to be put in the context, a new class extending
* VelocityParameterPresentationStyle should be created. Override buildContext
* to place custom objects in the Velocity context.
* </P>
*
* <P>
* If "template" parameter is not specified, it is assumed that the template
* name is "classname.vm".
* </P>
*
* @author <a href="mailto:morciuch@apache.org">Mark Orciuch</a>
*/
public class VelocityParameterPresentationStyle extends
ParameterPresentationStyle {
/**
* Static initialization of the logger for this class
*/
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(VelocityParameterPresentationStyle.class.getName());
/**
* Returns presentation control
*
* @param data
* - rundata object
* @param name
* - parameter name
* @param value
* - current parameter value
* @param parms
* - additional style parameters
* @return string
*/
@SuppressWarnings("rawtypes")
@Override
public String getContent(RunData data, String name, String value, Map parms) {
String result = null;
// create a blank context
Context context = TurbineVelocity.getContext();
// Put basics in the context
context.put("data", data);
context.put("name", name);
context.put("value", value);
context.put("parms", parms);
context.put("events", this.getJavascriptEvents());
LocalizationTool lt = new LocalizationTool();
lt.init(data);
context.put("l10n", lt);
context.put("jslink", new ALJetspeedLink(data));
context.put("utils", new ALCommonUtils());
try {
// Add custom objects to the context
this.buildContext(data, name, value, parms, context);
// Build default template name (classname + .vm)
String className = this.getClass().getName();
int pos = className.lastIndexOf(".");
pos = pos < 0 ? 0 : pos + 1;
className = className.substring(pos);
// Render the template
String template = (String) this.getParm("template", className + ".vm");
String templatePath =
TemplateLocator.locateParameterTemplate(data, template);
result = TurbineVelocity.handleRequest(context, templatePath);
} catch (Exception e) {
logger.error("VelocityParameterPresentationStyle.getContent", e);
// Fallback to input text box presentation style
result =
"<input type=\"text\" name=\"" + name + "\" value=\"" + value + "\"";
}
TurbineVelocity.requestFinished(context);
return result;
}
/**
* Override this method to put your own objects in the Velocity context
*
* @param data
* @param name
* @param value
* @param parms
* @param context
*/
@SuppressWarnings("rawtypes")
public void buildContext(RunData data, String name, String value, Map parms,
Context context) {
}
}