<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -106,6 +106,10 @@ Public Class ScheduleElement
         Dim schedule As IMonitorSchedule = SiphonConfigurationSection.CreateInstance(Me.Type)
         schedule.Initialize(Me)
 
+        For Each exclusion As ExclusionElement In Me.Exclusions
+            schedule.Exclusions.Add(New ScheduleExclusion(exclusion.From, exclusion.To))
+        Next
+
         Return schedule
     End Function
 </diff>
      <filename>Siphon/Configuration/ScheduleElement.vb</filename>
    </modified>
    <modified>
      <diff>@@ -30,6 +30,27 @@ Public Class ScheduleExclusion
     End Sub
 
     ''' &lt;summary&gt;
+    ''' Creates a new ScheduleExclusion using strings containing DateTime or TimeSpan formats.
+    ''' &lt;/summary&gt;
+    ''' &lt;param name=&quot;from&quot;&gt;String. The start of the schedules exclusion.&lt;/param&gt;
+    ''' &lt;param name=&quot;to&quot;&gt;String. The end of the schedules exclusion.&lt;/param&gt;
+    ''' &lt;remarks&gt;This is used to load an exclusion dynamically from strings read from config.&lt;/remarks&gt;
+    Public Sub New(ByVal from As String, ByVal [to] As String)
+        Dim ts As TimeSpan
+        Dim dt As DateTime
+
+        If TimeSpan.TryParse(from, ts) AndAlso TimeSpan.TryParse([to], ts) Then
+            _from = Date.MinValue + TimeSpan.Parse(from)
+            _to = Date.MinValue + TimeSpan.Parse([to])
+        ElseIf DateTime.TryParse(from, dt) AndAlso DateTime.TryParse([to], dt) Then
+            _from = from
+            _to = [to]
+        Else
+            Throw New FormatException(&quot;From/To must both be TimeSpan or Datetime parsable strings&quot;)
+        End If
+    End Sub
+
+    ''' &lt;summary&gt;
     ''' Returns the next available DateTime, checking if the start is within the current exclusion.
     ''' &lt;/summary&gt;
     ''' &lt;param name=&quot;start&quot;&gt;DateTime. The proposed next date time.&lt;/param&gt;</diff>
      <filename>Siphon/Schedules/ScheduleExclusion.vb</filename>
    </modified>
    <modified>
      <diff>@@ -72,6 +72,7 @@ Public Class ConfigurationTests
         Assert.IsInstanceOfType(GetType(MockProcessor), monitor.Processor)
         Assert.AreEqual(DataActions.Rename Or DataActions.Move, monitor.ProcessCompleteActions)
         Assert.AreEqual(DataActions.Delete, monitor.ProcessFailureActions)
+        Assert.AreEqual(2, monitor.Schedule.Exclusions.Count)
 
         monitor = section.Monitors(1).CreateInstance
         Assert.IsInstanceOfType(GetType(FtpDirectoryMonitor), monitor)</diff>
      <filename>SiphonTests/Configuration/ConfigurationTests.vb</filename>
    </modified>
    <modified>
      <diff>@@ -121,4 +121,36 @@ Public Class ExclusionTests
     End Sub
 #End Region
 
+#Region &quot;String Tests&quot;
+
+    &lt;Test(Description:=&quot;Can create an exclusion with strings&quot;)&gt; _
+    Public Sub CanCreateUsingString()
+        Dim exclusion As New ScheduleExclusion(&quot;1:20:00&quot;, &quot;2:30:00&quot;)
+
+        Assert.IsInstanceOfType(GetType(ScheduleExclusion), exclusion)
+    End Sub
+
+    &lt;Test(Description:=&quot;Returns first available DateTime after excluded String range&quot;)&gt; _
+    Public Sub ReturnsFirstAvailableDateTimeAfterStringDateTimeRange()
+        Dim from As DateTime = DateTime.Parse(&quot;10/10/2010 1:00PM&quot;)
+        Dim [to] As DateTime = from.AddHours(1)
+        Dim nextAvailable As DateTime = [to].AddSeconds(1)
+
+        Dim exclusion As New ScheduleExclusion(from.ToString, [to].ToString)
+
+        Assert.AreEqual(nextAvailable, exclusion.NextAvailable(from.AddMinutes(2)))
+    End Sub
+
+    &lt;Test(Description:=&quot;Returns first available DateTime after excluded String range&quot;)&gt; _
+    Public Sub ReturnsFirstAvailableDateTimeAfterStringTimeSpanRange()
+        Dim start As DateTime = DateTime.Parse(&quot;10/10/2010 1:30AM&quot;)
+        Dim nextAvailable As DateTime = DateTime.Parse(&quot;10/10/2010 2:30:01AM&quot;)
+
+        Dim exclusion As New ScheduleExclusion(&quot;1:20&quot;, &quot;2:30&quot;)
+
+        Assert.AreEqual(nextAvailable, exclusion.NextAvailable(start))
+    End Sub
+
+#End Region
+
 End Class</diff>
      <filename>SiphonTests/Schedules/ExclusionTests.vb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>5fd3887c9b11f7e32be7b586be6fd524945e5c59</id>
    </parent>
  </parents>
  <author>
    <name>Christopher H. Laco</name>
    <email>claco@chrislaco.com</email>
  </author>
  <url>http://github.com/claco/siphon/commit/8a28dd5dec9fe31b7969f084ce7b1b27b503da9a</url>
  <id>8a28dd5dec9fe31b7969f084ce7b1b27b503da9a</id>
  <committed-date>2009-10-13T11:31:02-07:00</committed-date>
  <authored-date>2009-10-13T11:31:02-07:00</authored-date>
  <message>Make sure Element.CreateInstance loads exclusions into Schedule</message>
  <tree>e038f164f0ce018613b5b2fdfc11ff898bf4a51e</tree>
  <committer>
    <name>Christopher H. Laco</name>
    <email>claco@chrislaco.com</email>
  </committer>
</commit>
