Example #1
0
        private void WriterNodes(IFlow flow, StreamWriter xmlwriter)
        {
            IEnumerator iter = flow.Logs.GetEnumerator();

            while (iter.MoveNext())
            {
                ILog eventLog = (ILog)iter.Current;
                xmlwriter.WriteLine("id->" + eventLog.Id);
                if (eventLog.EventType == EventType.FORK)
                {
                    IEnumerator flowIter = eventLog.GetObjectReferences("Flow").GetEnumerator();

                    while (flowIter.MoveNext())
                    {
                        ObjectReferenceImpl objectReference = (ObjectReferenceImpl)flowIter.Current;
                        DbSession           session         = OpenSession();
                        objectReference.Resolve(session);
                        session.Close();
                        IFlow subFlow = (IFlow)objectReference.GetObject();
                        xmlwriter.WriteLine("subflow" + subFlow + " ->" + subFlow);
                        WriterNodes(subFlow, xmlwriter);
                    }
                }
                else if (eventLog.EventType == EventType.SUB_PROCESS_INSTANCE_START)
                {
                    IObjectReference objectReference    = (IObjectReference)eventLog.GetObjectReferences("ProcessInstance").GetEnumerator().Current;
                    IProcessInstance subProcessInstance = (IProcessInstance)objectReference.GetObject();
                    WriterNodes(subProcessInstance.RootFlow, xmlwriter);
                }
            }
        }
Example #2
0
 private void  AddDetail(ILogDetail logDetail)
 {
     if (logDetail is IAttributeUpdate)
     {
         IAttributeUpdate attributeUpdate = (IAttributeUpdate)logDetail;
         AddDetail("Attribute update", "[" + attributeUpdate.Attribute.Name + "]</b> to <b>[" + attributeUpdate.GetValue() + "]");
     }
     else if (logDetail is IMessage)
     {
         IMessage message = (IMessage)logDetail;
         AddDetail("Message", message.MessageText);
     }
     else if (logDetail is IDelegateCall)
     {
         IDelegateCall delegateCall = (IDelegateCall)logDetail;
         // FIXME: why this could be null?
         if (delegateCall.GetInterface() != null)
         {
             AddDetail("Action handler", delegateCall.GetInterface().FullName);
         }
     }
     else if (logDetail is IExceptionReport)
     {
         IExceptionReport exceptionReport = (IExceptionReport)logDetail;
         AddDetail("<font color=red>Exception</font>", "<font color=red>" + exceptionReport.ExceptionMessage + "</font>");
     }
     else if (logDetail is IObjectReference)
     {
         IObjectReference objectReference = (IObjectReference)logDetail;
         System.Object    object_Renamed  = objectReference.GetObject();
         if (object_Renamed is IActivityState)
         {
             IActivityState activityState = (IActivityState)object_Renamed;
             AddDetail("Activitystate", activityState.Name);
         }
         else
         {
             log.Warn("unknown object reference type : " + object_Renamed);
         }
     }
     else
     {
         log.Warn("unknown log-detail type : " + logDetail);
     }
 }
Example #3
0
        private void  WriteFlowEvent(TextWriter logDetail, ILog eventLog, IFlow flow)
        {
            logDetail.Write("  <tr>" + "\r\n");
            logDetail.Write("    <td bgcolor=#ffffff>" + "\r\n");
            logDetail.Write("      <table border=0 cellspacing=0 cellpadding=0 width=100%>" + "\r\n");
            logDetail.Write("        <tr><th class=tableEventLogCell width=100% colspan=2 nowrap>" + eventLog.EventType + "</th></tr>" + "\r\n");
            logDetail.Write("        <tr>" + "\r\n");
            logDetail.Write("          <td>&nbsp;&nbsp;&nbsp;&nbsp;</td>" + "\r\n");
            logDetail.Write("          <td width=100%>" + "\r\n");

            this.details = new System.Collections.ArrayList();
            AddDetail("Time", eventLog.Date.ToString());

            IActor actor = eventLog.GetActor();

            if (actor != null)
            {
                AddDetail("Actor", actor.Name);
            }

            if (eventLog.EventType == EventType.FORK)
            {
                logDetail.Write("            <table border=0 cellpadding=0 cellspacing=5>" + "\r\n");
                logDetail.Write("              <tr>" + "\r\n");
                IEnumerator iter = eventLog.GetObjectReferences("Flow").GetEnumerator();

                while (iter.MoveNext())
                {
                    IObjectReference objectReference = (IObjectReference)iter.Current;
                    IFlow            subFlow         = (IFlow)objectReference.GetObject();
                    subFlow = GetFlow(subFlow.Id);

                    logDetail.Write("                <td valign=top height=100%>" + "\r\n");
                    WriteFlow(logDetail, subFlow);
                    logDetail.Write("                </td>" + "\r\n");
                }
                logDetail.Write("              </tr>" + "\r\n");
                logDetail.Write("            </table>" + "\r\n");
            }
            else if (eventLog.EventType == EventType.SUB_PROCESS_INSTANCE_START)
            {
                IObjectReference objectReference    = (IObjectReference)eventLog.GetObjectReferences("ProcessInstance").GetEnumerator().Current;
                IProcessInstance subProcessInstance = (IProcessInstance)objectReference.GetObject();
                IFlow            subFlow            = GetFlow(subProcessInstance.RootFlow.Id);
                WriteFlow(logDetail, subFlow);
            }
            else
            {
                // if it is no fork or subprocess, log the details
                IEnumerator iter = eventLog.Details.GetEnumerator();
                while (iter.MoveNext())
                {
                    AddDetail((ILogDetail)iter.Current);
                }

                WriteDetails(logDetail);
            }

            logDetail.Write("          </td>" + "\r\n");
            logDetail.Write("        </tr>" + "\r\n");
            logDetail.Write("        <tr><td>&nbsp;</td></tr>" + "\r\n");
            logDetail.Write("      </table>" + "\r\n");
            logDetail.Write("    </td>" + "\r\n");
            logDetail.Write("  </tr>" + "\r\n");
        }