Exemplo n.º 1
0
		private static IEnumerable<StateWrapper> GetStateWrappers(List<Dialog> dialogs, State state)
		{
			return from d in dialogs
				   from s in d.States
				   where s.State == state
				   select s;
		}
Exemplo n.º 2
0
		private IEnumerable<State> GetPredecessors(State state, bool includeSelf)
		{
			foreach (State predecessor in state.Predecessors)
			{
				if (!RemovedTransitions.Contains(Transition.GetLink(predecessor, state)))
				{
					if (includeSelf || predecessor != state)
						yield return predecessor;
				}
			}
		}
Exemplo n.º 3
0
		private IEnumerable<State> GetPredecessors(State state)
		{
			return GetPredecessors(state, false);
		}
Exemplo n.º 4
0
		private IEnumerable<StateWrapper> GetStateWrappers(State state)
		{
			return (
				from d in Dialogs
				from s in d.States
				where s.State == state
				select s
			);
		}
Exemplo n.º 5
0
		private void CreateTransitions(IEnumerable<State> predecessors, State state)
		{
			Transition transition;
			foreach (State predecessor in predecessors)
			{
				transition = Transition.GetLink(predecessor, state);
				foreach (StateWrapper sw in GetStateWrappers(predecessor).ToList())
					TransitionCreated = sw.AddTransition(transition.Key, state, transition.Order) || TransitionCreated;
			}
		}
Exemplo n.º 6
0
		private void CreateDialog(State state)
		{
			if (Dialogs.Where(d => d.Initial == state).FirstOrDefault() == null)
				Dialogs.Add(new Dialog(state));
		}
Exemplo n.º 7
0
		public Dialog(State initial)
		{
			Initial = initial;
			AddState(new StateWrapper(initial, this));
		}
Exemplo n.º 8
0
		private static void WriteChildElements(DslModeling::SerializationContext serializationContext, State element, global::System.Xml.XmlWriter writer)
		{
			// Transition
			global::System.Collections.ObjectModel.ReadOnlyCollection<Transition> allTransitionInstances = Transition.GetLinksToSuccessors(element);
			if (!serializationContext.Result.Failed && allTransitionInstances.Count > 0)
			{
				writer.WriteStartElement("successors");
				foreach (Transition eachTransitionInstance in allTransitionInstances)
				{
					if (serializationContext.Result.Failed)
						break;
	
					DslModeling::DomainClassXmlSerializer relSerializer = serializationContext.Directory.GetSerializer(eachTransitionInstance.GetDomainClass().Id);
					global::System.Diagnostics.Debug.Assert(relSerializer != null, "Cannot find serializer for " + eachTransitionInstance.GetDomainClass().Name + "!");
					relSerializer.Write(serializationContext, eachTransitionInstance, writer);
				}
				writer.WriteEndElement();
			}
	
		}
Exemplo n.º 9
0
		private static IEnumerable<StateWrapper> GetStateWrappersCanNavigateTo(List<Dialog> dialogs, State state, State successor)
		{
			return from sw in GetStateWrappers(dialogs, state)
				   where sw.CanNavigateTo(successor, Transition.GetLink(state, successor).Key)
				   select sw;
		}
