/// <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);
                    }
                }
            }
        }
コード例 #2
0
        /// <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);
        }