/*
* Copyright 2005-2007 WSO2, Inc. (http://wso2.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.wso2.carbon.bpel.ui;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.util.AXIOMUtil;
import org.apache.axis2.util.XMLPrettyPrinter;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.json.simple.JSONObject;
import org.wso2.carbon.bpel.stub.mgt.types.BpelDefinition;
import org.wso2.carbon.bpel.stub.mgt.types.CategoryListType;
import org.wso2.carbon.bpel.stub.mgt.types.Category_type1;
import org.wso2.carbon.bpel.stub.mgt.types.CleanUpListType;
import org.wso2.carbon.bpel.stub.mgt.types.CleanUpType;
import org.wso2.carbon.bpel.stub.mgt.types.EnableEventListType;
import org.wso2.carbon.bpel.stub.mgt.types.EndpointRef_type0;
import org.wso2.carbon.bpel.stub.mgt.types.Generate_type1;
import org.wso2.carbon.bpel.stub.mgt.types.InstanceStatus;
import org.wso2.carbon.bpel.stub.mgt.types.InstanceSummaryE;
import org.wso2.carbon.bpel.stub.mgt.types.Instances_type0;
import org.wso2.carbon.bpel.stub.mgt.types.LimitedInstanceInfoType;
import org.wso2.carbon.bpel.stub.mgt.types.On_type1;
import org.wso2.carbon.bpel.stub.mgt.types.PaginatedInstanceList;
import org.wso2.carbon.bpel.stub.mgt.types.ProcessDeployDetailsList_type0;
import org.wso2.carbon.bpel.stub.mgt.types.ProcessEventsListType;
import org.wso2.carbon.bpel.stub.mgt.types.ProcessInfoType;
import org.wso2.carbon.bpel.stub.mgt.types.ProcessStatus;
import org.wso2.carbon.bpel.stub.mgt.types.ScopeEventListType;
import org.wso2.carbon.bpel.stub.mgt.types.ScopeEventType;
import org.wso2.carbon.bpel.ui.clients.ProcessManagementServiceClient;
import org.wso2.carbon.statistics.stub.types.carbon.Metric;
import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.nio.charset.Charset;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.TreeMap;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
/**
* Some common UI functionalities, used in org.wso2.carbon.bpel.ui
*/
public final class BpelUIUtil {
private static final String DISABLED = "disabled";
private static final String CHECKED = "checked";
private static Log log = LogFactory.getLog("bpel.ui");
private BpelUIUtil() {
}
/**
* Truncates a given text to the size specified. Appends "..." to the end.
*
* @param text
* @param maxSize
* @return Truncated string
*/
public static String truncateString(String text, int maxSize) {
long strLength = text.length();
if (strLength > maxSize) {
if (log.isDebugEnabled()) {
log.debug("Limiting variable size of the instance to:" + maxSize);
}
return text.substring(0, maxSize) + " ...";
}
return text;
}
public static String encodeHTML(String aText) {
final StringBuilder result = new StringBuilder();
final StringCharacterIterator iterator = new StringCharacterIterator(aText);
char character = iterator.current();
while (character != CharacterIterator.DONE) {
if (character == '<') {
result.append("<");
} else if (character == '>') {
result.append(">");
} else if (character == '&') {
result.append("&");
// } else if (character == '\"') {
// result.append(""");
// } else if (character == '\t') {
// addCharEntity(9, result);
// } else if (character == '!') {
// addCharEntity(33, result);
// } else if (character == '#') {
// addCharEntity(35, result);
// } else if (character == '$') {
// addCharEntity(36, result);
// } else if (character == '%') {
// addCharEntity(37, result);
// } else if (character == '\'') {
// addCharEntity(39, result);
// } else if (character == '(') {
// addCharEntity(40, result);
// } else if (character == ')') {
// addCharEntity(41, result);
// } else if (character == '*') {
// addCharEntity(42, result);
// } else if (character == '+') {
// addCharEntity(43, result);
// } else if (character == ',') {
// addCharEntity(44, result);
// } else if (character == '-') {
// addCharEntity(45, result);
// } else if (character == '.') {
// addCharEntity(46, result);
// } else if (character == '/') {
// addCharEntity(47, result);
// } else if (character == ':') {
// addCharEntity(58, result);
// } else if (character == ';') {
// addCharEntity(59, result);
// } else if (character == '=') {
// addCharEntity(61, result);
// } else if (character == '?') {
// addCharEntity(63, result);
// } else if (character == '@') {
// addCharEntity(64, result);
// } else if (character == '[') {
// addCharEntity(91, result);
// } else if (character == '\\') {
// addCharEntity(92, result);
// } else if (character == ']') {
// addCharEntity(93, result);
// } else if (character == '^') {
// addCharEntity(94, result);
// } else if (character == '_') {
// addCharEntity(95, result);
// } else if (character == '`') {
// addCharEntity(96, result);
// } else if (character == '{') {
// addCharEntity(123, result);
// } else if (character == '|') {
// addCharEntity(124, result);
// } else if (character == '}') {
// addCharEntity(125, result);
// } else if (character == '~') {
// addCharEntity(126, result);
} else {
//the char is not a special one
//add it to the result as is
result.append(character);
}
character = iterator.next();
}
return result.toString();
}
public static String prettyPrint(String rawXML) {
String tRawXML = rawXML;
tRawXML = tRawXML.replaceAll("\n|\\r|\\f|\\t", "");
tRawXML = tRawXML.replaceAll("> +<", "><");
//InputStream xmlIn = new ByteArrayInputStream(tRawXML.getBytes());
//XMLPrettyPrinter xmlPrettyPrinter = new XMLPrettyPrinter(xmlIn);
//tRawXML = xmlPrettyPrinter.xmlFormat();
// rawXML = rawXML.replaceAll("\n", "<br>");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
OMElement elem;
try {
elem = AXIOMUtil.stringToOM(tRawXML);
XMLPrettyPrinter.prettify(elem, stream);
} catch (XMLStreamException e) {
log.error("Error processing the XML message " + e);
} catch (Exception e) {
log.error("Error processing the XML message " + e);
}
return new String(stream.toByteArray(), Charset.defaultCharset()).trim();
}
public static Map<String, QName> getEndpointRefsMap(ProcessInfoType info) {
EndpointRef_type0[] endpoints = info.getEndpoints().getEndpointRef();
Map<String, QName> pLinkServiceMap = new TreeMap<String, QName>();
for (EndpointRef_type0 ref : endpoints) {
pLinkServiceMap.put(ref.getPartnerLink(), ref.getService());
}
return pLinkServiceMap;
}
public static Map<String, EndpointRef_type0> getEndpointReferences(ProcessInfoType info) {
EndpointRef_type0[] endpoints = info.getEndpoints().getEndpointRef();
Map<String, EndpointRef_type0> pLinkEprMap = new TreeMap<String, EndpointRef_type0>();
for (EndpointRef_type0 eprRef : endpoints) {
pLinkEprMap.put(eprRef.getPartnerLink(), eprRef);
}
return pLinkEprMap;
}
public static String getUndeployLink(String packageName) {
return "process_list.jsp?operation=undeploy&packageName=" + packageName;
}
public static String getRetireLink(String pid, String filter, String order, int pageNumber, String packageName) {
String encodedPid = pid;
try {
encodedPid = URLEncoder.encode(pid, "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error("Error encoding the url " + pid + e);
}
String link = "process_list.jsp?operation=retire&processID=" + encodedPid + "&pageNumber=" + pageNumber + "&retiredPackageName=" + packageName;
return link;
}
public static String getActivateLink(String pid, String filter, String order, int pageNumber) {
String encodedPid = pid;
try {
encodedPid = URLEncoder.encode(pid, "UTF-8");
} catch (UnsupportedEncodingException e) {
log.error("Error encoding the url " + pid + e);
}
String link = "process_list.jsp?operation=activate&processID=" + encodedPid + "&pageNumber=" + pageNumber;
return link;
}
public static QName stringToQName(String pid) {
int endURI = pid.indexOf('}');
return new QName(pid.substring(1, endURI), pid.substring(endURI + 1));
}
/*private String[] getServiceLocations(ProcessInfoType info) {
String[] serviceLocations = info.getEndpoints().getEndpointRef()[0].getServiceLocations().getServiceLocation();
//Removing the processEPR
return null;
}*/
public static String getProcessDefinition(ProcessInfoType info) {
BpelDefinition definition = info.getDefinitionInfo().getDefinition();
return definition.getExtraElement().toString();
}
public static String getInstanceOperations(InstanceStatus status, String iid) {
ResourceBundle rsc = ResourceBundle.getBundle("org.wso2.carbon.bpel.ui.i18n.Resources");
StringBuilder strBuilder = new StringBuilder();
if (status.equals(InstanceStatus.ACTIVE)) {
generateActiveActionLinks(strBuilder, rsc, iid);
} else if (status.equals(InstanceStatus.COMPLETED)) {
generateCompletedActionLinks(strBuilder, rsc, iid);
} else if (status.equals(InstanceStatus.SUSPENDED)) {
generateSuspendedActionLinks(strBuilder, rsc, iid);
} else if (status.equals(InstanceStatus.TERMINATED)) {
generateTerminatedActionLinks(strBuilder, rsc, iid);
// } else if (status.equals(InstanceStatus.ERROR)) {
// generateErrorActionLinks(strBuilder, rsc, iid);
} else if (status.equals(InstanceStatus.FAILED)) {
// For failed instances only delete operation is available.
generateTerminatedActionLinks(strBuilder, rsc, iid);
}
return strBuilder.toString();
}
private static void generateActiveActionLinks(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateTDStart(strBuilder);
generateStartTag(strBuilder);
generateDeleteLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateStartTag(strBuilder);
generateSuspendLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateStartTag(strBuilder);
generateTerminateLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateTDEnd(strBuilder);
}
private static void generateCompletedActionLinks(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateTDStart(strBuilder);
generateStartTag(strBuilder);
generateDeleteLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateTDEnd(strBuilder);
}
private static void generateSuspendedActionLinks(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateTDStart(strBuilder);
generateStartTag(strBuilder);
generateResumeLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateStartTag(strBuilder);
generateTerminateLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateStartTag(strBuilder);
generateDeleteLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateTDEnd(strBuilder);
}
private static void generateTerminatedActionLinks(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateTDStart(strBuilder);
generateStartTag(strBuilder);
generateDeleteLink(strBuilder, rsc, iid);
generateEndTag(strBuilder);
generateTDEnd(strBuilder);
}
// private static void generateErrorActionLinks(StringBuilder strBuilder, ResourceBundle rsc,
// String iid) {
// generateTDStart(strBuilder);
// generateStartTag(strBuilder);
// generateTerminateLink(strBuilder, rsc, iid);
// generateEndTag(strBuilder);
// generateStartTag(strBuilder);
// generateDeleteLink(strBuilder, rsc, iid);
// generateEndTag(strBuilder);
// generateTDEnd(strBuilder);
// }
private static void generateSuspendLink(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateFirstPartOfTheLink(strBuilder, iid, "suspend");
strBuilder.append("&operation=suspend'");
strBuilder.append(" class='bpel-icon-link' style='background-image:url(images/suspend.gif);'>");
generateOnSuspendEventAttachScript(strBuilder, iid);
strBuilder.append(rsc.getString("suspend"));
strBuilder.append("</a>");
}
private static void generateResumeLink(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateFirstPartOfTheLink(strBuilder, iid, "resume");
strBuilder.append("&operation=resume'");
strBuilder.append(" class='bpel-icon-link' style='background-image:url(images/resume.gif);'>");
generateOnResumeEventAttachScript(strBuilder, iid);
strBuilder.append(rsc.getString("resume"));
strBuilder.append("</a>");
}
private static void generateTerminateLink(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateFirstPartOfTheLink(strBuilder, iid, "terminate");
strBuilder.append("&operation=terminate'");
strBuilder.append(" class='bpel-icon-link' style='background-image:url(images/terminate.gif);'>");
generateOnTerminateEventAttachScript(strBuilder, iid);
strBuilder.append(rsc.getString("terminate"));
strBuilder.append("</a>");
}
private static void generateDeleteLink(StringBuilder strBuilder, ResourceBundle rsc,
String iid) {
generateFirstPartOfTheLink(strBuilder, iid, "delete");
strBuilder.append("&operation=delete'");
strBuilder.append(" class='bpel-icon-link' style='background-image:url(images/delete.gif);'>");
generateOnDeleteEventAttachScript(strBuilder, iid);
strBuilder.append(rsc.getString("delete"));
strBuilder.append("</a>");
}
private static void generateOnDeleteEventAttachScript(StringBuilder strBuilder, String id) {
strBuilder.append("<script type='text/javascript'>(function(){jQuery('#instancedelete");
strBuilder.append(id);
strBuilder.append("').click(BPEL.instance.onDelete);})();</script>");
}
private static void generateOnResumeEventAttachScript(StringBuilder strBuilder, String id) {
strBuilder.append("<script type='text/javascript'>(function(){jQuery('#instanceresume");
strBuilder.append(id);
strBuilder.append("').click(BPEL.instance.onResume);})();</script>");
}
private static void generateOnSuspendEventAttachScript(StringBuilder strBuilder, String id) {
strBuilder.append("<script type='text/javascript'>(function(){jQuery('#instancesuspend");
strBuilder.append(id);
strBuilder.append("').click(BPEL.instance.onSuspend);})();</script>");
}
private static void generateOnTerminateEventAttachScript(StringBuilder strBuilder, String id) {
strBuilder.append("<script type='text/javascript'>(function(){jQuery('#instanceterminate");
strBuilder.append(id);
strBuilder.append("').click(BPEL.instance.onTerminate);})();</script>");
}
private static void generateFirstPartOfTheLink(StringBuilder strBuilder, String iid,
String operation) {
strBuilder.append("<a id='instance");
strBuilder.append(operation);
strBuilder.append(iid);
strBuilder.append("' href='list_instances.jsp?iid=");
strBuilder.append(iid);
}
private static void generateStartTag(StringBuilder strBuilder) {
//strBuilder.append("<td style='border-right:0px;border-left:0px;'>");
strBuilder.append("[ ");
}
private static void generateEndTag(StringBuilder strBuilder) {
strBuilder.append(" ] ");
}
private static void generateTDEnd(StringBuilder strBuilder) {
strBuilder.append("</td>");
}
private static void generateTDStart(StringBuilder strbuilder) {
strbuilder.append("<td style=\"white-space: nowrap\">");
}
public static void logWarn(String message, Exception e) {
if (log.isWarnEnabled()) {
log.warn(message, e);
}
}
public static String generateRetireLinkForProcessInfoPage(String processId) {
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("process_info.jsp?Pid=");
strBuilder.append(processId);
strBuilder.append("&operation=retire");
return strBuilder.toString();
}
public static String generateActivateLinkForProcessInfoPage(String processId) {
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("process_info.jsp?Pid=");
strBuilder.append(processId);
strBuilder.append("&operation=activate");
return strBuilder.toString();
}
public static int getTotalInstance(ProcessInfoType processInfo) {
int totalInstances = 0;
for (Instances_type0 processInstance : processInfo.getInstanceSummary().getInstances()) {
totalInstances += processInstance.getCount();
}
return totalInstances;
}
public static String getInstanceFilterURL(String processId) throws UnsupportedEncodingException {
StringBuilder strBuilder = new StringBuilder();
strBuilder.append("list_instances.jsp?filter=pid=");
strBuilder.append(processId);
strBuilder.append("%20status=active");
String encodedFilter = URLEncoder.encode("|completed|suspended|terminated|failed|error", "UTF-8");
strBuilder.append(encodedFilter);
strBuilder.append("&order=-last-active");
return strBuilder.toString();
}
/**
* Create instance summary JSON object from process instances array.
*
* @param processInstances process instance array
* @return instance summary object
*/
public static JSONObject createInstanceSummaryJSONObject(Instances_type0[] processInstances) {
JSONObject summary = new JSONObject();
int totalInstances = 0;
for (Instances_type0 processInstance : processInstances) {
String state = processInstance.getState().getValue();
if (state.equals(BPELUIConstant.INSTANCE_STATE_ACTIVE)) {
summary.put(BPELUIConstant.INSTANCE_STATE_ACTIVE, processInstance.getCount());
} else if (state.equals(BPELUIConstant.INSTANCE_STATE_COMPLETED)) {
summary.put(BPELUIConstant.INSTANCE_STATE_COMPLETED, processInstance.getCount());
} else if (state.equals(BPELUIConstant.INSTANCE_STATE_TERMINATED)) {
summary.put(BPELUIConstant.INSTANCE_STATE_TERMINATED, processInstance.getCount());
} else if (state.equals(BPELUIConstant.INSTANCE_STATE_FAILED)) {
summary.put(BPELUIConstant.INSTANCE_STATE_FAILED, processInstance.getCount());
} else if (state.equals(BPELUIConstant.INSTANCE_STATE_SUSPENDED)) {
summary.put(BPELUIConstant.INSTANCE_STATE_SUSPENDED, processInstance.getCount());
} else {
log.error("Invalid instance state: " + state);
}
totalInstances += processInstance.getCount();
}
summary.put(BPELUIConstant.TOTAL_INSTANCES, totalInstances);
return summary;
}
/**
* Create instance summary JSON object from return value of getInstanceSummary operation
* of instance management web service.
*
* @param globalInstanceSummary instance summary from instance management API(global counts)
* @return global instance count
*/
public static JSONObject createInstanceSummaryJSONObject(InstanceSummaryE globalInstanceSummary) {
JSONObject summary = new JSONObject();
summary.put(BPELUIConstant.INSTANCE_STATE_ACTIVE, globalInstanceSummary.getActive());
summary.put(BPELUIConstant.INSTANCE_STATE_COMPLETED, globalInstanceSummary.getCompleted());
summary.put(BPELUIConstant.INSTANCE_STATE_TERMINATED, globalInstanceSummary.getTerminated());
summary.put(BPELUIConstant.INSTANCE_STATE_FAILED, globalInstanceSummary.getFailed());
summary.put(BPELUIConstant.INSTANCE_STATE_SUSPENDED, globalInstanceSummary.getSuspended());
return summary;
}
public static JSONObject getMemoryInfoJSONObject(Metric usedMem, Metric totalMem) {
JSONObject memInfo = new JSONObject();
memInfo.put("UsedMemoryValue", usedMem.getValue());
memInfo.put("UsedMemoryUnit", usedMem.getUnit());
memInfo.put("TotalMemoryValue", totalMem.getValue());
memInfo.put("TotalMemoryUnit", totalMem.getUnit());
return memInfo;
}
public static String createLongRunningInstanceJSONString(PaginatedInstanceList longRunningInstances) {
//LinkedHashMap is introduced instead of JSONObject, in-order to keep the order of the instances
LinkedHashMap<String, JSONObject> longRunning = new LinkedHashMap<String, JSONObject>();
if (longRunningInstances.isInstanceSpecified()) {
for (LimitedInstanceInfoType instance : longRunningInstances.getInstance()) {
JSONObject instanceJson = new JSONObject();
long instanceLifetimeTillLastActive =
(instance.getDateLastActive().getTime().getTime() -
instance.getDateStarted().getTime().getTime());
long instanceLifetimeFromLastActiveToNow =
(new Date().getTime() -
instance.getDateLastActive().getTime().getTime());
instanceJson.put(BPELUIConstant.INSTANCE_LIFETIME_TILL_LASTACTIVE,
instanceLifetimeTillLastActive);
instanceJson.put(BPELUIConstant.INSTANCE_LIFETIME_FROM_LASTACTIVE_TO_NOW,
instanceLifetimeFromLastActiveToNow);
longRunning.put(instance.getIid(), instanceJson);
}
}
return JSONObject.toJSONString(longRunning);
}
private static String[] setEnabledEventsList(
ProcessDeployDetailsList_type0 processDeployDetailsListType) {
String[] enabledEvents = null;
if (processDeployDetailsListType.getProcessEventsList() != null &&
processDeployDetailsListType.getProcessEventsList().getEnableEventsList() != null) {
EnableEventListType enableEventListType =
processDeployDetailsListType.getProcessEventsList().getEnableEventsList();
if (enableEventListType.getEnableEvent() != null) {
enabledEvents = enableEventListType.getEnableEvent();
}
}
return enabledEvents;
}
public static ScopeEventType[] setScopeEventsList(
ProcessDeployDetailsList_type0 processDeployDetailsListType) {
ScopeEventType[] scopeEnabledEvents = null;
if (processDeployDetailsListType.getProcessEventsList() != null &&
processDeployDetailsListType.getProcessEventsList().getScopeEventsList() != null) {
ScopeEventListType scopeEnableEventListType =
processDeployDetailsListType.getProcessEventsList().getScopeEventsList();
if (scopeEnableEventListType.getScopeEvent() != null) {
scopeEnabledEvents = scopeEnableEventListType.getScopeEvent();
}
}
return scopeEnabledEvents;
}
private static String[] setSuccessTypeCleanups(
ProcessDeployDetailsList_type0 processDeployDetailsListType) {
List<String> successCategories = null;
if (processDeployDetailsListType.getCleanUpList() != null &&
processDeployDetailsListType.getCleanUpList().getCleanUp() != null) {
successCategories = new ArrayList<String>();
CleanUpType[] cleanUpTypes = processDeployDetailsListType.getCleanUpList().getCleanUp();
for (CleanUpType cleanUpType : cleanUpTypes) {
if (cleanUpType.getOn().getValue().equalsIgnoreCase("success") &&
cleanUpType.getCategoryList() != null) {
CategoryListType categoryList = cleanUpType.getCategoryList();
if (categoryList.getCategory() != null) {
Category_type1[] categories = categoryList.getCategory();
for (Category_type1 categoryType1 : categories) {
successCategories.add(categoryType1.getValue());
}
}
}
}
}
String[] successList = new String[0]; //Collection to array
if (successCategories != null) {
successList = successCategories.toArray(new String[successCategories.size()]);
}
return successList;
}
private static String[] setFailureTypeCleanups(
ProcessDeployDetailsList_type0 processDeployDetailsListType) {
List<String> failureCategories = null;
if (processDeployDetailsListType.getCleanUpList() != null &&
processDeployDetailsListType.getCleanUpList().getCleanUp() != null) {
failureCategories = new ArrayList<String>();
CleanUpType[] cleanUpTypes = processDeployDetailsListType.getCleanUpList().getCleanUp();
for (CleanUpType cleanUpType : cleanUpTypes) {
if (cleanUpType.getOn().getValue().equalsIgnoreCase("failure") &&
cleanUpType.getCategoryList() != null) {
CategoryListType categoryList = cleanUpType.getCategoryList();
if (categoryList.getCategory() != null) {
Category_type1[] categories = categoryList.getCategory();
for (Category_type1 categoryType1 : categories) {
failureCategories.add(categoryType1.getValue());
}
}
}
}
}
String[] failureList = new String[0]; //Collection to array
if (failureCategories != null) {
failureList = failureCategories.toArray(new String[failureCategories.size()]);
}
return failureList;
}
private static String setGenerateType(
ProcessDeployDetailsList_type0 processDeployDetailsListType) {
String type = null;
if (processDeployDetailsListType.getProcessEventsList() == null) {
type = "none";
} else if (processDeployDetailsListType.getProcessEventsList().getEnableEventsList() != null
&& processDeployDetailsListType.getProcessEventsList().
getEnableEventsList().getEnableEvent() != null) {
List<String> events =
Arrays.asList(processDeployDetailsListType.getProcessEventsList().
getEnableEventsList().getEnableEvent());
if (events.contains("instanceLifecycle") && events.contains("activityLifecycle")
&& events.contains("dataHandling") && events.contains("correlation") &&
events.contains("scopeHandling")) {
type = "all";
} else {
type = "selected";
}
} else {
type = "none";
}
return type;
}
public static void updateBackEnd(ProcessManagementServiceClient processMgtClient,
ProcessDeployDetailsList_type0 processDeployDetailsListType,
DeploymentDescriptorUpdater deployDescriptorUpdater,
String[] selecttype, List<String> scopeNames)
throws Exception {
updateScopeEvents(selecttype, scopeNames, deployDescriptorUpdater);
ProcessStatus processStatus = ProcessStatus.Factory.
fromValue(deployDescriptorUpdater.getProcessstate().toUpperCase());
processDeployDetailsListType.setProcessState(processStatus);
processDeployDetailsListType.setIsInMemory(Boolean.parseBoolean(deployDescriptorUpdater.
getInmemorystatus()));
ProcessEventsListType processEventsListType = new ProcessEventsListType();
EnableEventListType enableEventListType = new EnableEventListType();
ScopeEventListType scopeEventListType = new ScopeEventListType();
enableEventListType.setEnableEvent(deployDescriptorUpdater.getEvents());
scopeEventListType.setScopeEvent(deployDescriptorUpdater.getScopeEvents());
processEventsListType.setEnableEventsList(enableEventListType);
processEventsListType.setScopeEventsList(scopeEventListType);
if (!deployDescriptorUpdater.getGentype().equalsIgnoreCase("selected")) {
Generate_type1 generate = Generate_type1.Factory.fromValue(deployDescriptorUpdater.getGentype());
processEventsListType.setGenerate(generate);
}
processDeployDetailsListType.setProcessEventsList(processEventsListType);
CleanUpListType cleanUpList = new CleanUpListType();
CleanUpType successCleanUpType = new CleanUpType();
On_type1 successOn = On_type1.success;
successCleanUpType.setOn(successOn);
CategoryListType successCategoryList = new CategoryListType();
String[] sCategories = deployDescriptorUpdater.getSuccesstypecleanups();
if (sCategories != null) {
for (String categoryName : sCategories) {
Category_type1 categoryType1 = Category_type1.Factory.fromValue(categoryName);
successCategoryList.addCategory(categoryType1);
}
}
successCleanUpType.setCategoryList(successCategoryList);
cleanUpList.addCleanUp(successCleanUpType);
CleanUpType failureCleanUpType = new CleanUpType();
On_type1 failureOn = On_type1.failure;
failureCleanUpType.setOn(failureOn);
CategoryListType failureCategoryList = new CategoryListType();
String[] fCategories = deployDescriptorUpdater.getFailuretypecleanups();
if (fCategories != null) {
for (String categoryName : fCategories) {
Category_type1 categoryType1 = Category_type1.Factory.fromValue(categoryName);
failureCategoryList.addCategory(categoryType1);
}
}
failureCleanUpType.setCategoryList(failureCategoryList);
cleanUpList.addCleanUp(failureCleanUpType);
processDeployDetailsListType.setCleanUpList(cleanUpList);
processMgtClient.updateDeployInfo(processDeployDetailsListType);
}
public static void configureDeploymentDescriptorUpdater(
ProcessDeployDetailsList_type0 processDeployDetailsListType,
DeploymentDescriptorUpdater deployDescriptorUpdater) {
deployDescriptorUpdater.setProcessstate(processDeployDetailsListType.getProcessState().getValue());
deployDescriptorUpdater.setInmemorystatus(String.valueOf(processDeployDetailsListType.getIsInMemory()));
deployDescriptorUpdater.setInvokedServiceList(processDeployDetailsListType.getInvokeServiceList());
deployDescriptorUpdater.setProvideServiceList(processDeployDetailsListType.getProvideServiceList());
deployDescriptorUpdater.setMexInterceptors(processDeployDetailsListType.getMexInterperterList());
deployDescriptorUpdater.setPropertyList(processDeployDetailsListType.getPropertyList());
deployDescriptorUpdater.setScopeEvents(setScopeEventsList(processDeployDetailsListType));
deployDescriptorUpdater.setGentype(setGenerateType(processDeployDetailsListType));
deployDescriptorUpdater.setEvents(setEnabledEventsList(processDeployDetailsListType));
deployDescriptorUpdater.setSuccesstypecleanups(setSuccessTypeCleanups(processDeployDetailsListType));
deployDescriptorUpdater.setFailuretypecleanups(setFailureTypeCleanups(processDeployDetailsListType));
}
public static String isElementDisabled(boolean authorizedToManageProcesses) {
if (!authorizedToManageProcesses) {
return DISABLED;
} else {
return "";
}
}
public static String isProcessStateChecked(DeploymentDescriptorUpdater deployDescriptorUpdater,
String processState) {
if (deployDescriptorUpdater.getProcessstate() != null &&
deployDescriptorUpdater.getProcessstate().equalsIgnoreCase(processState)) {
return CHECKED;
}
return "";
}
public static String isGenerateTypeChecked(DeploymentDescriptorUpdater deployDescriptorUpdater,
String genType) {
if (deployDescriptorUpdater.getGentype() != null &&
deployDescriptorUpdater.getGentype().equalsIgnoreCase(genType)) {
return CHECKED;
}
return "";
}
public static String isGivenEventChecked(String[] eventsList, String enabledEvent) {
if (eventsList != null) {
for (String targetEvent : eventsList) {
if (targetEvent.equalsIgnoreCase(enabledEvent)) {
return CHECKED;
}
}
}
return "";
}
public static String isInMemoryTypeChecked(DeploymentDescriptorUpdater deployDescriptorUpdater,
String inMemory) {
if (deployDescriptorUpdater.getInmemorystatus() != null &&
deployDescriptorUpdater.getInmemorystatus().equalsIgnoreCase(inMemory)) {
return CHECKED;
}
return "";
}
/**
* We heavily use jQuery functions in front-end BPEL component.
* There are some meta-characters used in jQuery like (":", "."), etc.,
* eg - http://api.jquery.com/animated-selector/
* So we should use html ids which should non-conflicted with jQuery api.
* This method is used to generate non-conflcting html ids w.r.t jQuery api
*
* @param originalId Id to be converted into a JS compliant ID
* @return JS compliant ID
*/
public static String generateJQueryCompliantID(String originalId) {
String validId = originalId;
// add any meta characters needed to be defined into this array
String[] metaCharacters = {":", ".", "-"};
for (String character : metaCharacters) {
if (originalId.contains(character)) {
// replaces the meta charaters in a bpel package name with double underscores
validId = validId.replace(character, "__");
}
}
return validId;
}
/**
* when scope events defined in deploy.xml is changed in runtime by DD Editor this method is used to get the
* updated events list
* assigned with each scope event. It is got as a string array with the data about the events selected and
* categories into (5 for each) groups. Then these events list is again written back to the corresponding scope
* event
*/
public static void updateScopeEvents(String[] selecttype, List<String> scopeNames,
DeploymentDescriptorUpdater deployDescriptorUpdater) {
ArrayList<String> valueArray = selecttype != null ?
new ArrayList<String>(Arrays.asList(selecttype)) : new ArrayList<String>();
ListIterator<String> it = valueArray.listIterator();
while (it.hasNext()) {
String nextVal = it.next();
if (!nextVal.equalsIgnoreCase("0") && it.hasNext()) {
it.next();
it.remove();
}
}
String[] allEnabledEvents = valueArray.toArray(new String[valueArray.size()]);
ScopeEventType[] scopeEventTypes = new ScopeEventType[scopeNames.size()];
for (int j = 0; j < scopeNames.size(); j++) {
ScopeEventType scopeEventType = new ScopeEventType();
scopeEventType.setScope(scopeNames.get(j));
String[] events = new String[5];
System.arraycopy(allEnabledEvents, 0, events, 0, 5);
ArrayList<String> actualEventsList = new ArrayList<String>();
for (String event : events) {
if (!event.equalsIgnoreCase("0")) {
actualEventsList.add(event);
}
}
String[] eventsArray = actualEventsList.toArray(new String[actualEventsList.size()]);
EnableEventListType enableEventListType = new EnableEventListType();
enableEventListType.setEnableEvent(eventsArray);
scopeEventType.setEnabledEventList(enableEventListType);
scopeEventTypes[j] = scopeEventType;
}
deployDescriptorUpdater.setScopeEvents(scopeEventTypes);
}
}