SharpLibEar/Action.cs
changeset 264 4a08e1b7ba64
parent 258 e237c2e33545
child 265 82e87f4956ea
     1.1 --- a/SharpLibEar/Action.cs	Wed Aug 31 16:24:33 2016 +0200
     1.2 +++ b/SharpLibEar/Action.cs	Wed Aug 31 17:28:30 2016 +0200
     1.3 @@ -13,6 +13,27 @@
     1.4      [DataContract]
     1.5      public abstract class Action: Object
     1.6      {
     1.7 +        [DataMember]
     1.8 +        [AttributeObjectProperty
     1.9 +            (
    1.10 +            Id = "Action.Iterations",
    1.11 +            Name = "Iterations",
    1.12 +            Description = "Specifies the number of time this action should execute.",
    1.13 +            Minimum = "0",
    1.14 +            Maximum = "10000",
    1.15 +            Increment = "1"
    1.16 +            )
    1.17 +        ]
    1.18 +        public int Iterations { get; set; } = 1;
    1.19 +
    1.20 +        /// <summary>
    1.21 +        /// 
    1.22 +        /// </summary>
    1.23 +        public bool Enabled
    1.24 +        {
    1.25 +            get { return Iterations > 0; }
    1.26 +        }
    1.27 +
    1.28          protected abstract Task DoExecute();
    1.29  
    1.30          /// <summary>
    1.31 @@ -24,18 +45,51 @@
    1.32              Execute();
    1.33          }
    1.34  
    1.35 +        /// <summary>
    1.36 +        /// Execute our action N times.
    1.37 +        /// </summary>
    1.38 +        /// <returns></returns>
    1.39          public async Task Execute()
    1.40          {
    1.41 -            Trace.WriteLine("Action executing: " + Brief());
    1.42              if (!IsValid())
    1.43              {
    1.44 -                Trace.WriteLine($"WARNING: action invalid, aborting execution.");
    1.45 +                Trace.WriteLine("EAR: Action.Execute: WARNING: Action invalid, aborting execution: " + Brief());
    1.46                  return;
    1.47              }
    1.48 -            
    1.49 -            await DoExecute();
    1.50 +
    1.51 +            if (!Enabled)
    1.52 +            {
    1.53 +                Trace.WriteLine("EAR: Action.Execute: Action disabled: " + Brief());
    1.54 +                return;
    1.55 +            }
    1.56 +
    1.57 +            for (int i = Iterations; i > 0; i--)
    1.58 +            {
    1.59 +                Trace.WriteLine($"EAR: Action.Execute: [{Iterations - i + 1}/{Iterations}] - {BriefBase()}");
    1.60 +                await DoExecute();
    1.61 +            }            
    1.62          }
    1.63  
    1.64 +
    1.65 +        public virtual string BriefBase()
    1.66 +        {
    1.67 +            return base.Brief();
    1.68 +        }
    1.69 +
    1.70 +        /// <summary>
    1.71 +        /// Dynamic object description.
    1.72 +        /// </summary>
    1.73 +        /// <returns></returns>
    1.74 +        public sealed override string Brief()
    1.75 +        {
    1.76 +            return Iterations > 1 ? $"{Iterations} x " + BriefBase():BriefBase();
    1.77 +        }
    1.78 +
    1.79 +
    1.80 +
    1.81 +
    1.82 +
    1.83 +
    1.84      }
    1.85  
    1.86