Exemplo n.º 10
0
		private static void ReadTransitionInstances(DslModeling::SerializationContext serializationContext, State element, global::System.Xml.XmlReader reader)
		{
			while (!serializationContext.Result.Failed && !reader.EOF && reader.NodeType == global::System.Xml.XmlNodeType.Element)
			{
				DslModeling::DomainClassXmlSerializer newTransitionSerializer = serializationContext.Directory.GetSerializer(Transition.DomainClassId);
				global::System.Diagnostics.Debug.Assert(newTransitionSerializer != null, "Cannot find serializer for Transition!");
				Transition newTransition = newTransitionSerializer.TryCreateInstance (serializationContext, reader, element.Partition) as Transition;
				if (newTransition != null)
				{
					DslModeling::DomainRoleInfo.SetRolePlayer (newTransition, Transition.PredecessorDomainRoleId, element);
					DslModeling::DomainClassXmlSerializer targetSerializer = serializationContext.Directory.GetSerializer (newTransition.GetDomainClass().Id);	
					global::System.Diagnostics.Debug.Assert (targetSerializer != null, "Cannot find serializer for " + newTransition.GetDomainClass().Name + "!");
					targetSerializer.Read(serializationContext, newTransition, reader);
				}
				else
				{	// Maybe the relationship is serialized in short-form by mistake.
					DslModeling::DomainClassXmlSerializer newStateMonikerOfTransitionSerializer = serializationContext.Directory.GetSerializer(State.DomainClassId);
					global::System.Diagnostics.Debug.Assert(newStateMonikerOfTransitionSerializer != null, "Cannot find serializer for State!");
					DslModeling::Moniker newStateMonikerOfTransition = newStateMonikerOfTransitionSerializer.TryCreateMonikerInstance(serializationContext, reader, element, Transition.DomainClassId, element.Partition);
					if (newStateMonikerOfTransition != null)
					{
						NavigationLanguageSerializationBehaviorSerializationMessages.ExpectingFullFormRelationship(serializationContext, reader, typeof(Transition));
						new Transition(element.Partition, new DslModeling::RoleAssignment(Transition.PredecessorDomainRoleId, element), new DslModeling::RoleAssignment(Transition.SuccessorDomainRoleId, newStateMonikerOfTransition));
						DslModeling::SerializationUtilities.Skip(reader);	// Moniker contains no child XML elements, so just skip.
					}
					else
					{	// Unknown element, skip.
						DslModeling::SerializationUtilities.Skip(reader);
					}
				}
			}
		}
Exemplo n.º 11
0
		/// <summary>
		/// This method deserializes all child model elements.
		/// </summary>
		/// <remarks>
		/// The caller will position the reader at the open tag of the first child XML element to deserialized.
		/// This method will read as many child elements as it can. It returns under three circumstances:
		/// 1) When an unknown child XML element is encountered. In this case, this method will position the reader at the 
		///    open tag of the unknown element. This implies that if the first child XML element is unknown, this method 
		///    should return immediately and do nothing.
		/// 2) When all child XML elemnets are read. In this case, the reader will be positioned at the end tag of the parent element.
		/// 3) EOF.
		/// </remarks>
		/// <param name="serializationContext">Serialization context.</param>
		/// <param name="reader">XmlReader to read serialized data from.</param>
		/// <param name="element">In-memory State instance that will get the deserialized data.</param>
		private static void ReadChildElements(DslModeling::SerializationContext serializationContext, State element, global::System.Xml.XmlReader reader)
		{
			if (!serializationContext.Result.Failed && !reader.EOF && reader.NodeType == global::System.Xml.XmlNodeType.Element)
			{
				if (string.Compare(reader.LocalName, "successors", global::System.StringComparison.CurrentCulture) == 0)
				{
					if (reader.IsEmptyElement)
					{	// No instance of this relationship, just skip
						DslModeling::SerializationUtilities.Skip(reader);
					}
					else
					{
						DslModeling::SerializationUtilities.SkipToFirstChild(reader);  // Skip the open tag of <successors>
						ReadTransitionInstances(serializationContext, element, reader);
						DslModeling::SerializationUtilities.Skip(reader);  // Skip the close tag of </successors>
					}
				}
			}
		}
Exemplo n.º 12
0
		public bool CanNavigateTo(State state, string key)
		{
			return Transitions.Where(t => t.To.State == state && (key != null ? t.Key == key : true)).FirstOrDefault() != null;
		}
Exemplo n.º 13
0
		public bool AddTransition(string key, State to, int order)
		{
			if (!CanNavigateTo(to, null))
			{
				Transitions.Add(new TransitionWrapper(key, Parent.AddState(new StateWrapper(to, Parent)), this, order));
				return true;
			}
			return false;
		}
Exemplo n.º 14
0
		public StateWrapper(State state, Dialog parent)
		{
			State = state;
			Parent = parent;
			Route = state.Route;
		}