Beispiel #1
0
        internal static DataAssociation ParseDataAssociation(XmlNode node)
        {
            var result = new DataAssociation();

            if (node != null)
            {
                long id1, id2;

                if (long.TryParse(XmlHelper.GetNodeText(node, "id1"), out id1))
                {
                    result.ID1 = id1;
                }

                if (long.TryParse(XmlHelper.GetNodeText(node, "id2"), out id2))
                {
                    result.ID2 = id2;
                }

                result.Data = XmlHelper.GetNodeText(node, "data");
                result.Name = XmlHelper.GetNodeText(node, "name");
                double timeStamp;
                if (double.TryParse(XmlHelper.GetNodeText(node, "time"), out timeStamp))
                {
                    var createTime = DateHelper.ConvertDoubleToDate(timeStamp);
                    result.Time = createTime;
                }
            }

            return(result);
        }
Beispiel #2
0
        public void UpdateTheDataInputCurrentValue()
        {
            var output   = new DataOutput("a");
            var element1 = new NullElement();

            element1.Outputs.Add(output);

            var input    = new DataInput("a");
            var element2 = new NullElement();

            element2.Inputs.Add(input);

            var model = ProcessModel.Create()
                        .AddNullElement("element1", element1)
                        .AddNullElement("element2", element2)
                        .AddDataAssociation("assoc", DataAssociation.Create("element1", "a", "element2", "a"));

            var models = new InMemoryProcessModelsStore();

            models.Store(model);

            var manager = new ProcessManager(
                models,
                new InMemoryProcessInstancesStore()
                );

            var instance = ProcessInstance.Create(model);

            manager.Attach(instance);

            var context = new ExecutionContext(manager, model, instance, instance.Token, null);

            output.Update(context, "element1", "Hello World");
            input.GetCurrentValue(context, "element2").Should().Be("Hello World");
        }
Beispiel #3
0
        public override void ParseChildElement(XMLStreamReader xtr, BaseElement parentElement, BpmnModel model)
        {
            if (!(parentElement is Activity))
            {
                return;
            }
            DataAssociation dataAssociation = new DataAssociation();

            BpmnXMLUtil.AddXMLLocation(dataAssociation, xtr);
            DataAssociationParser.parseDataAssociation(dataAssociation, ElementName, xtr);

            ((Activity)parentElement).DataInputAssociations.Add(dataAssociation);
        }
Beispiel #4
0
        public void UsingDataReceivedInStartEventInTheFollowingAction()
        {
            var    input  = "Hello World";
            string output = null;

            var start = CatchAnyEventCatcher.Create();

            start.SetEventDataOutput("o");

            var activity = LambdaActivity.Create((la, ctx) =>
            {
                var i  = la.GetDataInputByName("i");
                output = (string)i.GetCurrentValue(ctx, "middle");
            });

            activity.Inputs.Add("i");

            var model = ProcessModel.Create()
                        .AddEventCatcher("start", start)
                        .AddActivity("middle", activity)
                        .AddEventThrower("end", SilentEventThrower.Instance)
                        .AddSequenceFlow("start", "middle", "end")
                        .AddDataAssociation("startToMiddle",
                                            DataAssociation.Create("start", "o", "middle", "i"));

            var models = new InMemoryProcessModelsStore();

            models.Store(model);

            var instances = new InMemoryProcessInstancesStore();

            var pm = new ProcessManager(models, instances);

            pm.HandleEvent(input);

            output.Should().Be(input);
        }
