package com.jiangda.org.activiti.engine.form;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.form.FormData;
import org.activiti.engine.form.StartFormData;
import org.activiti.engine.form.TaskFormData;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.form.FormEngine;
import org.activiti.engine.impl.persistence.entity.ResourceEntity;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class VelocityFormEngine implements FormEngine {
@Override
public String getName() {
return "velocity";
}
@Override
public Object renderStartForm(StartFormData startForm) {
if (startForm.getFormKey() == null) {
return null;
}
String tpl = getFormTemplateString(startForm, startForm.getFormKey());
Map<String, Object> valueMap = new HashMap<String, Object>();
valueMap.put("f", startForm.getFormProperties());
valueMap.put("pd", startForm.getProcessDefinition());
return eval(tpl, startForm.getDeploymentId(), valueMap);
}
protected String getFormTemplateString(FormData formInstance, String formKey) {
String deploymentId = formInstance.getDeploymentId();
ResourceEntity resourceStream = Context
.getCommandContext()
.getResourceManager()
.findResourceByDeploymentIdAndResourceName(deploymentId,
formKey);
if (resourceStream == null) {
throw new ActivitiException("Form with formKey '" + formKey
+ "' does not exist");
}
byte[] resourceBytes = resourceStream.getBytes();
String formTemplateString = new String(resourceBytes);
return formTemplateString;
}
@Override
public Object renderTaskForm(TaskFormData taskForm) {
String tpl = getFormTemplateString(taskForm, taskForm.getFormKey());
Map<String, Object> valueMap = new HashMap<String, Object>();
valueMap.put("f", taskForm);
TaskEntity task = (TaskEntity) taskForm.getTask();
valueMap.put("task", task);
valueMap.put("execution", task.getExecution());
return eval(tpl, taskForm.getDeploymentId(), valueMap);
}
private String eval(String tpl, String tplName, Map<String, Object> valueMap) {
StringWriter writer = new StringWriter();
VelocityContext context = new VelocityContext();
for (String key : valueMap.keySet()) {
context.put(key, valueMap.get(key));
}
Velocity.evaluate(context, writer, tplName, tpl);
return writer.getBuffer().toString();
}
}
Activiti VelocityFormEngine实现
最新推荐文章于 2021-01-17 19:41:49 发布