123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- using System;
- namespace Wayne.Lib.StateEngine
- {
- /// <summary>
- /// Describe the enter-transition for a state class.
- /// </summary>
- [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1036:OverrideMethodsOnComparableTypes")]
- public class EnterDescriptionAttribute : Attribute, IComparable
- {
- #region Fields
- private readonly string conditionText;
- private readonly object transitionType;
- private readonly bool unconditionalOverriding;
- #endregion
- #region Construction
- /// <summary>
- /// Drescribe a transition that is done unconditionally when entering a state.
- /// </summary>
- /// <param name="transitionType">Transition that is performed.</param>
- public EnterDescriptionAttribute(object transitionType):this("",transitionType)
- {
- this.transitionType = transitionType;
- }
- /// <summary>
- /// Drescribe a transitin that can be done when entering a state, and what condition that triggers the transition.
- /// </summary>
- /// <param name="conditionText">A descriptive text for the condition.</param>
- /// <param name="transitionType">Transition that is performed.</param>
- public EnterDescriptionAttribute(string conditionText, object transitionType)
- {
- this.conditionText = conditionText;
- this.transitionType = transitionType;
- }
- /// <summary>
- /// Drescribe a transitin that can be done when entering a state.
- /// </summary>
- /// <param name="conditionText">A descriptive text for the condition.</param>
- /// <param name="transitionType">Transition that is performed.</param>
- /// <param name="unconditionalOverriding">Tells whether this transition unconditionally overrides all inherited ones.</param>
- public EnterDescriptionAttribute(string conditionText, object transitionType,
- bool unconditionalOverriding)
- {
- this.conditionText = conditionText;
- this.transitionType = transitionType;
- this.unconditionalOverriding = unconditionalOverriding;
- }
- #endregion
- #region Properties
- /// <summary>
- /// A descriptive text for the condition.
- /// </summary>
- public string ConditionText
- {
- get { return conditionText; }
- }
- /// <summary>
- /// Transition type that is performed.
- /// </summary>
- public object TransitionType
- {
- get { return transitionType; }
- }
- /// <summary>
- /// Tells whether this transition unconditionally overrides all inherited ones.
- /// </summary>
- public bool UnconditionalOverriding
- {
- get { return unconditionalOverriding; }
- }
- #endregion
- #region IComparable Members
- /// <summary>
- /// Compares this attribute with another one.
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public virtual int CompareTo(object obj)
- {
- int result = 0;
- EventDescriptionAttribute compareEventDescriptionAttribute = obj as EventDescriptionAttribute;
- if ((compareEventDescriptionAttribute != null) && (!(this is EventDescriptionAttribute)))
- {
- // An EnterDescriptionAttribute should come before an EventDescriptionAttribute.
- result = -1;
- }
- else
- {
- EnterDescriptionAttribute compareEnterDescriptionAttribute = obj as EnterDescriptionAttribute;
- if (compareEnterDescriptionAttribute != null)
- {
- if ((TransitionType != null) && (compareEnterDescriptionAttribute.TransitionType != null))
- {
- result = TransitionType.ToString().CompareTo(compareEnterDescriptionAttribute.TransitionType.ToString());
- if (result == 0)
- result = ConditionText.CompareTo(compareEnterDescriptionAttribute.ConditionText);
- }
- else if (TransitionType != null)
- result = 1;
- else if (compareEnterDescriptionAttribute.TransitionType != null)
- result = -1;
- }
- }
- return result;
- }
- /// <summary>
- /// Equals.
- /// </summary>
- /// <param name="obj"></param>
- /// <returns></returns>
- public override bool Equals(object obj)
- {
- EnterDescriptionAttribute compareEnterDescriptionAttribute = obj as EnterDescriptionAttribute;
- if (compareEnterDescriptionAttribute != null)
- {
- if (transitionType == null)
- return (compareEnterDescriptionAttribute.transitionType == null);
- return transitionType.Equals(compareEnterDescriptionAttribute.transitionType);
- }
- return base.Equals(obj);
- }
- /// <summary>
- /// GetHashCode.
- /// <note>The compiler complained that this method also should be overriden when the Equals was.</note>
- /// </summary>
- /// <returns></returns>
- public override int GetHashCode()
- {
- return base.GetHashCode();
- }
- #endregion
- }
- }
|