⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nodeimpl.cs

📁 基于DotNet的开源工作流引擎
💻 CS
字号:
using System.Collections;
using Iesi.Collections;
using NetBpm.Util.Xml;

namespace NetBpm.Workflow.Definition.Impl
{
	public class NodeImpl : DefinitionObjectImpl, INode
	{
		protected internal IProcessBlock _processBlock = null;
		protected internal ISet _arrivingTransitions = null;
		protected internal ISet _leavingTransitions = null;

		public IProcessBlock ProcessBlock
		{
			set { _processBlock = value; }
			get { return _processBlock; }
		}

		public ISet ArrivingTransitions
		{
			set { _arrivingTransitions = value; }
			get { return _arrivingTransitions; }
		}

		public ISet LeavingTransitions
		{
			set { _leavingTransitions = value; }
			get { return _leavingTransitions; }
		}

		/// <summary> standard, the transition destination scope it the same scope as the node's scope.
		/// Only the JoinImpl will have a different opinion on this :-)
		/// </summary>
		protected internal virtual CreationContext TransitionDestinationScope
		{
			set { value.TransitionDestinationScope = value.ProcessBlock; }

		}

		public NodeImpl()
		{
		}

		public NodeImpl(IProcessDefinition processDefinition) : base(processDefinition)
		{
			this._arrivingTransitions = new ListSet();
			this._leavingTransitions = new ListSet();
		}

		public TransitionImpl CreateLeavingTransition()
		{
			TransitionImpl transition = new TransitionImpl(_processDefinition);
			transition.From = this;
			_leavingTransitions.Add(transition);
			return transition;
		}

		public override void ReadProcessData(XmlElement xmlElement, CreationContext creationContext)
		{
			base.ReadProcessData(xmlElement, creationContext);

			this._arrivingTransitions = new ListSet();
			this._leavingTransitions = new ListSet();
			this._processBlock = creationContext.ProcessBlock;

			creationContext.Node = this;
			this.TransitionDestinationScope = creationContext;
			IEnumerator iter = xmlElement.GetChildElements("transition").GetEnumerator();
			while (iter.MoveNext())
			{
				XmlElement transitionElement = (XmlElement) iter.Current;
				TransitionImpl transition = new TransitionImpl();
				transition.ReadProcessData(transitionElement, creationContext);
				_leavingTransitions.Add(transition);
			}
			creationContext.TransitionDestinationScope = null;
			creationContext.Node = null;
			creationContext.AddReferencableObject(_name, (ProcessBlockImpl) this._processBlock, typeof (INode), this);
		}

		public override void Validate(ValidationContext validationContext)
		{
			validationContext.PushScope("in " + TypeName + " '" + _name + "'");
			base.Validate(validationContext);
			this.ValidateLeavingTransitions(validationContext);
			validationContext.PopScope();
		}

		/// <summary> standard, a node must have at least one leaving transition.
		/// Only the EndStateImpl will have a different opinion on this :-)
		/// </summary>
		protected internal virtual void ValidateLeavingTransitions(ValidationContext validationContext)
		{
			validationContext.Check((_leavingTransitions.Count > 0), "no transitions leaving this node");
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -