public ProjectConfigurationDialogue(IWorksheetProvider wsProvider, INamedRangeProvider nrProvider)
 {
     InitializeComponent();
     Text = TextResources.Title_ProjectConfigurationDialogue;
     DialogResult = DialogResult.Cancel;
     ConfigurationDialogueContent content = Content;
     content.WorksheetProvider = wsProvider;
     content.NamedRangeProvider = nrProvider;
     content.Accepted += Content_Accepted;
     content.Cancelled += Content_Cancelled;
 }
 /// <summary>
 /// Identifies a worksheet whose custom identifier matches the supplied key.
 /// </summary>
 /// <param name="provider">The IWorksheetProvider that provides the eligible worksheets.</param>
 /// <param name="key">The unique GUID string to be matched.</param>
 /// <returns>The matching worksheet, or null if no match could be found.</returns>
 public Excel.Worksheet GetWorksheet(IWorksheetProvider provider, string key)
 {
     Excel.Worksheet[] sheets = provider.GetWorksheets();
     return sheets.FirstOrDefault(s => MatchesKey(s, key));
 }
 /// <summary>
 /// Sets this ProjectInvocationRule's IWorksheetProvider and INamedRangeProvider references, throwing an 
 /// ArgumentNullException if either is null.
 /// </summary>
 private void SetProviders(IWorksheetProvider wsProvider, INamedRangeProvider nrProvider)
 {
     if (wsProvider == null) {
         throw new ArgumentNullException("wsProvider");
     }
     if (nrProvider == null) {
         throw new ArgumentNullException("nrProvider");
     }
     m_wsProvider = wsProvider;
     m_nrProvider = nrProvider;
 }
 /// <summary>
 /// Initialises a new, empty ProjectInvocationRule instance.
 /// </summary>
 /// <param name="wsProvider">An IWorksheetProvider implementation.</param>
 /// <param name="nrProvider">An INamedRangeProvider implementation.</param>
 /// <param name="id">A number that identifies the ProjectInvocationRule in a set of such rules.</param>
 /// <exception cref="System.ArgumentNullException">Either the IWorksheetProvider or the INamedRangeProvider 
 /// is null.</exception>
 public ProjectInvocationRule(IWorksheetProvider wsProvider, INamedRangeProvider nrProvider, int id)
 {
     SetProviders(wsProvider, nrProvider);
     Id = id;
     m_inputSheetKey = m_outputSheetKey = GetFirstSheetKey();
     UpdateInputSheetRangeNames();
     UpdateOutputSheetRangeNames();
 }
 /// <summary>
 /// Initialises a new ProjectInvocationRule using persisted field values.
 /// </summary>
 /// <param name="wsProvider">An IWorksheetProvider implementation.</param>
 /// <param name="nrProvider">An INamedRangeProvider implementation.</param>
 /// <param name="reader">An IDataReader capable of supplying the requisite field values on demand.</param>
 /// <exception cref="System.ArgumentNullException">Either the IWorksheetProvider or the INamedRangeProvider 
 /// is null.</exception>
 /// <exception cref="System.NullReferenceException">The IDataReader is null.</exception>
 public ProjectInvocationRule(IWorksheetProvider wsProvider, INamedRangeProvider nrProvider, IDataReader reader)
 {
     SetProviders(wsProvider, nrProvider);
     Id = reader.Read<int>();
     UsesInput = reader.Read<bool>();
     InputSheetKey = reader.Read<string>();
     InputCellRange = reader.Read<string>();
     InputRangeOrder = reader.Read<RangeOrdering>();
     TimeLimit = reader.Read<int>();
     Unit = reader.Read<TimeUnit>();
     UsesOutput = reader.Read<bool>();
     OutputSheetKey = reader.Read<string>();
     OutputCellRange = reader.Read<string>();
     OutputRangeOrder = reader.Read<RangeOrdering>();
     ProjectPath = reader.Read<string>();
     ReloadProjectBeforeExecuting = reader.Read<bool>();
     Enabled = reader.Read<bool>();
     LastExecutionResult = reader.Read<ExecutionResult>();
     UpdateInputSheetRangeNames();
     UpdateOutputSheetRangeNames();
 }
 private static ProjectInvocationRule Create(
     int id,
     IWorksheetProvider wsProvider = null,
     INamedRangeProvider nrProvider = null)
 {
     wsProvider = wsProvider ?? new Mock<IWorksheetProvider>().Object;
     nrProvider = nrProvider ?? new Mock<INamedRangeProvider>().Object;
     return new ProjectInvocationRule(wsProvider, nrProvider, id);
 }
 private static ProjectInvocationRule Create(
     IWorksheetProvider wsProvider = null, 
     INamedRangeProvider nrProvider = null, 
     IDataReader reader = null)
 {
     wsProvider = wsProvider ?? new Mock<IWorksheetProvider>().Object;
     nrProvider = nrProvider ?? new Mock<INamedRangeProvider>().Object;
     reader = reader ?? new Mock<IDataReader>().Object;
     return new ProjectInvocationRule(wsProvider, nrProvider, reader);
 }
 /// <summary>
 /// Reads a set of project invocation rules from a worksheet.
 /// </summary>
 /// <remarks>
 /// The worksheet is expected to store the execution mode in cell A1.  Each invocation rule occupies 
 /// its own row, starting at row 2: each column contains a field value and all such values are used 
 /// collectively to rehydrate a rule.
 /// </remarks>
 /// <param name="wsProvider">An IWorksheetProvider implementation.</param>
 /// <param name="nrProvider">An INamedRangeProvider implementation.</param>
 /// <param name="ws">The worksheet containing the rules to be read.</param>
 /// <param name="mode">The ExecutionMode read from the worksheet.</param>
 /// <param name="rules">The project invocation rules read from the worksheet.</param>
 public void Load(IWorksheetProvider wsProvider, INamedRangeProvider nrProvider, Excel.Worksheet ws, out ExecutionMode mode, out ProjectInvocationRule[] rules)
 {
     mode = Helper.ReadCell<ExecutionMode>(ws, 1, 1);
     var reader = new ProjectRuleDataReader(wsProvider, nrProvider);
     rules = reader.Read(ws, 2);
 }