/// <summary> Constructor for a new instance of the Actionable_Builder_Source_Folder class </summary> /// <param name="ExistingBaseInstance"> An existing base instance used to populate this class with data </param> /// <param name="AssemblyClassToModule"> Dictionary to all the built folder builder modules </param> /// <remarks> This extends the core class <see cref="Builder_Source_Folder"/> and adds some methods to perform work </remarks> public Actionable_Builder_Source_Folder(Builder_Source_Folder ExistingBaseInstance, Dictionary <string, iFolderModule> AssemblyClassToModule) { Allow_Deletes = ExistingBaseInstance.Allow_Deletes; Allow_Folders_No_Metadata = ExistingBaseInstance.Allow_Folders_No_Metadata; Allow_Metadata_Updates = ExistingBaseInstance.Allow_Metadata_Updates; Archive_All_Files = ExistingBaseInstance.Archive_All_Files; Archive_TIFFs = ExistingBaseInstance.Archive_TIFFs; BibID_Roots_Restrictions = ExistingBaseInstance.BibID_Roots_Restrictions; Failures_Folder = ExistingBaseInstance.Failures_Folder; Folder_Name = ExistingBaseInstance.Folder_Name; Inbound_Folder = ExistingBaseInstance.Inbound_Folder; Perform_Checksum = ExistingBaseInstance.Perform_Checksum; Processing_Folder = ExistingBaseInstance.Processing_Folder; BuilderModules = new List <iFolderModule>(); // Copy over the folder modules foreach (Builder_Module_Setting settings in ExistingBaseInstance.Builder_Module_Set.Builder_Modules) { if (AssemblyClassToModule.ContainsKey(settings.Key)) { iFolderModule module = AssemblyClassToModule[settings.Key]; if (module != null) { BuilderModules.Add(module); } } } }
/// <summary> Build the modules for the non-folder specific builder modules </summary> /// <param name="InstanceName"> Name of the current instance, which tells where the plug-in assemblies may be located </param> /// <returns> Either null, or a list of errors encountered </returns> public List <string> Builder_Modules_From_Settings(string InstanceName) { // Build the return value List <string> errors = new List <string>(); string errorMessage; // Clear existing modules preProcessModules.Clear(); processItemModules.Clear(); deleteItemModules.Clear(); postProcessModules.Clear(); allFolderModules.Clear(); AssemblyClassToModule.Clear(); // Create all the pre-process modules foreach (Builder_Module_Setting preSetting in settings.PreProcessModulesSettings) { // Look for the standard if (String.IsNullOrEmpty(preSetting.Assembly)) { switch (preSetting.Class) { case "SobekCM.Builder_Library.Modules.PreProcess.ProcessPendingFdaReportsModule": iPreProcessModule thisModule = new ProcessPendingFdaReportsModule(); if ((!String.IsNullOrEmpty(preSetting.Argument1)) || (!String.IsNullOrEmpty(preSetting.Argument2)) || (!String.IsNullOrEmpty(preSetting.Argument3))) { if (thisModule.Arguments == null) { thisModule.Arguments = new List <string>(); } thisModule.Arguments.Add(String.IsNullOrEmpty(preSetting.Argument1) ? String.Empty : preSetting.Argument1); thisModule.Arguments.Add(String.IsNullOrEmpty(preSetting.Argument2) ? String.Empty : preSetting.Argument2); thisModule.Arguments.Add(String.IsNullOrEmpty(preSetting.Argument3) ? String.Empty : preSetting.Argument3); } preProcessModules.Add(thisModule); continue; } } object preAsObj = Get_Module(preSetting, InstanceName, out errorMessage); if ((preAsObj == null) && (errorMessage.Length > 0)) { errors.Add(errorMessage); } else { iPreProcessModule preAsPre = preAsObj as iPreProcessModule; if (preAsPre == null) { errors.Add(preSetting.Class + " loaded from assembly but does not implement the IPreProcessModules interface!"); } else { if ((!String.IsNullOrEmpty(preSetting.Argument1)) || (!String.IsNullOrEmpty(preSetting.Argument2)) || (!String.IsNullOrEmpty(preSetting.Argument3))) { if (preAsPre.Arguments == null) { preAsPre.Arguments = new List <string>(); } preAsPre.Arguments.Add(String.IsNullOrEmpty(preSetting.Argument1) ? String.Empty : preSetting.Argument1); preAsPre.Arguments.Add(String.IsNullOrEmpty(preSetting.Argument2) ? String.Empty : preSetting.Argument2); preAsPre.Arguments.Add(String.IsNullOrEmpty(preSetting.Argument3) ? String.Empty : preSetting.Argument3); } preProcessModules.Add(preAsPre); } } } // Create all the post-process modules foreach (Builder_Module_Setting postSetting in settings.PostProcessModulesSettings) { // Look for the standard if (String.IsNullOrEmpty(postSetting.Assembly)) { switch (postSetting.Class) { case "SobekCM.Builder_Library.Modules.PostProcess.BuildAggregationBrowsesModule": iPostProcessModule thisModule = new BuildAggregationBrowsesModule(); if ((!String.IsNullOrEmpty(postSetting.Argument1)) || (!String.IsNullOrEmpty(postSetting.Argument2)) || (!String.IsNullOrEmpty(postSetting.Argument3))) { if (thisModule.Arguments == null) { thisModule.Arguments = new List <string>(); } thisModule.Arguments.Add(String.IsNullOrEmpty(postSetting.Argument1) ? String.Empty : postSetting.Argument1); thisModule.Arguments.Add(String.IsNullOrEmpty(postSetting.Argument2) ? String.Empty : postSetting.Argument2); thisModule.Arguments.Add(String.IsNullOrEmpty(postSetting.Argument3) ? String.Empty : postSetting.Argument3); } postProcessModules.Add(thisModule); continue; } } object postAsObj = Get_Module(postSetting, InstanceName, out errorMessage); if ((postAsObj == null) && (errorMessage.Length > 0)) { errors.Add(errorMessage); } else { iPostProcessModule postAsPost = postAsObj as iPostProcessModule; if (postAsPost == null) { errors.Add(postSetting.Class + " loaded from assembly but does not implement the IPostProcessModules interface!"); } else { if ((!String.IsNullOrEmpty(postSetting.Argument1)) || (!String.IsNullOrEmpty(postSetting.Argument2)) || (!String.IsNullOrEmpty(postSetting.Argument3))) { if (postAsPost.Arguments == null) { postAsPost.Arguments = new List <string>(); } postAsPost.Arguments.Add(String.IsNullOrEmpty(postSetting.Argument1) ? String.Empty : postSetting.Argument1); postAsPost.Arguments.Add(String.IsNullOrEmpty(postSetting.Argument2) ? String.Empty : postSetting.Argument2); postAsPost.Arguments.Add(String.IsNullOrEmpty(postSetting.Argument3) ? String.Empty : postSetting.Argument3); } postProcessModules.Add(postAsPost); } } } // Create all the item processing modules (for new or updated item) foreach (Builder_Module_Setting itemSetting in settings.ItemProcessModulesSettings) { iSubmissionPackageModule itemModule = Get_Submission_Module(itemSetting, InstanceName, out errorMessage); if ((itemModule == null) && (!String.IsNullOrEmpty(errorMessage))) { errors.Add(errorMessage); } else { processItemModules.Add(itemModule); } } // Create all the item processing modules (for deleting items) foreach (Builder_Module_Setting itemSetting in settings.ItemDeleteModulesSettings) { iSubmissionPackageModule itemModule = Get_Submission_Module(itemSetting, InstanceName, out errorMessage); if ((itemModule == null) && (!String.IsNullOrEmpty(errorMessage))) { errors.Add(errorMessage); } else { deleteItemModules.Add(itemModule); } } // Create the folder modules - look at every folder foreach (Builder_Source_Folder thisFolder in settings.IncomingFolders) { // If not linked to a module set, do nothing if (thisFolder.Builder_Module_Set == null) { errors.Add("Folder has no module set, so no processing will occur ( " + thisFolder.Folder_Name + " )"); continue; } // Step through all the folder builer modules and if it hasn't been built yet, do so now foreach (Builder_Module_Setting folderSetting in thisFolder.Builder_Module_Set.Builder_Modules) { string key = folderSetting.Key; iFolderModule thisModule = null; //// For testing purposes //if ((folderSetting.Assembly == "WolfsonianBuilderModule.dll") || (folderSetting.Assembly == "WolfsonianBuilderModule")) //{ // folderSetting.Assembly = null; // thisModule = new WolfsonianBuilderModule.WolfsonianObjectProcessorModule(); //} // Does this already exist? if (!AssemblyClassToModule.ContainsKey(key)) { // Look for the standard options if (String.IsNullOrEmpty(folderSetting.Assembly)) { switch (folderSetting.Class) { case "SobekCM.Builder_Library.Modules.Folders.MoveAgedPackagesToProcessModule": thisModule = new MoveAgedPackagesToProcessModule(); break; case "SobekCM.Builder_Library.Modules.Folders.ApplyBibIdRestrictionModule": thisModule = new ApplyBibIdRestrictionModule(); break; case "SobekCM.Builder_Library.Modules.Folders.ValidateAndClassifyModule": thisModule = new ValidateAndClassifyModule(); break; case "SobekCM.Builder_Library.Modules.Folders.UpdateNonBibFolders": thisModule = new UpdateNonBibFolders(); break; } if (thisModule != null) { if ((!String.IsNullOrEmpty(folderSetting.Argument1)) || (!String.IsNullOrEmpty(folderSetting.Argument2)) || (!String.IsNullOrEmpty(folderSetting.Argument3))) { if (thisModule.Arguments == null) { thisModule.Arguments = new List <string>(); } thisModule.Arguments.Add(String.IsNullOrEmpty(folderSetting.Argument1) ? String.Empty : folderSetting.Argument1); thisModule.Arguments.Add(String.IsNullOrEmpty(folderSetting.Argument2) ? String.Empty : folderSetting.Argument2); thisModule.Arguments.Add(String.IsNullOrEmpty(folderSetting.Argument3) ? String.Empty : folderSetting.Argument3); } allFolderModules.Add(thisModule); AssemblyClassToModule[folderSetting.Key] = thisModule; continue; } } object folderAsObj = Get_Module(folderSetting, InstanceName, out errorMessage); if ((folderAsObj == null) && (errorMessage.Length > 0)) { errors.Add(errorMessage); } else { iFolderModule folderAsFolder = folderAsObj as iFolderModule; if (folderAsFolder == null) { errors.Add(folderSetting.Class + " loaded from assembly but does not implement the IFolderModule interface!"); } else { if ((!String.IsNullOrEmpty(folderSetting.Argument1)) || (!String.IsNullOrEmpty(folderSetting.Argument2)) || (!String.IsNullOrEmpty(folderSetting.Argument3))) { if (folderAsFolder.Arguments == null) { folderAsFolder.Arguments = new List <string>(); } folderAsFolder.Arguments.Add(String.IsNullOrEmpty(folderSetting.Argument1) ? String.Empty : folderSetting.Argument1); folderAsFolder.Arguments.Add(String.IsNullOrEmpty(folderSetting.Argument2) ? String.Empty : folderSetting.Argument2); folderAsFolder.Arguments.Add(String.IsNullOrEmpty(folderSetting.Argument3) ? String.Empty : folderSetting.Argument3); } allFolderModules.Add(folderAsFolder); AssemblyClassToModule[folderSetting.Key] = folderAsFolder; } } } } } return(errors); }