⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlworkitemcoder.java

📁 一个工作流设计及定义的系统,可以直接与数据库结合进行系统工作流程的定义及应用.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        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 + -