/// <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); }