Esempio n. 1
0
        /// <summary>
        ///     Creates a copy of the rule in the designated dictionary. The namespace structure is copied over.
        ///     The new rule is set to update this one.
        /// </summary>
        /// <param name="dictionary">The target dictionary of the copy</param>
        /// <returns></returns>
        public Rule CreateRuleUpdate(Dictionary dictionary)
        {
            Rule retVal = (Rule)Duplicate();

            retVal.SetUpdateInformation(this);
            retVal.ClearAllRequirements();

            String[] names = FullName.Split('.');
            names = names.Take(names.Count() - 1).ToArray();

            if (Enclosing is NameSpace)
            {
                NameSpace nameSpace = dictionary.GetNameSpaceUpdate(names, Dictionary);
                nameSpace.appendRules(retVal);
            }
            else
            {
                String[] nameSpaceRef = names.Take(names.Count() - 1).ToArray();

                if (EnclosingStateMachine != null)
                {
                    StateMachine stateMachine = EnclosingStateMachine.CreateSubStateMachineUpdate(dictionary);
                    stateMachine.appendRules(retVal);
                }
                else if (EnclosingStructure != null)
                {
                    NameSpace nameSpace = dictionary.GetNameSpaceUpdate(nameSpaceRef, Dictionary);
                    Structure structure = nameSpace.GetStructureUpdate(names.Last(), (NameSpace)nameSpace.Updates);
                    structure.appendRules(retVal);
                }
            }

            return(retVal);
        }
Esempio n. 2
0
        /// <summary>
        ///     Creates a copy of the state in the designated dictionary. The namespace structure is copied over.
        ///     The new state is set to update this one.
        /// </summary>
        /// <param name="dictionary">The target dictionary of the copy</param>
        /// <returns></returns>
        public State CreateStateUpdate(Dictionary dictionary)
        {
            State retVal = (State)acceptor.getFactory().createState();

            retVal.Name = Name;
            retVal.SetUpdateInformation(this);

            // Find the update for the enclosing state machine to add retVal to
            StateMachine enclosingSmUpdate = EnclosingStateMachine.CreateSubStateMachineUpdate(dictionary);

            enclosingSmUpdate.States.Add(retVal);
            retVal.setFather(enclosingSmUpdate);

            // If retVal is the first state added to the enclosing state machine update, it is the initial state
            if (enclosingSmUpdate.States.Count == 1)
            {
                enclosingSmUpdate.Default = retVal.Name;
            }

            return(retVal);
        }