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); } }
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); } }