Ejemplo n.º 1
0
        private void parseState(Queue <IXamlElement> token)
        {
            if (token.Peek().QName.Equals(createQName("State")))
            {
                // State
                SMState state = new SMState();
                states.Add(state);

                // [Start] State
                IXamlElement element = token.Dequeue();

                // Reference
                String reference = element.Attributes["x:Name"];
                state.Id = reference;
                // Final State
                String att;
                if (element.Attributes.TryGetValue("IsFinal", out att))
                {
                    if (att.Equals("True"))
                    {
                        state.Final = true;
                    }
                }

                while (!token.Peek().QName.Equals(createQName("State")))
                {
                    if (token.Peek().QName.Equals(createQName("State.Entry")))
                    {
                        // [Start] State.Entry
                        token.Dequeue();
                        // Activity
                        IActivity activity = moduleFactory.CreateActivity(token.Peek().QName);
                        if (activity != null)
                        {
                            state.Entry = activity.Parse(token);
                        }
                        else
                        {
                            throw new ParseException(String.Format("No Module found for activity '{0}'", QName), initialTokenCount - token.Count, QName);
                        }
                        // [End] State.Entry
                        token.Dequeue();
                    }
                    else if (token.Peek().QName.Equals(createQName("State.Exit")))
                    {
                        // [Start] State.Exit
                        token.Dequeue();
                        // Activity
                        IActivity activity = moduleFactory.CreateActivity(token.Peek().QName);
                        if (activity != null)
                        {
                            state.Exit = activity.Parse(token);
                        }
                        else
                        {
                            throw new ParseException(String.Format("No Module found for activity '{0}'", QName), initialTokenCount - token.Count, QName);
                        }
                        // [End] State.Exit
                        token.Dequeue();
                    }
                    else if (token.Peek().QName.Equals(createQName("State.Transitions")))
                    {
                        // [Start] State.Transitions
                        token.Dequeue();

                        // Transitions
                        while (!token.Peek().QName.Equals(createQName("State.Transitions")))
                        {
                            // Transition
                            state.Transitions.Add(parseTransition(token));
                        }
                        // [End] State.Transitions
                        token.Dequeue();
                    }
                    else
                    {
                        throw new ParseException(String.Format("Unknown tag found in activity '{0}'", QName), initialTokenCount - token.Count, QName);
                    }
                }

                // [End] State
                token.Dequeue();
            }
            else if (token.Peek().QName.Equals(createQName("Reference", ns_x)))
            {
                // [Start][End] Reference
                token.Dequeue();
                token.Dequeue();
            }
            else
            {
                throw new ParseException(String.Format("Unknown tag found in activity '{0}'", QName), initialTokenCount - token.Count, QName);
            }
        }
Ejemplo n.º 2
0
        private void parseState(Queue<IXamlElement> token)
        {
            if (token.Peek().QName.Equals(createQName("State")))
            {
                // State
                SMState state = new SMState();
                states.Add(state);

                // [Start] State
                IXamlElement element = token.Dequeue();

                // Reference
                String reference = element.Attributes["x:Name"];
                state.Id = reference;
                // Final State
                String att;
                if(element.Attributes.TryGetValue("IsFinal", out att))
                {
                    if (att.Equals("True")) { state.Final = true; }
                }

                while (!token.Peek().QName.Equals(createQName("State")))
                {
                    if (token.Peek().QName.Equals(createQName("State.Entry")))
                    {
                        // [Start] State.Entry
                        token.Dequeue();
                        // Activity
                        IActivity activity = moduleFactory.CreateActivity(token.Peek().QName);
                        if (activity != null)
                        {
                            state.Entry = activity.Parse(token);
                        }
                        else
                        {
                            throw new ParseException(String.Format("No Module found for activity '{0}'", QName), initialTokenCount - token.Count, QName);
                        }
                        // [End] State.Entry
                        token.Dequeue();
                    }
                    else if (token.Peek().QName.Equals(createQName("State.Exit")))
                    {
                        // [Start] State.Exit
                        token.Dequeue();
                        // Activity
                        IActivity activity = moduleFactory.CreateActivity(token.Peek().QName);
                        if (activity != null)
                        {
                            state.Exit = activity.Parse(token);
                        }
                        else
                        {
                            throw new ParseException(String.Format("No Module found for activity '{0}'", QName), initialTokenCount - token.Count, QName);
                        }
                        // [End] State.Exit
                        token.Dequeue();
                    }
                    else if (token.Peek().QName.Equals(createQName("State.Transitions")))
                    {
                        // [Start] State.Transitions
                        token.Dequeue();

                        // Transitions
                        while (!token.Peek().QName.Equals(createQName("State.Transitions")))
                        {
                            // Transition
                            state.Transitions.Add(parseTransition(token));
                        }
                        // [End] State.Transitions
                        token.Dequeue();
                    }
                    else
                    {
                        throw new ParseException(String.Format("Unknown tag found in activity '{0}'", QName), initialTokenCount - token.Count, QName);
                    }
                }

                // [End] State
                token.Dequeue();
            }
            else if (token.Peek().QName.Equals(createQName("Reference", ns_x)))
            {
                // [Start][End] Reference
                token.Dequeue();
                token.Dequeue();
            }
            else
            {
                throw new ParseException(String.Format("Unknown tag found in activity '{0}'", QName), initialTokenCount - token.Count, QName);
            }
        }