Exemplo n.º 1
0
        static void PrintRelationshipMatrix(RelationshipMatrix matrix, List <string> listActivities)
        {
            var sFollow           = "";
            var sNotFollow        = "";
            var sReciprocalFollow = "";
            var sCause            = "";
            var sNone             = "";

            foreach (var actX in listActivities)
            {
                foreach (var actY in listActivities)
                {
                    var relType = matrix[Tuple.Create(actX, actY)];
                    var relText = $"({actX},{actY})";

                    if (relType == RelationshipType.Follow)
                    {
                        sFollow += (sFollow.Length > 0 ? ", " : "") + relText;
                    }
                    else if (relType == RelationshipType.Cause)
                    {
                        sCause += (sCause.Length > 0 ? ", " : "") + relText;
                    }
                    else if (relType == RelationshipType.NotFollow)
                    {
                        sNotFollow += (sNotFollow.Length > 0 ? ", " : "") + relText;
                    }
                    else if (relType == RelationshipType.ReciprocalFollow)
                    {
                        sReciprocalFollow += (sReciprocalFollow.Length > 0 ? ", " : "") + relText;
                    }
                    else
                    {
                        sNone += (sNone.Length > 0 ? ", " : "") + relText;
                    }
                }
            }

            //Console.WriteLine("Follow [> L1] = {" + sFollow + "}");
            Console.WriteLine("Cause [-> L1] = {" + sCause + "}");
            Console.WriteLine("NotFollow [# L1] = {" + sNotFollow + "}");
            Console.WriteLine("ReciprocalFollow [|| L1] = {" + sReciprocalFollow + "}");
            //Console.WriteLine("None = {" + sNone + "}");
        }
Exemplo n.º 2
0
        private PetriNetPlace AddPlaceBetweenTransitions(PetriNetDefinition definition, RelationshipMatrix matrix, PetriNetTransition from, PetriNetTransition to)
        {
            PetriNetPlace result = null;

            foreach (var flowFrom in to.From)
            {
                var placeFrom   = flowFrom.From;
                var flowOrigin  = placeFrom.From[0];
                var transOrigin = flowOrigin.From;


                var relTypeFrom = matrix[Tuple.Create(from.Name, transOrigin.Name)];

                if (relTypeFrom == RelationshipType.NotFollow) //(c) XOR-Join pattern: a -> c, b -> c, and a#b
                {
                    result = placeFrom as PetriNetPlace;
                    definition.AddFlow(null, from, result);

                    return(null);
                }
            }

            var relType = matrix[Tuple.Create(from.Name, to.Name)];

            if (relType == RelationshipType.Cause) //(a) Sequence pattern: a -> b
            {
                result = definition.AddPlace(null, PetriNetPlaceType.Middle);
                definition.AddFlow(null, from, result);
                definition.AddFlow(null, result, to);
            }


            return(result);
        }