/// <summary> Saves all of the digital resource information to solr/lucene </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) { // Save this to the Solr/Lucene database if (!String.IsNullOrEmpty(Settings.Servers.Document_Solr_Index_URL)) { if (((!Resource.Metadata.Behaviors.IP_Restriction_Membership_Is_Null) && (Resource.Metadata.Behaviors.IP_Restriction_Membership < 0)) || ((!Resource.Metadata.Behaviors.Dark_Flag_Is_Null) && (Resource.Metadata.Behaviors.Dark_Flag))) { Solr_Controller.Delete_Resource_From_Index(Settings.Servers.Document_Solr_Index_URL, Settings.Servers.Page_Solr_Index_URL, Resource.BibID, Resource.VID); return(true); } try { Solr_Controller.Update_Index(Settings.Servers.Document_Solr_Index_URL, Settings.Servers.Page_Solr_Index_URL, Resource.Metadata, true); } catch (Exception ee) { OnError("Error saving data to the Solr/Lucene index. The index may not reflect the most recent data in the METS.", 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(true); }
private void Delete_Item() { errorCode = 0; // Get the current item details string vid_location = SobekFileSystem.Resource_Network_Uri(itemToDelete); DirectoryInfo directoryInfo = (new DirectoryInfo(vid_location)).Parent; if (directoryInfo != null) { string bib_location = directoryInfo.FullName; //if (errorCode == -1) //{ // // Get item details // DataSet itemDetails = SobekCM_Database.Get_Item_Details(currentMode.BibID, currentMode.VID, Tracer); // // If the itemdetails was null, this item is somehow invalid item then // if (itemDetails == null) // { // Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", "Item indicated is not valid", Custom_Trace_Type_Enum.Error); // errorCode = 2; // } // else // { // // Get the location for this METS file from the returned value // DataRow mainItemRow = itemDetails.Tables[2].Rows[0]; // bib_location = UI_ApplicationCache_Gateway.Settings.Servers.Image_Server_Network + mainItemRow["File_Location"].ToString().Replace("/", "\\"); // vid_location = bib_location + "\\" + currentMode.VID; // } //} // Perform the database delete RequestSpecificValues.Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", "Perform database update"); bool database_result2 = Engine_Database.Delete_SobekCM_Item(RequestSpecificValues.Current_Mode.BibID, RequestSpecificValues.Current_Mode.VID, RequestSpecificValues.Current_User.Is_System_Admin, String.Empty); // Perform the SOLR delete RequestSpecificValues.Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", "Perform solr delete"); Solr_Controller.Delete_Resource_From_Index(UI_ApplicationCache_Gateway.Settings.Servers.Document_Solr_Index_URL, UI_ApplicationCache_Gateway.Settings.Servers.Page_Solr_Index_URL, RequestSpecificValues.Current_Mode.BibID, RequestSpecificValues.Current_Mode.VID); if (!database_result2) { RequestSpecificValues.Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", "Error performing delete in the database", Custom_Trace_Type_Enum.Error); errorCode = 3; } else { // Move the folder to deletes try { RequestSpecificValues.Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", "Move resource files to RECYCLE BIN folder"); // Make sure upper RECYCLE BIN folder exists, or create it string delete_folder = UI_ApplicationCache_Gateway.Settings.Servers.Image_Server_Network + "RECYCLE BIN"; if (!Directory.Exists(delete_folder)) { Directory.CreateDirectory(delete_folder); } // Create the bib level folder next string bib_folder = UI_ApplicationCache_Gateway.Settings.Servers.Image_Server_Network + "RECYCLE BIN\\" + RequestSpecificValues.Current_Mode.BibID; if (!Directory.Exists(bib_folder)) { Directory.CreateDirectory(bib_folder); } // Ensure the VID folder does not exist string vid_folder = UI_ApplicationCache_Gateway.Settings.Servers.Image_Server_Network + "RECYCLE BIN\\" + RequestSpecificValues.Current_Mode.BibID + "\\" + RequestSpecificValues.Current_Mode.VID; if (Directory.Exists(vid_folder)) { Directory.Move(vid_folder, vid_folder + "_OLD"); } // Move the VID folder over now Directory.Move(vid_location, vid_folder); // Check if this was the last VID under this BIB if (Directory.GetDirectories(bib_location).Length == 0) { // Move all files over to the bib folder then string[] bib_files = Directory.GetFiles(bib_location); foreach (string thisFile in bib_files) { string fileName = (new FileInfo(thisFile)).Name; string new_file = bib_folder + "\\" + fileName; File.Move(thisFile, new_file); } } } catch (Exception ee) { RequestSpecificValues.Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", "Error moving the folder and files to the RECYCLE BIN folder", Custom_Trace_Type_Enum.Error); RequestSpecificValues.Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", ee.Message, Custom_Trace_Type_Enum.Error); RequestSpecificValues.Tracer.Add_Trace("Delete_Item_MySobekViewer.Constructor", ee.StackTrace, Custom_Trace_Type_Enum.Error); errorCode = 4; } // Also remove from the cache CachedDataManager.Items.Remove_Digital_Resource_Object(RequestSpecificValues.Current_Mode.BibID, RequestSpecificValues.Current_Mode.VID, RequestSpecificValues.Tracer); } } }
/// <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); }