Beispiel #5
0
        public static void parseDataAssociation(DataAssociation dataAssociation, string elementName, XMLStreamReader xtr)
        {
            bool       readyWithDataAssociation = false;
            Assignment assignment = null;

            try
            {
                dataAssociation.Id = xtr.GetAttributeValue("id");

                while (!readyWithDataAssociation && xtr.HasNext())
                {
                    //xtr.next();

                    if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_SOURCE_REF.Equals(xtr.LocalName))
                    {
                        string sourceRef = xtr.ElementText;
                        if (!string.IsNullOrWhiteSpace(sourceRef))
                        {
                            dataAssociation.SourceRef = sourceRef.Trim();
                        }
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_TARGET_REF.Equals(xtr.LocalName))
                    {
                        string targetRef = xtr.ElementText;
                        if (!string.IsNullOrWhiteSpace(targetRef))
                        {
                            dataAssociation.TargetRef = targetRef.Trim();
                        }
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_TRANSFORMATION.Equals(xtr.LocalName))
                    {
                        string transformation = xtr.ElementText;
                        if (!string.IsNullOrWhiteSpace(transformation))
                        {
                            dataAssociation.Transformation = transformation.Trim();
                        }
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_ASSIGNMENT.Equals(xtr.LocalName))
                    {
                        assignment = new Assignment();
                        BpmnXMLUtil.AddXMLLocation(assignment, xtr);
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_FROM.Equals(xtr.LocalName))
                    {
                        string from = xtr.ElementText;
                        if (assignment != null && !string.IsNullOrWhiteSpace(from))
                        {
                            assignment.From = from.Trim();
                        }
                    }
                    else if (xtr.IsStartElement() && BpmnXMLConstants.ELEMENT_TO.Equals(xtr.LocalName))
                    {
                        string to = xtr.ElementText;
                        if (assignment != null && !string.IsNullOrWhiteSpace(to))
                        {
                            assignment.To = to.Trim();
                        }
                    }
                    else if (xtr.EndElement && BpmnXMLConstants.ELEMENT_ASSIGNMENT.Equals(xtr.LocalName))
                    {
                        if (!string.IsNullOrWhiteSpace(assignment.From) && !string.IsNullOrWhiteSpace(assignment.To))
                        {
                            dataAssociation.Assignments.Add(assignment);
                        }
                    }
                    else if (xtr.EndElement && elementName.Equals(xtr.LocalName))
                    {
                        readyWithDataAssociation = true;
                    }

                    if (xtr.IsEmptyElement && elementName.Equals(xtr.LocalName, StringComparison.OrdinalIgnoreCase))
                    {
                        readyWithDataAssociation = true;
                    }
                }
            }
            catch (Exception e)
            {
                log.LogWarning(e, "Error parsing data association child elements");
            }
        }
Beispiel #6
0
 protected internal virtual AbstractDataAssociation CreateDataOutputAssociation(DataAssociation dataAssociationElement)
 {
     if (!string.IsNullOrWhiteSpace(dataAssociationElement.SourceRef))
     {
         return(new MessageImplicitDataOutputAssociation(dataAssociationElement.TargetRef, dataAssociationElement.SourceRef));
     }
     else
     {
         ExpressionManager       expressionManager     = Context.ProcessEngineConfiguration.ExpressionManager;
         IExpression             transformation        = expressionManager.CreateExpression(dataAssociationElement.Transformation);
         AbstractDataAssociation dataOutputAssociation = new TransformationDataOutputAssociation(null, dataAssociationElement.TargetRef, transformation);
         return(dataOutputAssociation);
     }
 }
Beispiel #7
0
        protected internal virtual AbstractDataAssociation CreateDataInputAssociation(DataAssociation dataAssociationElement)
        {
            if (dataAssociationElement.Assignments.Count == 0)
            {
                return(new MessageImplicitDataInputAssociation(dataAssociationElement.SourceRef, dataAssociationElement.TargetRef));
            }
            else
            {
                SimpleDataInputAssociation dataAssociation   = new SimpleDataInputAssociation(dataAssociationElement.SourceRef, dataAssociationElement.TargetRef);
                ExpressionManager          expressionManager = Context.ProcessEngineConfiguration.ExpressionManager;

                foreach (Assignment assignmentElement in dataAssociationElement.Assignments)
                {
                    if (!string.IsNullOrWhiteSpace(assignmentElement.From) && !string.IsNullOrWhiteSpace(assignmentElement.To))
                    {
                        IExpression      from       = expressionManager.CreateExpression(assignmentElement.From);
                        IExpression      to         = expressionManager.CreateExpression(assignmentElement.To);
                        Datas.Assignment assignment = new Datas.Assignment(from, to);
                        dataAssociation.AddAssignment(assignment);
                    }
                }
                return(dataAssociation);
            }
        }
Beispiel #8
0
 // validate null
 public ProcessModel AddDataAssociation(
     string name,
     DataAssociation association
     ) => AddElement(
     NamedProcessElement <DataAssociation> .Create(name, association)
     );