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