/// <summary> Gets the collection of all (public) items in the library </summary> /// <param name="SinceDate"> Date from which to pull the data </param> /// <param name="IncludePrivateItems"> Flag indicates whether to include private items in the result set </param> /// <param name="ResultsPerPage"> Number of results to return per "page" of results </param> /// <param name="ResultsPage"> Which page of results to return ( one-based, so the first page is page number of one )</param> /// <param name="Sort"> Current sort to use ( 0 = default by search or browse, 1 = title, 10 = date asc, 11 = date desc )</param> /// <param name="IncludeFacets"> Flag indicates if facets should be included in the final result set</param> /// <param name="FacetTypes"> Primary key for the metadata types to include as facets (up to eight)</param> /// <param name="ReturnSearchStatistics"> Flag indicates whether to create and return statistics about the overall search results, generally set to TRUE for the first page requested and subsequently set to FALSE </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering</param> /// <returns> Table with all of the item and item group information </returns> /// <remarks> This calls the 'SobekCM_Get_All_Browse_Paged2' stored procedure </remarks> public static Multiple_Paged_Results_Args Get_All_Browse_Paged(string SinceDate, bool IncludePrivateItems, int ResultsPerPage, int ResultsPage, int Sort, bool IncludeFacets, List<short> FacetTypes, bool ReturnSearchStatistics, Custom_Tracer Tracer) { if (Tracer != null) { Tracer.Add_Trace("Engine_Database.Get_All_Browse_Paged", "Pulling browse from database"); } // Create the parameter list List<EalDbParameter> parameters = new List<EalDbParameter> { SinceDate.Length > 0 ? new EalDbParameter("@date", SinceDate) : new EalDbParameter("@date", DBNull.Value), new EalDbParameter("@include_private", IncludePrivateItems), new EalDbParameter("@pagesize", ResultsPerPage), new EalDbParameter("@pagenumber", ResultsPage), new EalDbParameter("@sort", Sort), new EalDbParameter("@minpagelookahead", MIN_PAGE_LOOKAHEAD), new EalDbParameter("@maxpagelookahead", MAX_PAGE_LOOKAHEAD), new EalDbParameter("@lookahead_factor", LOOKAHEAD_FACTOR), new EalDbParameter("@include_facets", IncludeFacets) }; if ((IncludeFacets) && (FacetTypes != null)) { parameters.Add(FacetTypes.Count > 0 ? new EalDbParameter("@facettype1", FacetTypes[0]) : new EalDbParameter("@facettype1", -1)); parameters.Add(FacetTypes.Count > 1 ? new EalDbParameter("@facettype2", FacetTypes[1]) : new EalDbParameter("@facettype2", -1)); parameters.Add(FacetTypes.Count > 2 ? new EalDbParameter("@facettype3", FacetTypes[2]) : new EalDbParameter("@facettype3", -1)); parameters.Add(FacetTypes.Count > 3 ? new EalDbParameter("@facettype4", FacetTypes[3]) : new EalDbParameter("@facettype4", -1)); parameters.Add(FacetTypes.Count > 4 ? new EalDbParameter("@facettype5", FacetTypes[4]) : new EalDbParameter("@facettype5", -1)); parameters.Add(FacetTypes.Count > 5 ? new EalDbParameter("@facettype6", FacetTypes[5]) : new EalDbParameter("@facettype6", -1)); parameters.Add(FacetTypes.Count > 6 ? new EalDbParameter("@facettype7", FacetTypes[6]) : new EalDbParameter("@facettype7", -1)); parameters.Add(FacetTypes.Count > 7 ? new EalDbParameter("@facettype8", FacetTypes[7]) : new EalDbParameter("@facettype8", -1)); } else { parameters.Add(new EalDbParameter("@facettype1", -1)); parameters.Add(new EalDbParameter("@facettype2", -1)); parameters.Add(new EalDbParameter("@facettype3", -1)); parameters.Add(new EalDbParameter("@facettype4", -1)); parameters.Add(new EalDbParameter("@facettype5", -1)); parameters.Add(new EalDbParameter("@facettype6", -1)); parameters.Add(new EalDbParameter("@facettype7", -1)); parameters.Add(new EalDbParameter("@facettype8", -1)); } parameters.Add(new EalDbParameter("@item_count_to_use_cached", 1000)); // Add parameters for total items and total titles EalDbParameter totalItemsParameter = new EalDbParameter("@total_items", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(totalItemsParameter); EalDbParameter totalTitlesParameter = new EalDbParameter("@total_titles", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(totalTitlesParameter); Multiple_Paged_Results_Args returnArgs; try { // Create the database agnostic reader EalDbReaderWrapper readerWrapper = EalDbAccess.ExecuteDataReader(DatabaseType, Connection_String + ";Connection Timeout=45", CommandType.StoredProcedure, "SobekCM_Get_All_Browse_Paged2", parameters); // Pull out the database reader DbDataReader reader = readerWrapper.Reader; // Create the return argument object List<string> metadataLabels = new List<string>(); returnArgs = new Multiple_Paged_Results_Args { Paged_Results = DataReader_To_Result_List_With_LookAhead2(reader, ResultsPerPage, metadataLabels) }; // Create the overall search statistics? if (ReturnSearchStatistics) { Search_Results_Statistics stats = new Search_Results_Statistics(reader, FacetTypes, metadataLabels); returnArgs.Statistics = stats; readerWrapper.Close(); stats.Total_Items = Convert.ToInt32(totalItemsParameter.Value); stats.Total_Titles = Convert.ToInt32(totalTitlesParameter.Value); } else { // Close the reader (which also closes the connection) readerWrapper.Close(); } } catch (Exception ee) { Last_Exception = ee; if (Tracer != null) { Tracer.Add_Trace("Engine_Database.Get_All_Browse_Paged", "Exception caught during database work", Custom_Trace_Type_Enum.Error); Tracer.Add_Trace("Engine_Database.Get_All_Browse_Paged", ee.Message, Custom_Trace_Type_Enum.Error); Tracer.Add_Trace("Engine_Database.Get_All_Browse_Paged", ee.StackTrace, Custom_Trace_Type_Enum.Error); } throw; } // Return the built result arguments return returnArgs; }
/// <summary> Returns the list of all items/titles which match a given OCLC number </summary> /// <param name="OclcNumber"> OCLC number to look for matching items </param> /// <param name="IncludePrivateItems"> Flag indicates whether to include private items in the result set </param> /// <param name="ResultsPerPage"> Number of results to return per "page" of results </param> /// <param name="Sort"> Current sort to use ( 0 = default by search or browse, 1 = title, 10 = date asc, 11 = date desc )</param> /// <param name="ReturnSearchStatistics"> Flag indicates whether to create and return statistics about the overall search results, generally set to TRUE for the first page requested and subsequently set to FALSE </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering</param> /// <returns> Table with all of the item and item group information which matches the OCLC number </returns> /// <remarks> This calls the 'SobekCM_Items_By_OCLC' stored procedure </remarks> public static Multiple_Paged_Results_Args Items_By_OCLC_Number(long OclcNumber, bool IncludePrivateItems, int ResultsPerPage, int Sort, bool ReturnSearchStatistics, Custom_Tracer Tracer) { if (Tracer != null) { Tracer.Add_Trace("Engine_Database.Items_By_OCLC_Number", "Searching by OCLC in the database"); } // Build the parameter list EalDbParameter[] paramList = new EalDbParameter[5]; paramList[0] = new EalDbParameter("@oclc_number", OclcNumber); paramList[1] = new EalDbParameter("@include_private", IncludePrivateItems); paramList[2] = new EalDbParameter("@sort", Sort); paramList[3] = new EalDbParameter("@total_items", 0) {Direction = ParameterDirection.InputOutput}; paramList[4] = new EalDbParameter("@total_titles", 0) {Direction = ParameterDirection.InputOutput}; // Create the database agnostic reader EalDbReaderWrapper readerWrapper = EalDbAccess.ExecuteDataReader(DatabaseType, Connection_String, CommandType.StoredProcedure, "SobekCM_Items_By_OCLC", paramList); // Pull out the database reader DbDataReader reader = readerWrapper.Reader; // Create the return argument object List<string> metadataFields = new List<string>(); Multiple_Paged_Results_Args returnArgs = new Multiple_Paged_Results_Args { Paged_Results = DataReader_To_Result_List_With_LookAhead2(reader, ResultsPerPage, metadataFields) }; // Create the overall search statistics? if (ReturnSearchStatistics) { Search_Results_Statistics stats = new Search_Results_Statistics(reader, null, metadataFields); returnArgs.Statistics = stats; readerWrapper.Close(); stats.Total_Items = Convert.ToInt32(paramList[3].Value); stats.Total_Titles = Convert.ToInt32(paramList[4].Value); } else { // Close the reader (which also closes the connection) readerWrapper.Close(); } // Return the built results return returnArgs; }
/// <summary> Performs a basic metadata search over the entire citation, given a search condition, and returns one page of results </summary> /// <param name="SearchCondition"> Search condition string to be run against the databasse </param> /// <param name="IncludePrivateItems"> Flag indicates whether to include private items in the result set </param> /// <param name="AggregationCode"> Code for the aggregation of interest ( or empty string to search all aggregationPermissions )</param> /// <param name="DateRangeStart"> If this search includes a date range search, start of the date range, or -1</param> /// <param name="DateRangeEnd"> If this search includes a date range search, end of the date range, or -1</param> /// <param name="ResultsPerPage"> Number of results to return per "page" of results </param> /// <param name="ResultsPage"> Which page of results to return ( one-based, so the first page is page number of one )</param> /// <param name="Sort"> Current sort to use ( 0 = default by search or browse, 1 = title, 10 = date asc, 11 = date desc )</param> /// <param name="IncludeFacets"> Flag indicates whether to include facets in the result set </param> /// <param name="FacetTypes"> Primary key for the metadata types to include as facets (up to eight)</param> /// <param name="ReturnSearchStatistics"> Flag indicates whether to create and return statistics about the overall search results, generally set to TRUE for the first page requested and subsequently set to FALSE </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering</param> /// <returns> Small arguments object which contains the page of results and optionally statistics about results for the entire search, including complete counts and facet information </returns> /// <remarks> This calls the 'SobekCM_Metadata_Basic_Search_Paged' stored procedure </remarks> public static Multiple_Paged_Results_Args Perform_Metadata_Search_Paged(string SearchCondition, bool IncludePrivateItems, string AggregationCode, long DateRangeStart, long DateRangeEnd, int ResultsPerPage, int ResultsPage, int Sort, bool IncludeFacets, List<short> FacetTypes, bool ReturnSearchStatistics, Custom_Tracer Tracer) { if (Tracer != null) { Tracer.Add_Trace("Engine_Database.Perform_Basic_Search_Paged", "Performing basic search in database ( stored procedure SobekCM_Metadata_Basic_Search_Paged2 )"); } if (AggregationCode.ToUpper() == "ALL") AggregationCode = String.Empty; // Build the list of parameters List<EalDbParameter> parameters = new List<EalDbParameter> { new EalDbParameter("@searchcondition", SearchCondition.Replace("''", "'")), new EalDbParameter("@include_private", IncludePrivateItems), new EalDbParameter("@aggregationcode", AggregationCode), new EalDbParameter("@daterange_start", DateRangeStart), new EalDbParameter("@daterange_end", DateRangeEnd), new EalDbParameter("@pagesize", ResultsPerPage), new EalDbParameter("@pagenumber", ResultsPage), new EalDbParameter("@sort", Sort) }; // If this is for more than 100 results, don't look ahead if (ResultsPerPage > 100) { parameters.Add(new EalDbParameter("@minpagelookahead", 1)); parameters.Add(new EalDbParameter("@maxpagelookahead", 1)); parameters.Add(new EalDbParameter("@lookahead_factor", LOOKAHEAD_FACTOR)); } else { parameters.Add(new EalDbParameter("@minpagelookahead", MIN_PAGE_LOOKAHEAD)); parameters.Add(new EalDbParameter("@maxpagelookahead", MAX_PAGE_LOOKAHEAD)); parameters.Add(new EalDbParameter("@lookahead_factor", LOOKAHEAD_FACTOR)); } if ((IncludeFacets) && (FacetTypes != null) && (FacetTypes.Count > 0) && (ReturnSearchStatistics)) { parameters.Add(new EalDbParameter("@include_facets", true)); parameters.Add(FacetTypes.Count > 0 ? new EalDbParameter("@facettype1", FacetTypes[0]) : new EalDbParameter("@facettype1", -1)); parameters.Add(FacetTypes.Count > 1 ? new EalDbParameter("@facettype2", FacetTypes[1]) : new EalDbParameter("@facettype2", -1)); parameters.Add(FacetTypes.Count > 2 ? new EalDbParameter("@facettype3", FacetTypes[2]) : new EalDbParameter("@facettype3", -1)); parameters.Add(FacetTypes.Count > 3 ? new EalDbParameter("@facettype4", FacetTypes[3]) : new EalDbParameter("@facettype4", -1)); parameters.Add(FacetTypes.Count > 4 ? new EalDbParameter("@facettype5", FacetTypes[4]) : new EalDbParameter("@facettype5", -1)); parameters.Add(FacetTypes.Count > 5 ? new EalDbParameter("@facettype6", FacetTypes[5]) : new EalDbParameter("@facettype6", -1)); parameters.Add(FacetTypes.Count > 6 ? new EalDbParameter("@facettype7", FacetTypes[6]) : new EalDbParameter("@facettype7", -1)); parameters.Add(FacetTypes.Count > 7 ? new EalDbParameter("@facettype8", FacetTypes[7]) : new EalDbParameter("@facettype8", -1)); } else { parameters.Add(new EalDbParameter("@include_facets", false)); parameters.Add(new EalDbParameter("@facettype1", -1)); parameters.Add(new EalDbParameter("@facettype2", -1)); parameters.Add(new EalDbParameter("@facettype3", -1)); parameters.Add(new EalDbParameter("@facettype4", -1)); parameters.Add(new EalDbParameter("@facettype5", -1)); parameters.Add(new EalDbParameter("@facettype6", -1)); parameters.Add(new EalDbParameter("@facettype7", -1)); parameters.Add(new EalDbParameter("@facettype8", -1)); } // Add parameters for total items and total titles EalDbParameter totalItemsParameter = new EalDbParameter("@total_items", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(totalItemsParameter); EalDbParameter totalTitlesParameter = new EalDbParameter("@total_titles", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(totalTitlesParameter); // Add parameters for items and titles if this search is expanded to include all aggregationPermissions EalDbParameter expandedItemsParameter = new EalDbParameter("@all_collections_items", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(expandedItemsParameter); EalDbParameter expandedTitlesParameter = new EalDbParameter("@all_collections_titles", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(expandedTitlesParameter); // Create the database agnostic reader EalDbReaderWrapper readerWrapper = EalDbAccess.ExecuteDataReader(DatabaseType, Connection_String + "Connection Timeout=45", CommandType.StoredProcedure, "SobekCM_Metadata_Basic_Search_Paged2", parameters); // Pull out the database reader DbDataReader reader = readerWrapper.Reader; // Create the return argument object List<string> metadataLabels = new List<string>(); Multiple_Paged_Results_Args returnArgs = new Multiple_Paged_Results_Args { Paged_Results = DataReader_To_Result_List_With_LookAhead2(reader, ResultsPerPage, metadataLabels) }; // Create the overall search statistics? if (ReturnSearchStatistics) { Search_Results_Statistics stats = new Search_Results_Statistics(reader, FacetTypes, metadataLabels); returnArgs.Statistics = stats; readerWrapper.Close(); stats.Total_Items = Convert.ToInt32(totalItemsParameter.Value); stats.Total_Titles = Convert.ToInt32(totalTitlesParameter.Value); int allItems = Convert.ToInt32(expandedItemsParameter.Value); int allTitles = Convert.ToInt32(expandedTitlesParameter.Value); if (allItems > 0) stats.All_Collections_Items = allItems; if (allTitles > 0) stats.All_Collections_Titles = allTitles; foreach (Search_Facet_Collection thisFacet in stats.Facet_Collections) { Metadata_Search_Field field = Engine_ApplicationCache_Gateway.Settings.Metadata_Search_Field_By_ID(thisFacet.MetadataTypeID); thisFacet.MetadataTerm = field.Facet_Term; } } else { // Close the reader (which also closes the connection) readerWrapper.Close(); } // Return the built result arguments return returnArgs; }
/// <summary> Performs geographic search for items within provided rectangular bounding box and linked to item aggregation of interest </summary> /// <param name="AggregationCode"> Code for the item aggregation of interest </param> /// <param name="Latitude1"> Latitudinal portion of the first point making up the rectangular bounding box</param> /// <param name="Longitude1"> Longitudinal portion of the first point making up the rectangular bounding box</param> /// <param name="Latitude2"> Latitudinal portion of the second point making up the rectangular bounding box</param> /// <param name="Longitude2"> Longitudinal portion of the second point making up the rectangular bounding box</param> /// <param name="IncludePrivateItems"> Flag indicates whether to include private items in the result set </param> /// <param name="ResultsPerPage"> Number of results to return per "page" of results </param> /// <param name="ResultsPage"> Which page of results to return ( one-based, so the first page is page number of one )</param> /// <param name="Sort"> Current sort to use ( 0 = default by search or browse, 1 = title, 10 = date asc, 11 = date desc )</param> /// <param name="IncludeFacets"> Flag indicates if facets should be included in the result set </param> /// <param name="FacetTypes"> Primary key for the metadata types to include as facets (up to eight)</param> /// <param name="ReturnSearchStatistics"> Flag indicates whether to create and return statistics about the overall search results, generally set to TRUE for the first page requested and subsequently set to FALSE </param> /// <param name="Tracer"> Trace object keeps a list of each method executed and important milestones in rendering</param> /// <returns> Table with all of the item and item group information within provided bounding box </returns> /// <remarks> This calls the 'SobekCM_Get_Items_By_Coordinates' stored procedure </remarks> public static Multiple_Paged_Results_Args Get_Items_By_Coordinates(string AggregationCode, double Latitude1, double Longitude1, double Latitude2, double Longitude2, bool IncludePrivateItems, int ResultsPerPage, int ResultsPage, int Sort, bool IncludeFacets, List<short> FacetTypes, bool ReturnSearchStatistics, Custom_Tracer Tracer) { if (Tracer != null) { Tracer.Add_Trace("Engine_Database.Get_Items_By_Coordinates", "Pulling data from database"); } // Build the parameters List<EalDbParameter> parameters = new List<EalDbParameter>(); parameters.Add(new EalDbParameter("@lat1", Latitude1)); parameters.Add(new EalDbParameter("@long1", Longitude1)); if ((Latitude1 == Latitude2) && (Longitude1 == Longitude2)) { parameters.Add(new EalDbParameter("@lat2", DBNull.Value)); parameters.Add(new EalDbParameter("@long2", DBNull.Value)); } else { parameters.Add(new EalDbParameter("@lat2", Latitude2)); parameters.Add(new EalDbParameter("@long2", Longitude2)); } parameters.Add(new EalDbParameter("@include_private", IncludePrivateItems)); parameters.Add(new EalDbParameter("@aggregationcode", AggregationCode)); parameters.Add(new EalDbParameter("@pagesize", ResultsPerPage)); parameters.Add(new EalDbParameter("@pagenumber", ResultsPage)); parameters.Add(new EalDbParameter("@sort", Sort)); parameters.Add(new EalDbParameter("@minpagelookahead", MIN_PAGE_LOOKAHEAD)); parameters.Add(new EalDbParameter("@maxpagelookahead", MAX_PAGE_LOOKAHEAD)); parameters.Add(new EalDbParameter("@lookahead_factor", LOOKAHEAD_FACTOR)); parameters.Add(new EalDbParameter("@include_facets", IncludeFacets)); if ((IncludeFacets) && (FacetTypes != null) && (ReturnSearchStatistics)) { parameters.Add(FacetTypes.Count > 0 ? new EalDbParameter("@facettype1", FacetTypes[0]) : new EalDbParameter("@facettype1", -1)); parameters.Add(FacetTypes.Count > 1 ? new EalDbParameter("@facettype2", FacetTypes[1]) : new EalDbParameter("@facettype2", -1)); parameters.Add(FacetTypes.Count > 2 ? new EalDbParameter("@facettype3", FacetTypes[2]) : new EalDbParameter("@facettype3", -1)); parameters.Add(FacetTypes.Count > 3 ? new EalDbParameter("@facettype4", FacetTypes[3]) : new EalDbParameter("@facettype4", -1)); parameters.Add(FacetTypes.Count > 4 ? new EalDbParameter("@facettype5", FacetTypes[4]) : new EalDbParameter("@facettype5", -1)); parameters.Add(FacetTypes.Count > 5 ? new EalDbParameter("@facettype6", FacetTypes[5]) : new EalDbParameter("@facettype6", -1)); parameters.Add(FacetTypes.Count > 6 ? new EalDbParameter("@facettype7", FacetTypes[6]) : new EalDbParameter("@facettype7", -1)); parameters.Add(FacetTypes.Count > 7 ? new EalDbParameter("@facettype8", FacetTypes[7]) : new EalDbParameter("@facettype8", -1)); } else { parameters.Add(new EalDbParameter("@facettype1", -1)); parameters.Add(new EalDbParameter("@facettype2", -1)); parameters.Add(new EalDbParameter("@facettype3", -1)); parameters.Add(new EalDbParameter("@facettype4", -1)); parameters.Add(new EalDbParameter("@facettype5", -1)); parameters.Add(new EalDbParameter("@facettype6", -1)); parameters.Add(new EalDbParameter("@facettype7", -1)); parameters.Add(new EalDbParameter("@facettype8", -1)); } // Add parameters for total items and total titles EalDbParameter totalItemsParameter = new EalDbParameter("@total_items", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(totalItemsParameter); EalDbParameter totalTitlesParameter = new EalDbParameter("@total_titles", 0) {Direction = ParameterDirection.InputOutput}; parameters.Add(totalTitlesParameter); // Create the database agnostic reader EalDbReaderWrapper readerWrapper = EalDbAccess.ExecuteDataReader(DatabaseType, Connection_String + "Connection Timeout=45", CommandType.StoredProcedure, "SobekCM_Get_Items_By_Coordinates", parameters); // Pull out the database reader DbDataReader reader = readerWrapper.Reader; List<string> metadataFields = new List<string>(); // Create the return argument object Multiple_Paged_Results_Args returnArgs = new Multiple_Paged_Results_Args {Paged_Results = DataReader_To_Result_List_With_LookAhead2(reader, ResultsPerPage, metadataFields)}; // Create the overall search statistics? if (ReturnSearchStatistics) { Search_Results_Statistics stats = new Search_Results_Statistics(reader, FacetTypes, metadataFields); returnArgs.Statistics = stats; readerWrapper.Close(); stats.Total_Items = Convert.ToInt32(totalItemsParameter.Value); stats.Total_Titles = Convert.ToInt32(totalTitlesParameter.Value); } else { // Close the reader (which also closes the connection) readerWrapper.Close(); } // Return the built result arguments return returnArgs; }