package org.uengine.kernel.viewer;
import org.uengine.components.activityfilters.TimeDeterminationFilter;
import org.uengine.contexts.TextContext;
import org.uengine.kernel.*;
import org.uengine.util.UEngineUtil;
import org.uengine.kernel.GlobalContext;
import org.uengine.persistence.worklist.WorklistDAOType;
import org.uengine.processmanager.TransactionContext;
import java.util.*;
/**
* @author Jinyoung Jang
*/
public class DefaultActivityViewer implements ActivityViewer{
public static final String VIEWOPTION_SHOW_HIDDEN_ACTIVITY = "show hidden activity";
static int unfocusedOpacity = 100;
static Hashtable viewerPool = new Hashtable();
static Properties statusColors = new Properties();
static{
statusColors.setProperty(Activity.STATUS_READY, "#5F6061");
statusColors.setProperty(Activity.STATUS_COMPLETED, "#888888");
statusColors.setProperty(Activity.STATUS_RUNNING, "#027dbc");
statusColors.setProperty(Activity.STATUS_FAULT, "#ee2020");
statusColors.setProperty(Activity.STATUS_SKIPPED, "#2020aa");
statusColors.setProperty(Activity.STATUS_SUSPENDED, "#20cccc");
statusColors.setProperty(Activity.STATUS_TIMEOUT, "#aaaa20");
statusColors.setProperty(Activity.STATUS_RETRYING, "#ee2020");
}
static ActivityViewer instance;
public static ActivityViewer getInstance() {
if (instance == null)
instance = new DefaultActivityViewer();
return instance;
}
public static String getActivityName(Activity activity, ProcessInstance instance, Map options) {
String idHeader = null;
String namespace = SubProcessActivityViewer.getAbsoluteParentTracingTag(options, instance, null);
// if (UEngineUtil.isNotEmpty(namespace)) {
// namespace += "_";
// }
if (instance instanceof EJBProcessInstance) {
idHeader = "instance" + instance.getInstanceId();
} else {
idHeader = "definistion" + activity.getProcessDefinition().getId();
}
return namespace + "act" + activity.getTracingTag();
// return idHeader + "_act_" + activity.getTracingTag();
}
public static String getActivityName(String tracingTag, ProcessInstance instance, Map options) throws Exception {
String idHeader = null;
String namespace = SubProcessActivityViewer.getAbsoluteParentTracingTag(options, instance, null);
if (UEngineUtil.isNotEmpty(namespace)) {
namespace += "_";
}
if (instance instanceof EJBProcessInstance) {
idHeader = "instance" + instance.getInstanceId();
} else {
idHeader = "definistion" + instance.getProcessDefinition().getId();
}
return namespace + idHeader + "act" + tracingTag;
}
public StringBuilder render(Activity activity, ProcessInstance instance, Map options) {
String imagePathRoot = getImagePathRoot(options);
String aa = "";
boolean isNoWrap = (options != null && options.containsKey("nowrap"));
boolean isDecorated = (options != null && options.containsKey("decorated"));
boolean definitionView = false;
try {
definitionView = (instance == null || Activity.STATUS_READY.equals(instance.getStatus()));
} catch (Exception e1) { }
StringBuilder sb = new StringBuilder();
String statusColorAttr="";
String status="";
// String strActivityPaddingSize = "3";
String strSideImg = "<img src=\"#\" class='flowchart-activity-sideimg' />";
// if (!(activity instanceof ComplexActivity)) {
// sb.append(
// "<div id='" + getActivityName(activity, instance, options) + "'>"
// );
// }
if (!definitionView) {
status = "unresolved";
try {
status = instance.getStatus(activity.getTracingTag());
} catch(Exception e) {
e.printStackTrace();
}
statusColorAttr = " style='background-color: " + getStatusColor(status) + ";'";
}
String ActivityStatusString = "";
if (UEngineUtil.isNotEmpty(status)) {
ActivityStatusString = status;
}
if (options.containsKey("highlight") && options.get("highlight").equals(activity.getTracingTag())) {
sb.append("<div style='text-align:center;'><img style=\"cursor: pointer;\" src=\"" + imagePathRoot + "images/blinkarrow.gif\" border='0' /><br /></div>");
}
if (isDecorated) {
sb.append(
"<table cellpadding='0' cellspacing='0' bgcolor='white'>"
+ "<tr>"
+ "<td class='flowchart-activity-tl'>" + strSideImg + "</td>"
+ "<td class='flowchart-activity-t'></td>"
+ "<td class='flowchart-activity-tr'>" + strSideImg + "</td>"
+ "</tr>"
+ "<tr>"
+ "<td class='flowchart-activity-l' height='*'></td>"
+ "<td class='flowchart-activity-c flowchart-activity-status-" + ActivityStatusString + "'>"
);
} else {
sb.append("<div" +statusColorAttr+ ">");
String boxBgColor = (activity.isHidden() ? "#dddddd" : "white");
sb.append("<div style='background-color: " + boxBgColor + "; text-align: center;'>");
}
// sb.append("<center>");
if (options.containsKey("flowControl") && instance!=null) {
if (appendFlowController(activity, instance, sb, options))
sb.append("<br />");
}
if (options.containsKey("average processing time")) {
try {
long totalTime=0;
long occurrence=0;
Long[] totalTimeAndOccurrence = TimeDeterminationFilter.getTotalTimeAndOccurrence(activity);
if (totalTimeAndOccurrence!=null) {
totalTime=totalTimeAndOccurrence[0].longValue();
occurrence=totalTimeAndOccurrence[1].longValue();
}
long elapsedTime = totalTime / occurrence;
long hour = elapsedTime / 3600000L;
long min = (elapsedTime % 3600000L) / 60000L;
long sec = (elapsedTime % 60000L) / 1000L;
String averageTime =
(hour > 0 ? (hour + " hr "):"")
+ (min > 0 ? (min + " min "):"")
+ (sec > 0 ? (sec + " sec"):"")
;
sb.append("<font color='gray'>APT:" + averageTime + "</font><br>");
} catch(Exception e) { }
}
String locale = (String)options.get("locale");
boolean isGrayOne = (!definitionView && Activity.STATUS_READY.equals(status));
String tooltip="";
try {
tooltip = getToolTip(activity,instance,options);
} catch (Exception e1) {
e1.printStackTrace();
}
sb.append(
// "<table cellpadding='0' cellspacing='0'><tr><td width=\"" + strActivityPaddingSize + "\"></td></tr></table>"
"<img src=" + getIconImageURL(activity, instance, options) + tooltip +" border='0' "
+ (isGrayOne ? " style='filter:alpha(opacity=50);'" : " ")
);
String prefferedWidthAttr = options.containsKey("prefferedActivityIconWidth") ?
" width="+options.get("prefferedActivityIconWidth") : "";
String prefferedHeightAttr = options.containsKey("prefferedActivityIconHeight") ?
" height="+options.get("prefferedActivityIconHeight") : "";
sb.append(prefferedWidthAttr + prefferedHeightAttr);
String onClick = getOnClick(activity, instance, options);
if (onClick!=null)
sb.append(" onclick=\"" + onClick + "\"");
sb.append(">");
if (isDecorated) {
sb.append(
"<br />"
+ (isNoWrap ? "<div><nobr>":"")
+ (isGrayOne ? "<font color='#676666'> ":" ")
+ getLabel(activity, instance, options)
+ (isGrayOne ? " </font>":" ")
+ (isNoWrap ? "</nobr></div>":"")
// + "<table cellpadding='0' cellspacing='0'><tr><td width=\"" + strActivityPaddingSize + "\"></td></tr></table>"
);
}
if (instance != null) {
if (!isNoWrap)
sb.append("<br />");
try {
String bizStatus = activity.getBusinessStatus(instance);
if (bizStatus != null)
sb.append("<font size='-2'>" + bizStatus + "</font><br>");
} catch(Exception e) { }
sb.append("<font size='-2' color=" + getStatusColor(status) + "><strong>");
//show faults
try {
if (instance.isFault(activity.getTracingTag())) {
sb.append(instance.getFault(activity.getTracingTag()));
} else if (!Activity.STATUS_READY.equals(status) && isDecorated) {
String localStatus = GlobalContext.getLocalizedMessageForWeb(
"status_" + status, String.valueOf(options.get("locale")),
status
);
if (Activity.STATUS_RUNNING.equals(status)) {
sb.append("<blink>"+localStatus+"</blink>");
} else {
if ("".equals(status) && options.containsKey("current running count")) {
try {
TransactionContext tc = instance.getProcessTransactionContext();
String defVerId = activity.getProcessDefinition().getId();
int count = WorklistDAOType.getCurrnetRunningCount(tc, defVerId, activity.getTracingTag());
sb.append("("+count+")");
} catch(Exception e) { }
} else {
sb.append(localStatus);
}
}
}
} catch(Exception e) {
e.printStackTrace();
sb.append("can't load fault");
}
sb.append("</strong></font>");
}
//show details
String activityDetailDivId = getDetailDivId(activity, instance, options);
sb.append("<div id='" + activityDetailDivId + "' class='flowchart-activity-detail'>" + getDetails(activity, instance, options) + "</div>");
// sb.append("</center>");
if (isDecorated) {
sb.append(
"</td>"
+ "<td class='flowchart-activity-r'></td>"
+ "</tr><tr> "
+ "<td class='flowchart-activity-bl'></td>"
+ "<td class='flowchart-activity-b'></td>"
+ "<td class='flowchart-activity-br'></td>"
+ "</tr>"
+ "</table>"
);
} else {
sb.append("</div></div>");
}
/**
* if this activity has a thread connected to an execution scope, render the
* execution scope activities.
*/
if (options.containsKey("executionScopeHT")) {
Map executionScopeHT = (Map)options.get("executionScopeHT");
if (executionScopeHT.containsKey(activity.getTracingTag())) {
List<ExecutionScopeContext> executionScopeList = (List<ExecutionScopeContext>)executionScopeHT.get(activity.getTracingTag());
ExecutionScopeContext originalExecutionScopeContext = instance.getExecutionScopeContext();
for (int i=0; i<executionScopeList.size(); i++) {
ExecutionScopeContext esc = (ExecutionScopeContext)executionScopeList.get(i);
Activity executionScopeActivity = activity.getProcessDefinition().getActivity(esc.getRootActivityTracingTag());
esc.setRootActivityInTheScope(executionScopeActivity);
instance.setExecutionScopeContext(esc);
ActivityViewer viewerForExecutionScope = createViewer(executionScopeActivity);
boolean thisIsHighlightedExecutionScope = originalExecutionScopeContext!=null && originalExecutionScopeContext.getExecutionScope().equals(esc.getExecutionScope());
String tempHighlight = null;
if(options.containsKey("highlight") && !thisIsHighlightedExecutionScope){
tempHighlight = (String)options.get("highlight");
options.remove("highlight");
}
String statusColorForExecutionScopeActivity = "black";
try {
statusColorForExecutionScopeActivity = getStatusColor(executionScopeActivity.getStatus(instance));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
StringBuilder viewerHtmlOfExecutionScope = viewerForExecutionScope.render(executionScopeActivity, instance, options);
String idForExecutionScopeDiv = "executionScope_" + esc.getExecutionScope();
String eventOnClick = "openDetailActivity('" + idForExecutionScopeDiv + "'); drawLoopLines();";
sb.insert(0,
"<div style='text-align:center;' onclick=\"" + eventOnClick
+ "\"><nobr><img align='middle' src=\""
+ imagePathRoot + "images/event.gif\"><font size='-3' color='"
+ statusColorForExecutionScopeActivity + "'>"
+ (esc.getName()!=null ? esc.getName() : executionScopeActivity.getName().getText(locale))
+ "</font><img src=" + imagePathRoot + "images/more-arrow.triangle.gif></nobr></div>"
+ "<div id=" + idForExecutionScopeDiv
+ (thisIsHighlightedExecutionScope ? "" : " style='display:none;'") + ">"
+ "<img align='middle' src=" + imagePathRoot + "images/arrow_event_dotted.gif><br>"
);
if (executionScopeActivity instanceof ComplexActivity) {
sb.append("<div class='flowchart-activity-complex'>" + viewerHtmlOfExecutionScope + "</div>");
} else {
sb.append(viewerHtmlOfExecutionScope);
}
sb.append("</div>");
instance.setExecutionScopeContext(originalExecutionScopeContext);
if (tempHighlight != null) {
options.put("highlight", tempHighlight);
}
}
}
}
// if (!(activity instanceof ComplexActivity)) {
// sb.append("</div>");
// }
return sb;
}
protected String getToolTip(Activity activity ,ProcessInstance instance, Map options) throws Exception{
String tooltip="";
String local = options.get("locale")==null ? GlobalContext.DEFAULT_LOCALE : (String) options.get("locale");
if (options.containsKey("mouseOverPopup")) {
String pupupContentType = (String) options.get("mouseOverPopup");
if ("description".equals(pupupContentType)) {
String description = activity.getDescription().getText(local);
if (!UEngineUtil.isNotEmpty(description)) {
description = "No description";
}
tooltip = " activityDescription=\""
// + activity.getName() + ";"
+ description
+ "\"";
}
} else {
if (activity instanceof HumanActivity) {
Map map = activity.getActivityDetails(instance, (String) options.get("locale"));
Vector<String> vector = new Vector<String>();
if (map!=null) {
for(Iterator<String> iter = map.keySet().iterator(); iter.hasNext(); ) {
String key = iter.next();
Object value = map.get(key);
if (value instanceof String) {
vector.add(key + "==" + value);
} else if (value instanceof TextContext) {
vector.add(key + "==" + ((TextContext)value).getText(local));
}
}
}
String endpoint = "";
StringBuffer resourceName = new StringBuffer();
String imgPath = "";
StringBuffer desc = new StringBuffer();
String otherValue = "";
String actName = "";
if (
Activity.STATUS_COMPLETED.equals(activity.getStatus(instance)) ||
Activity.STATUS_RUNNING.equals(activity.getStatus(instance))
) {
RoleMapping rm = ((HumanActivity)activity).getRole().getMapping(instance);
endpoint = rm.getEndpoint();
if(!UEngineUtil.isNotEmpty(rm.getUserPortrait()))
rm.fill(instance);
imgPath = "img=="+rm.getUserPortrait();
resourceName.append("username=="+rm.getResourceName());
} else {
for (int i=0;i<vector.size();i++) {
String actInfo = (String)vector.get(i);
if ( actInfo.indexOf("actual worker") > -1 || actInfo.indexOf("처리자") > -1) {
String userString = actInfo.split("==")[1];
if (actInfo.indexOf("/") > -1) {
String[] userInfo = userString.split("/");
resourceName.append("username==" + userInfo[0]);
endpoint = userInfo[1];
}
}
}
if ("".equals(endpoint)) {
resourceName.setLength(0);
resourceName.append("username==unknown");
imgPath = "img==" + GlobalContext.WEB_CONTEXT_ROOT + "/images/portrait/unknown_user.gif";
} else {
RoleMapping rm = RoleMapping.create();
rm.setEndpoint(endpoint);
rm.fill(instance);
imgPath = "img=="+rm.getUserPortrait();
}
}
desc.append("description==");
for (int i = (vector.size() - 1); i >= 0 ; i--) {
String values = "" + vector.get(i);
if (values.indexOf("actual worker") > -1 || values.indexOf("처리자") > -1) {
continue;
}
if (values.indexOf("started date") > -1) {
desc.setLength(0);
desc.append("description==");
}
if (UEngineUtil.isNotEmpty(values))
otherValue += values + ";";
}
desc.append(activity.getDescription().getText(local)!=null ? activity.getDescription().getText(local) : activity.getName().getText(local));
actName = "actname==" + activity.getName().getText(local);
tooltip = " titles=\""
+ imgPath + ";"
+ resourceName + ";"
+ actName + ";"
+ desc + ";"
+ otherValue + "\""
;
} else {
tooltip = " title=" + activity.getName().getText(local);
}
}
return tooltip;
}
protected String getDetailDivId(Activity activity, ProcessInstance instance, Map options){
String activityDetailDivId = "act_dt_"
//+ (instance!=null ? instance.getInstanceId() : activity.getProcessDefinition().getId()) //old way for getting unique tracingtag space
//+ "_" + activity.getTracingTag()
+ SubProcessActivityViewer.getAbsoluteParentTracingTag(options, instance, activity.getTracingTag())
;
return activityDetailDivId;
}
private StringBuffer getActivityClickedScript(ProcessInstance instance, Activity activity, Map options) {
StringBuffer propStrBuf = new StringBuffer();
try {
String defId = activity.getProcessDefinition().getBelongingDefinitionId();
String defVersionId = activity.getProcessDefinition().getId();
propStrBuf.append(
"; onActivityClicked('" + defId + "', '" + defVersionId + "', '"
+ activity.getTracingTag()+ "', "
+ (instance != null ? "'" + instance.getInstanceId() + "'" : "null")
+ ", '" + getActivityPropertyString(activity, instance, options) + "')"
);
} catch(Exception e) {
e.printStackTrace();
}
return propStrBuf;
}
public String getOnClick(Activity activity, ProcessInstance instance, Map options){
// String instanceId = (instance!=null ? ("\"" + instance.getInstanceId() + "\"") : "null");
StringBuffer onClickJS = new StringBuffer();
try{
String activityDetailDivId = getDetailDivId(activity, instance, options);
if(options.containsKey("decorated"))
{
onClickJS.append("openDetailActivity('" + activityDetailDivId + "')");
ViewerOptions viewerOptions = new ViewerOptions();
if (options.containsKey(viewerOptions.SWIMLANE)) {
onClickJS.append("; setRowHeight(this, '" + options.get(viewerOptions.SWIMLANE) + "');");
}
if (options.containsKey("enableEvent_onActivityClicked")) {
onClickJS.append(getActivityClickedScript(instance, activity, options));
}
//onClickJS.append("; " + "drawAll();");
onClickJS.append("; ");
}
} catch(Exception e) {}
return onClickJS.toString();
}
public String getLabel(Activity activity, ProcessInstance instance, Map options) {
String locale = (String) options.get("locale");
String actName = null;
if (activity instanceof SubProcessActivity && !(activity.getRootActivity() instanceof ProcessDefinition)) {
Activity actTemp = activity.getRootActivity();
actName = actTemp.getName().getText(locale);
} else {
actName = activity.getName().getText(locale);
}
if (UEngineUtil.isNotEmpty(actName)) {
actName = actName.trim();
} else {
actName = "";
}
int intMaxLength = (Integer) (options.containsKey("intMaxLabelLength") ? options.get("intMaxLabelLength") : -1);
String strSeperator = "\n";
if ( 0 < intMaxLength) {
String[] listStrActivityLabel = actName.split("\\s");
String tmpActivityLabel = "";
for (int i = 0; i < listStrActivityLabel.length; i++) {
String strTmp = listStrActivityLabel[i];
if (strTmp.length() > 1) {
int intTmpLength = strTmp.length();
if (intTmpLength > intMaxLength) {
int iPointer = intTmpLength / 2;
strTmp = strTmp.substring(0, iPointer) + strSeperator + strTmp.substring(iPointer, intTmpLength);
}
tmpActivityLabel += strTmp + strSeperator;
} else {
tmpActivityLabel += strTmp + " ";
}
}
actName = tmpActivityLabel;
}
String strActivitylabel = actName.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll(strSeperator, "<br />");
return strActivitylabel;
}
public String getIconImageURL(Activity activity, ProcessInstance instance, Map options) {
String imagePathRoot = getImagePathRoot(options);
if (UEngineUtil.isNotEmpty(activity.getActivityIcon()))
return activity.getActivityIcon();
Class activityCls = activity.getClass();
String clsName = activityCls.getName().substring( activityCls.getName().lastIndexOf(".")+1);
return imagePathRoot + "images/"+ clsName +".png";
}
protected String getDetails(Activity activity, ProcessInstance instance, Map options){
StringBuffer sb = new StringBuffer();
try {
Map map = activity.getActivityDetails(instance, (String) options.get("locale"));
if (map != null) {
sb.append("<table width=\"100%\" border=\"0\" cellpadding='0' cellspacing='0'><tr height=\"1\"><td align=\"center\" colspan=\"3\" height=\"1\" class=\"bgcolor_head_underline\"></td></tr>");
for (Iterator iter = map.keySet().iterator(); iter.hasNext(); ) {
String key = (String)iter.next();
sb.append(
"<tr height=\"30\">"
+ "<td nowrap='nowrap' align=\"left\" bgcolor=\"#f4f4f4\" width=\"68\">"
+ " <font size=\"-2\">" + key +"</font></td>"
+ "<td width=\"*\" align=\"left\" bgcolor=\"white\" >"
+ "<nobr>" + map.get(key) + "</nobr></td>"
+ "</tr><tr height=1>"
+ "<td align=\"center\" colspan=\"2\" height=\"1\" class=\"bgcolor_head_underline\"></td>"
+ "</tr>"
);
}
StringBuffer parameterBuf = null;
for(Iterator iter = options.keySet().iterator(); iter.hasNext(); ){
String key = (String)iter.next();
String userEventPrefix = "enableUserEvent_";
if(key.startsWith(userEventPrefix)){
String eventName = null;
String className = null;
String[] parts = key.split("_");
if(parts.length > 1){
eventName = parts[1];
}
if(parts.length > 2){
className = parts[2]; //ex) "enableUserEvent_refreshMultipleInstances_org.uengine.kernel.SubProcessActivity";
Class theActivityClass = Class.forName(className);
if(!theActivityClass.isAssignableFrom(activity.getClass())){
continue;
}
}
String eventLabel = ""+options.get(key);
if(parameterBuf==null){
parameterBuf = new StringBuffer();
try{
String defId = activity.getProcessDefinition().getBelongingDefinitionId();
String defVersionId = activity.getProcessDefinition().getId();
parameterBuf.append(
"(\"" + defId + "\", \""
+ defVersionId + "\", \""
+ activity.getTracingTag() + "\", "
+ (instance!=null ? "\"" + instance.getInstanceId() + "\"" : "null")
+ ", \"" + getActivityPropertyString(activity, instance, options) + "\");"
);
}catch(Exception e){
}
}
sb.append(
"<tr height=\"30\">"
+ "<td colspan=\"3\">"
+ "<a href='javascript:" + eventName + parameterBuf + "'>" + eventLabel + "</a>"
+ "</td>"
+ "</tr>"
+ "<tr height=\"1\"><td align=\"center\" colspan=\"3\" height=\"1\" class=\"bgcolor_head_underline\"></td></tr>"
);
}
}
sb.append("</table>");
return sb.toString();
}
} catch(Exception e) {
e.printStackTrace();
}
return "";
}
public static ActivityViewer createViewer(Activity act){
Class activityCls = act.getClass();
//String clsName = UEngineUtil.getComponentClassName(activityCls, "viewer");
ActivityViewer viewer = null;
if(viewerPool.containsKey(activityCls))
return (ActivityViewer)viewerPool.get(activityCls);
/* try{
Class viewerCls = Class.forName(clsName);
viewer = (ActivityViewer)viewerCls.newInstance();
}catch(Exception e){
//e.printStackTrace();
viewer = DefaultActivityViewer.getInstance();
}*/
viewer = (ActivityViewer)(UEngineUtil.getComponentByEscalation(activityCls, "viewer", DefaultActivityViewer.getInstance()));
viewerPool.put(activityCls, viewer);
return viewer;
}
public static String getStatusColor(String status){
return statusColors.getProperty(status);
}
public static boolean appendFlowController(Activity activity, ProcessInstance instance, StringBuilder sb, Map options){
String imagePathRoot = getImagePathRoot(options);
String status ="unresolved";
try{
status = instance.getStatus(activity.getTracingTag());
}catch(Exception e){
e.printStackTrace();
}
boolean bAppended = false;
if(Activity.isCompensatable(status)){
sb.append("<a href=\"javascript:compensate('"+activity.getTracingTag()+"')\"><img src=" + imagePathRoot + "images/rewind.gif border=0></a>");
bAppended = true;
}
if(Activity.isSkippable(status)){
sb.append("<a href=\"javascript:skip('"+activity.getTracingTag()+"')\"><img src=" + imagePathRoot + "images/forward.gif border=0></a>");
bAppended = true;
}
if(Activity.isResumable(status)){
sb.append("<a href=\"javascript:resume('"+activity.getTracingTag()+"')\"><img src=" + imagePathRoot + "images/resume.gif border=0></a>");
bAppended = true;
}
else if(Activity.isSuspendable(status)){
sb.append("<a href=\"javascript:suspend('"+activity.getTracingTag()+"')\"><img src=" + imagePathRoot + "images/suspend.gif border=0></a>");
bAppended = true;
}
return bAppended;
}
public static String getImagePathRoot(Map options){
String strImgPathRoot = "";
try {
strImgPathRoot = ((ViewerOptions) options).getImagePathRoot();
} catch (Exception e) {
strImgPathRoot = (String) (options.containsKey("imagePathRoot") ? options.get("imagePathRoot") : "");
// TODO: handle exception
}
return strImgPathRoot;
}
public StringBuffer getActivityPropertyString(Activity activity, ProcessInstance instance, Map options) throws Exception{
StringBuffer sbActivityPropertyString = new StringBuffer();
// 웹에서 사용하는 곳도 없는 의미없는 PropertyString 이다. ' 와 " 로 인해 괜한 자바스크립트 에러만 일으킴으로 주석처리
// sbActivityPropertyString.append("instanceName=").append(
// instance != null ? instance.getName() : "").append(",");
// sbActivityPropertyString.append("activityName=").append(activity.getName().getText()).append(",");
sbActivityPropertyString.append("activityType=").append(activity.getClass().getName()).append(",");
// sbActivityPropertyString.append("definitionName=").append(
// activity.getProcessDefinition().getName().getText()).append(",");
sbActivityPropertyString.append("status=").append(activity.getStatus(instance)).append(",");
return sbActivityPropertyString;
}
}