/// <summary> /// Retrieves all the family members of the document. /// </summary> /// <param name="number">The publication number.</param> /// <param name="cancellationToken">The cancellation notification.</param> /// <returns>The family members of the document.</returns> public async Task <PatentFamilyMember[]> RetrieveFamily(PatentNumber number, CancellationToken cancellationToken) { var content = number.Format('.'); var result = await _requestManager.Execute("family/publication/docdb", OPSConstants.Format.Exchange, OPSConverter.ToWPD, content, cancellationToken); if (!result.Success || result.Content.PatentFamily == null) { throw new InvalidOperationException($"cannot retrieve family members for {number}: ${result.Error.Code}"); } var patentFamilyMemberAssembler = new PatentFamilyMemberAssembler(); return(patentFamilyMemberAssembler.Convert(result.Content.PatentFamily.FamilyMembers)); }
/// <summary> /// Write the error to a text file. /// </summary> /// <param name="number">The publication number.</param> /// <param name="exception">The exception.</param> private void WriteError(PatentNumber number, Exception exception) { try { var content = new StringBuilder(); var filename = Path.Combine(_temporaryDirectory, $"{number.Format()}.txt"); content.AppendFormat("[{0}] {1}{2}", DateTime.Now, exception.Message, Environment.NewLine); content.Append(exception.StackTrace).Append(Environment.NewLine).Append(Environment.NewLine); File.AppendAllText(filename, content.ToString()); } catch { // ignored } }
/// <summary> /// Retrieves the patent document corresponding to the publication number. /// </summary> /// <param name="number">The publication number.</param> /// <param name="cancellationToken">The cancellation notification.</param> /// <returns>The patent document corresponding to the publication number.</returns> public async Task <Patent> RetrievePatent(PatentNumber number, CancellationToken cancellationToken = default) { if (number == null) { throw new ArgumentNullException(nameof(number)); } var patentAssembler = new PatentAssembler(); var content = number.Format('.'); var result = await _requestManager.Execute("published-data/publication/docdb/biblio", OPSConstants.Format.Exchange, OPSConverter.ToWPD, content, cancellationToken); if (!result.Success && result.Content.ExchangeDocuments.Length != 0) { throw new InvalidOperationException($"cannot retrieve root document for {number}: ${result.Error.Code}"); } return(patentAssembler.Convert(result.Content.ExchangeDocuments[0])); }
/// <summary> /// Formats the input value. /// </summary> /// <param name="input">The input value.</param> /// <returns>The output string.</returns> private string Format(PatentNumber input) { return(input != null?input.Format(' ') : _empty); }
/// <summary> /// Gets the temporary target path. /// </summary> /// <param name="number">The publication number.</param> /// <returns>The temporary target path.</returns> private string GetTemporaryTarget(PatentNumber number) { var filename = string.Concat(number.Format(), _pictureFormat).ToLower(); return(Path.Combine(ToolsContext.Current.TemporaryDirectory, filename)); }