/// <summary>
        /// Returns a collection of tags that has not changed int the messages consumed in this machine.
        /// </summary>
        /// <returns></returns>
        protected TagsCollectionBase GetConstantTagsForCurrentMessages()
        {
            TagsCollectionBase constantTags = null;

            foreach (var message in this.FinalMessages)
            {
                if (message is MicroPlannerMessageArc)
                {
                    var tags = (message as MicroPlannerMessageArc).Arc.Tags;
                    if (tags == null)
                    { // one of the tags collection is empty, intersection is also empty.
                        return(new TagsCollection());
                    }
                    else
                    {     // calculate intersection.
                        if (constantTags == null)
                        { // first tags.
                            constantTags = tags;
                        }
                        else
                        { // calculate intersection.
                            constantTags.Intersect(tags);
                            if (constantTags.Count == 0)
                            { // no intersection.
                                return(constantTags);
                            }
                        }
                    }
                }
            }
            return(constantTags);
        }