📄 xmlworkitemcoder.java
字号:
else elt = new org.jdom.Element(CLOSED_FILTER); WicUtils.setAttribute(elt, NAME, f.getName()); WicUtils.setAttribute(elt, ADD_ALLOWED, ""+f.isAddAllowed()); WicUtils.setAttribute(elt, REMOVE_ALLOWED, ""+f.isRemoveAllowed()); encodeEntryList(elt, f); return elt; } protected void encodeEntryList (org.jdom.Element result, Filter f) { if (f.getEntries() == null || f.getEntries().size() < 1) { //log.debug("encodePatternList() - list is empty"); return; } java.util.Iterator it = f.getEntries().iterator(); while (it.hasNext()) { FilterEntry entry = (FilterEntry)it.next(); if (entry.getPermissions().trim().equals("")) continue; // do not add 'hidden' fields org.jdom.Element elt = new org.jdom.Element(FIELD); elt.setAttribute(REGEX, entry.getFieldRegex()); elt.setAttribute(PERMISSIONS, entry.getPermissions()); //if (entry.getAttributeType() != null) // elt.setAttribute(TYPE, entry.getAttributeType()); result.addContent(elt); } } // // DECODING // /* * This method prefetches any workitem out of its inputStream... * So socket timeout isn't reached... * / private java.io.Reader prefetch (final java.io.InputStream is) throws java.io.IOException { final java.io.BufferedReader br = new java.io.BufferedReader (new java.io.InputStreamReader(is, Utils.getCharset())); StringBuffer sXml = new StringBuffer(); String line = null; while (true) { line = br.readLine(); // // edt : exception thrown here... // IOException : "Underlying input stream returned zero bytes" if (line == null) { //log.debug("prefetch() line is null. Breaking."); break; } sXml.append(line); sXml.append('\n'); //log.debug("prefetch() line is )"+line+"("); if (line.indexOf("</"+CANCELITEM+">") > -1 || line.indexOf("</"+WORKITEM+">") > -1 || line.indexOf("</"+LAUNCHITEM+">") > -1) { break; } } //java.io.ByteArrayInputStream bais = new java.io.ByteArrayInputStream // (sXml.toString().getBytes()); java.io.ByteArrayInputStream bais = new java.io.ByteArrayInputStream (sXml.toString().getBytes(Utils.getEncoding())); return new java.io.InputStreamReader(bais, Utils.getEncoding()); } */ protected org.jdom.Document fetchDocument (final Object o) throws CodingException { log.debug("fetchDocument() instance of "+o.getClass().getName()); // // turn anything into an input stream java.io.InputStream stream = null; java.io.Reader reader = null; try { if (o instanceof java.io.Reader) { reader = (java.io.Reader)o; } else if (o instanceof java.io.File) { reader = new java.io.FileReader((java.io.File)o); } else if (o instanceof String) { reader = new java.io.StringReader((String)o); } else if (o instanceof java.io.InputStream) { //reader = prefetch((java.io.InputStream)o); //reader = new java.io.InputStreamReader // ((java.io.InputStream)o, Utils.getCharset()); stream = (java.io.InputStream)o; } else if (o instanceof java.net.URL) { //reader = new java.io.InputStreamReader // (((java.net.URL)o).openStream()); stream = ((java.net.URL)o).openStream(); } else if (o instanceof org.jdom.Document) { return (org.jdom.Document)o; } else if (o instanceof org.jdom.Element) { return (org.jdom.Document)((org.jdom.Element)o).getParent(); } /* else if (o instanceof java.nio.channels.ReadableByteChannel) { reader = NetUtils.channelToReader ((java.nio.channels.ReadableByteChannel)o); } */ else { throw new CodingException ("Cannot decode "+o.getClass().getName()); } } catch (final Throwable t) { throw new CodingException ("Failed to decode workitem", t); } //log.debug("fetchDocument() reader ready"); // // generate xml doc final org.jdom.input.SAXBuilder builder = new org.jdom.input.SAXBuilder(); org.jdom.Document doc = null; try { if (stream != null) doc = builder.build(stream); else doc = builder.build(reader); } catch (final Throwable t) { throw new CodingException ("Failed to decode incoming workitem with SAX", t); } finally { try { if (stream != null) stream.close(); if (reader != null) reader.close(); } catch (final Throwable t) { // ignore } } //log.debug("fetchDocument() document built"); return doc; } public WorkItem decode (final Object o, final ApplicationContext context, final java.util.Map serviceParams) throws CodingException { log.debug("decode()"); org.jdom.Document doc = fetchDocument(o); org.jdom.Element rootElt = doc.getRootElement(); // // determine type of workitem WorkItem wi = null; log.debug("decode() rootElt is >"+rootElt.getName()+"<"); if (rootElt.getName().equals(WORKITEM)) { wi = decodeInFlowWorkItem(rootElt); } else if (rootElt.getName().equals(LAUNCHITEM)) { wi = decodeLaunchItem(rootElt); } else if (rootElt.getName().equals(CANCELITEM)) { wi = decodeCancelItem(rootElt); } else { throw new CodingException ("Cannot handle elements named '"+ rootElt.getName()+"' as workitems"); } decodeWorkItem(wi, rootElt); // // return result return wi; } /** * Decoding a FlowExpressionId out of XML. */ public FlowExpressionId decodeFlowExpressionId (final org.jdom.Element elt) { FlowExpressionId fei = new FlowExpressionId(); fei.setEngineId (elt.getAttributeValue(ENGINE_ID)); fei.setInitialEngineId (elt.getAttributeValue(INITIAL_ENGINE_ID)); fei.setWorkflowDefinitionUrl (elt.getAttributeValue(WORKFLOW_DEFINITION_URL)); fei.setWorkflowDefinitionName (elt.getAttributeValue(WORKFLOW_DEFINITION_NAME)); fei.setWorkflowDefinitionRevision (elt.getAttributeValue(WORKFLOW_DEFINITION_REVISION)); fei.setExpressionName (elt.getAttributeValue(EXPRESSION_NAME)); fei.setWorkflowInstanceId (elt.getAttributeValue(WORKFLOW_INSTANCE_ID)); fei.setExpressionId (elt.getAttributeValue(EXPRESSION_ID)); return fei; } protected void decodeWorkItem (final WorkItem target, final org.jdom.Element elt) throws CodingException { log.debug("decodeworkItem()"); target.setLastModified (elt.getAttributeValue(LAST_MODIFIED)); //log.debug("decodeWorkItem() got 'lastModified'"); // // parse attributes org.jdom.Element attElt = elt.getChild(ATTRIBUTES); if (attElt != null) { attElt = attElt.getChild(SMAP); if (attElt != null) { AttributeCoder coder = getAttributeCoder(SMAP); target.setAttributes((StringMapAttribute)coder .decode(attElt, null)); } } } protected InFlowWorkItem decodeInFlowWorkItem (org.jdom.Element elt) throws CodingException { InFlowWorkItem wi = new InFlowWorkItem(); org.jdom.Element leiElt = elt.getChild(LAST_EXPRESSION_ID); if (leiElt != null) { leiElt = leiElt.getChild(FLOW_EXPRESSION_ID); wi.setLastExpressionId(decodeFlowExpressionId(leiElt)); } wi.setParticipantName(elt.getAttributeValue(PARTICIPANT_NAME)); wi.setDispatchTime(elt.getAttributeValue(DISPATCH_TIME)); // // decode filter wi.setFilter(decodeFilter(elt)); // // decode history wi.setHistory(decodeHistory(elt)); return wi; } protected CancelItem decodeCancelItem (org.jdom.Element elt) throws CodingException { CancelItem ci = new CancelItem(); org.jdom.Element eiElt = elt.getChild(LAST_EXPRESSION_ID); if (eiElt != null) { eiElt = eiElt.getChild(FLOW_EXPRESSION_ID); ci.setLastExpressionId(decodeFlowExpressionId(eiElt)); } ci.setParticipantName(elt.getAttributeValue(PARTICIPANT_NAME)); return ci; } protected java.util.List decodeHistory (final org.jdom.Element elt) { java.util.List history = new java.util.ArrayList(7); org.jdom.Element hElt = elt.getChild(HISTORY); if (hElt == null) return history; java.util.Iterator it = hElt.getChildren(HISTORY_ITEM).iterator(); while (it.hasNext()) history.add(decodeHistoryItem((org.jdom.Element)it.next())); return history; } protected HistoryItem decodeHistoryItem (org.jdom.Element elt) { HistoryItem item = new HistoryItem(); item.setDate(elt.getAttributeValue(DATE)); item.setAuthor(elt.getAttributeValue(AUTHOR)); item.setHost(elt.getAttributeValue(HOST)); item.setText(elt.getTextTrim()); item.setWorkflowDefinitionName (elt.getAttributeValue(WORKFLOW_DEFINITION_NAME)); item.setWorkflowDefinitionRevision (elt.getAttributeValue(WORKFLOW_DEFINITION_REVISION)); try { item.setWorkflowInstanceId (elt.getAttributeValue(WORKFLOW_INSTANCE_ID)); } catch (NumberFormatException nfe) { // let workflow instance id to -1 } item.setExpressionId(elt.getAttributeValue(EXPRESSION_ID)); return item; } protected Filter decodeFilter (org.jdom.Element elt) { org.jdom.Element filterElt = elt.getChild(CLOSED_FILTER); if (filterElt == null) filterElt = elt.getChild(OPEN_FILTER); if (filterElt == null) return null; // no filter at all Filter filter = new Filter(); if (filterElt.getName().equals(OPEN_FILTER)) filter.setType(Filter.TYPE_OPEN); else filter.setType(Filter.TYPE_CLOSED); filter.setName(filterElt.getAttributeValue(NAME)); //log.debug("*********** FilterName >"+filter.getName()+"<"); String s = filterElt.getAttributeValue(ADD_ALLOWED); //log.debug("*********** AddAllowed ? >"+s+"<"); filter.setAddAllowed (s != null && s.trim().toLowerCase().equals("true")); s = filterElt.getAttributeValue(REMOVE_ALLOWED); //log.debug("*********** RemoveAllowed ? >"+s+"<"); filter.setRemoveAllowed (s != null && s.trim().toLowerCase().equals("true")); filter.setEntries(decodeEntryList(filterElt)); return filter; } protected java.util.List decodeEntryList (org.jdom.Element filterElt) { java.util.List result = new java.util.ArrayList(); java.util.Iterator it = filterElt.getChildren(FIELD).iterator(); while (it.hasNext()) { org.jdom.Element elt = (org.jdom.Element)it.next(); String fieldRegex = elt.getAttributeValue(REGEX).trim(); String permissions = elt.getAttributeValue(PERMISSIONS).trim(); //String type = elt.getAttributeValue(TYPE); FilterEntry entry = new FilterEntry(fieldRegex, permissions/*, type*/); result.add(entry); } return result; } protected LaunchItem decodeLaunchItem (org.jdom.Element elt) throws CodingException { LaunchItem li = new LaunchItem(); // // decode wfdUrl li.setWorkflowDefinitionUrl (elt.getAttributeValue(WORKFLOW_DEFINITION_URL)); // // decode description map org.jdom.Element dmElt = elt.getChild(DESCRIPTION_MAP); if (dmElt != null && dmElt.getChild(SMAP) != null) { //log.debug("parsing launchitem description map"); dmElt = dmElt.getChild(SMAP); AttributeCoder coder = getAttributeCoder(SMAP); StringMapAttribute smap = (StringMapAttribute)coder .decode(dmElt, null); li.setDescriptionMap(smap); } return li; } // // STATIC METHODS}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -