/** * Copyright 1996-2014 FoxBPM ORG. * * 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. * * @author kenshin * @author ych */ package org.foxbpm.engine.impl.util; import java.util.Iterator; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.node.ArrayNode; import org.foxbpm.kernel.runtime.ProcessInstanceStatus; /** * 默认location解析器 * 将processLocation的json串解析成特定显示格式 * @author ych * */ public class LocationUtil { public static String parseProcessLocation(String processLocationJson){ ObjectMapper objectMapper = new ObjectMapper(); String processStatus = ""; JsonNode jsonNode= null ; if(StringUtil.isEmpty(processLocationJson)){ return ""; } try { jsonNode = objectMapper.readTree(processLocationJson); }catch (Exception e) { throw ExceptionUtil.getException("10806001", e,processLocationJson); } processStatus = jsonNode.get("processStatus").getTextValue(); if(ProcessInstanceStatus.RUNNING.equals(processStatus)){ ArrayNode nodes = (ArrayNode)jsonNode.get("nodes"); if(nodes != null){ StringBuilder sb = new StringBuilder(); Iterator<JsonNode> nodeIterator = nodes.iterator(); sb.append("<div>"); while(nodeIterator.hasNext()){ JsonNode tmpNode = nodeIterator.next(); sb.append("<span title='"); sb.append("处理者:["); if(tmpNode.get("users") != null){ JsonNode users = tmpNode.get("users"); if(users instanceof ArrayNode){ sb.append("用户:"); Iterator<JsonNode> userIterator = users.iterator(); while(userIterator.hasNext()){ JsonNode userNode= userIterator.next(); sb.append(userNode.get("userName").getTextValue()); sb.append(","); } sb.deleteCharAt(sb.length()-1); } } if(tmpNode.get("groups") != null){ JsonNode group = tmpNode.get("groups"); if(group instanceof ArrayNode){ if(group != null){ sb.append("部门:"); Iterator<JsonNode> userIterator = group.iterator(); while(userIterator.hasNext()){ JsonNode userNode= userIterator.next(); sb.append(userNode.get("groupName").getTextValue()); sb.append(","); } sb.deleteCharAt(sb.length()-1); } } } sb.append("]'>"); sb.append(tmpNode.get("nodeName").getTextValue()); sb.append("</span>"); } sb.append("</div>"); return sb.toString(); } } if(ProcessInstanceStatus.COMPLETE.equals(processStatus)){ return "已完成"; }else if(ProcessInstanceStatus.ABORT.equals(processStatus)){ return "已终止"; } return "未知状态"; } }