Exemple #1
0
        /// <summary> Reloads the basic behavior information from the database into the
        /// digital resource, such as collections and thumbnails  </summary>
        /// <param name="Resource"> Incoming digital resource object </param>
        /// <returns> TRUE if processing can continue, FALSE if a critical error occurred which should stop all processing </returns>
        public override bool DoWork(Incoming_Digital_Resource Resource)
        {
            // Load the METS file
            if (!Resource.Load_METS())
            {
                OnError("Error reading most recent METS file from " + Resource.BibID + ":" + Resource.VID, Resource.BibID + ":" + Resource.VID, String.Empty, Resource.BuilderLogId);
                return(false);
            }

            // Add thumbnail, aggregation informaiton, and dark/access information from the database
            if (!Resource.NewPackage)
            {
                Engine_Database.Add_Minimum_Builder_Information(Resource.Metadata);
            }
            else
            {
                // Check for any access/restriction/embargo date in the RightsMD section
                RightsMD_Info rightsInfo = Resource.Metadata.Get_Metadata_Module(GlobalVar.PALMM_RIGHTSMD_METADATA_MODULE_KEY) as RightsMD_Info;
                if ((rightsInfo != null) && (rightsInfo.hasData))
                {
                    switch (rightsInfo.Access_Code)
                    {
                    case RightsMD_Info.AccessCode_Enum.Campus:
                        // Was there an embargo date?
                        if (rightsInfo.Has_Embargo_End)
                        {
                            if (DateTime.Compare(DateTime.Now, rightsInfo.Embargo_End) < 0)
                            {
                                Resource.Metadata.Behaviors.IP_Restriction_Membership = 1;
                            }
                        }
                        else
                        {
                            Resource.Metadata.Behaviors.IP_Restriction_Membership = 1;
                        }
                        break;

                    case RightsMD_Info.AccessCode_Enum.Private:
                        // Was there an embargo date?
                        if (rightsInfo.Has_Embargo_End)
                        {
                            if (DateTime.Compare(DateTime.Now, rightsInfo.Embargo_End) < 0)
                            {
                                Resource.Metadata.Behaviors.Dark_Flag = true;
                            }
                        }
                        else
                        {
                            Resource.Metadata.Behaviors.Dark_Flag = true;
                        }
                        break;
                    }
                }
            }

            return(true);
        }
        private void Complete_Single_Recent_Load_Requiring_Additional_Work(Incoming_Digital_Resource AdditionalWorkResource)
        {
            AdditionalWorkResource.METS_Type_String = "Reprocess";
            AdditionalWorkResource.BuilderLogId     = Add_NonError_To_Log("Reprocessing '" + AdditionalWorkResource.BibID + ":" + AdditionalWorkResource.VID + "'", "Standard", AdditionalWorkResource.BibID + ":" + AdditionalWorkResource.VID, AdditionalWorkResource.METS_Type_String, -1);

            try
            {
                // Load the METS file
                if ((!AdditionalWorkResource.Load_METS()) || (AdditionalWorkResource.BibID.Length == 0))
                {
                    Add_Error_To_Log("Error reading METS file from " + AdditionalWorkResource.Folder_Name.Replace("_", ":"), AdditionalWorkResource.Folder_Name.Replace("_", ":"), "Reprocess", AdditionalWorkResource.BuilderLogId);
                    return;
                }

                AdditionalWorkResource.METS_Type_String = "Reprocess";

                // Add thumbnail and aggregation informaiton from the database
                Engine_Database.Add_Minimum_Builder_Information(AdditionalWorkResource.Metadata);

                // Do all the item processing per instance config
                foreach (iSubmissionPackageModule thisModule in builderModules.ItemProcessModules)
                {
                    if (verbose)
                    {
                        Add_NonError_To_Log("Running module " + thisModule.GetType(), true, AdditionalWorkResource.BibID + ":" + AdditionalWorkResource.VID, String.Empty, AdditionalWorkResource.BuilderLogId);
                    }
                    if (!thisModule.DoWork(AdditionalWorkResource))
                    {
                        Add_Error_To_Log("Unable to complete additional work for " + AdditionalWorkResource.BibID + ":" + AdditionalWorkResource.VID, AdditionalWorkResource.BibID + ":" + AdditionalWorkResource.VID, String.Empty, AdditionalWorkResource.BuilderLogId);

                        return;
                    }
                }

                // Save these collections to mark them for refreshing the RSS feeds, etc..
                Add_Process_Info_To_PostProcess_Lists(AdditionalWorkResource.BibID, AdditionalWorkResource.VID, AdditionalWorkResource.Metadata.Behaviors.Aggregation_Code_List);

                // Finally, clear the memory a little bit
                AdditionalWorkResource.Clear_METS();
            }
            catch (Exception ee)
            {
                Add_Error_To_Log("Unable to complete additional work for " + AdditionalWorkResource.BibID + ":" + AdditionalWorkResource.VID, AdditionalWorkResource.BibID + ":" + AdditionalWorkResource.VID, AdditionalWorkResource.METS_Type_String, AdditionalWorkResource.BuilderLogId, ee);
            }
        }
        /// <summary> Performs a delete from the database and moves all digital resource
        /// files into the recycle bin </summary>
        /// <param name="Resource"> Incoming digital resource object </param>
        /// <returns> TRUE if processing can continue, FALSE if a critical error occurred which should stop all processing </returns>
        public override bool DoWork(Incoming_Digital_Resource Resource)
        {
            // Read the METS and load the basic information before continuing
            Resource.Load_METS();
            Engine_Database.Add_Minimum_Builder_Information(Resource.Metadata);

            Resource.BuilderLogId = OnProcess("........Processing '" + Resource.Folder_Name + "'", "Standard", Resource.BibID + ":" + Resource.VID, Resource.METS_Type_String, -1);

            Engine_Database.Builder_Clear_Item_Error_Log(Resource.BibID, Resource.VID, "SobekCM Builder");

            Resource.File_Root = Resource.BibID.Substring(0, 2) + "\\" + Resource.BibID.Substring(2, 2) + "\\" + Resource.BibID.Substring(4, 2) + "\\" + Resource.BibID.Substring(6, 2) + "\\" + Resource.BibID.Substring(8);
            string existing_folder = Settings.Servers.Image_Server_Network + Resource.File_Root + "\\" + Resource.VID;

            // Remove from the primary collection area
            try
            {
                if (Directory.Exists(existing_folder))
                {
                    // Make sure the delete folder exists
                    if (!Directory.Exists(Settings.Servers.Image_Server_Network + "\\RECYCLE BIN"))
                    {
                        Directory.CreateDirectory(Settings.Servers.Image_Server_Network + "\\RECYCLE BIN");
                    }

                    // Create the final directory
                    string final_folder = Settings.Servers.Image_Server_Network + "\\RECYCLE BIN\\" + Resource.File_Root + "\\" + Resource.VID;
                    if (!Directory.Exists(final_folder))
                    {
                        Directory.CreateDirectory(final_folder);
                    }

                    // Move each file
                    string[] delete_files = Directory.GetFiles(existing_folder);
                    foreach (string thisDeleteFile in delete_files)
                    {
                        string destination_file = final_folder + "\\" + Path.GetFileName(thisDeleteFile);
                        if (File.Exists(destination_file))
                        {
                            File.Delete(destination_file);
                        }
                        File.Move(thisDeleteFile, destination_file);
                    }
                }
            }
            catch (Exception ee)
            {
                OnError("Unable to move resource ( " + Resource.BibID + ":" + Resource.VID + " ) to deletes", Resource.BibID + ":" + Resource.VID, Resource.METS_Type_String, Resource.BuilderLogId);
                OnError(ee.Message, Resource.BibID + ":" + Resource.VID, Resource.METS_Type_String, Resource.BuilderLogId);
                return(false);
            }

            // Delete the static page
            string static_page1 = Settings.Servers.Static_Pages_Location + Resource.BibID.Substring(0, 2) + "\\" + Resource.BibID.Substring(2, 2) + "\\" + Resource.BibID.Substring(4, 2) + "\\" + Resource.BibID.Substring(6, 2) + "\\" + Resource.BibID.Substring(8) + "\\" + Resource.VID + "\\" + Resource.BibID + "_" + Resource.VID + ".html";

            if (File.Exists(static_page1))
            {
                File.Delete(static_page1);
            }
            string static_page2 = Settings.Servers.Static_Pages_Location + Resource.BibID.Substring(0, 2) + "\\" + Resource.BibID.Substring(2, 2) + "\\" + Resource.BibID.Substring(4, 2) + "\\" + Resource.BibID.Substring(6, 2) + "\\" + Resource.BibID.Substring(8) + "\\" + Resource.BibID + "_" + Resource.VID + ".html";

            if (File.Exists(static_page2))
            {
                File.Delete(static_page2);
            }

            // Delete the file from the database
            Engine_Database.Delete_SobekCM_Item(Resource.BibID, Resource.VID, true, "Deleted upon request by builder");

            // Delete from the solr/lucene indexes
            if (Settings.Servers.Document_Solr_Index_URL.Length > 0)
            {
                try
                {
                    Solr_Controller.Delete_Resource_From_Index(Settings.Servers.Document_Solr_Index_URL, Settings.Servers.Page_Solr_Index_URL, Resource.BibID, Resource.VID);
                }
                catch (Exception ee)
                {
                    OnError("Error deleting item from the Solr/Lucene index.  The index may not reflect this delete.", Resource.BibID + ":" + Resource.VID, Resource.METS_Type_String, Resource.BuilderLogId);
                    OnError("Solr Error: " + ee.Message, Resource.BibID + ":" + Resource.VID, Resource.METS_Type_String, Resource.BuilderLogId);
                    return(false);
                }
            }

            // Delete the handled METS file and package
            Resource.Delete();
            return(true);
        }