Skip to content

Commit d0e7c46

Browse files
stakhovvgouriano
authored andcommitted
CEutilsUpdater: Simplify CSearch_Request; JIRA:RW-2355
git-svn-id: https://anonsvn.ncbi.nlm.nih.gov/repos/v1/trunk/c++@103252 78c7ea69-d796-4a43-9a09-de51944f1b03
1 parent 93cecfc commit d0e7c46

File tree

1 file changed

+29
-13
lines changed

1 file changed

+29
-13
lines changed

src/objtools/edit/eutils_updater.cpp

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
#include <objtools/eutils/efetch/PubmedBookArticle.hpp>
4040
#include <objtools/eutils/efetch/PubmedBookArticleSet.hpp>
4141

42-
#include <objtools/eutils/api/esearch.hpp>
42+
#include <objtools/eutils/esearch/ESearchResult.hpp>
4343
#include <objtools/eutils/esearch/IdList.hpp>
4444
#include <objects/pubmed/Pubmed_entry.hpp>
4545
#include <objects/medline/Medline_entry.hpp>
@@ -210,10 +210,10 @@ void SCitMatch::FillFromArticle(const CCit_art& A)
210210
namespace
211211
{
212212

213-
struct CSearch_Request : CESearch_Request
213+
struct CSearch_Request : CEUtils_Request
214214
{
215215
CSearch_Request(CRef<CEUtils_ConnContext>& ctx) :
216-
CESearch_Request("pubmed", ctx)
216+
CEUtils_Request(ctx, "esearch.fcgi")
217217
{
218218
}
219219

@@ -316,13 +316,34 @@ struct CSearch_Request : CESearch_Request
316316
return true;
317317
}
318318

319-
TEntrezId GetResponse(EPubmedError& err)
319+
string m_Term;
320+
321+
string GetQueryString() const override
322+
{
323+
string args = "db=pubmed&field=title&retmax=2&rettype=ulist&term=";
324+
args += NStr::URLEncode(m_Term, NStr::eUrlEnc_ProcessMarkChars);
325+
return args;
326+
}
327+
328+
ESerialDataFormat GetSerialDataFormat() const override
329+
{
330+
return eSerial_Xml;
331+
}
332+
333+
TEntrezId GetResponse(EPubmedError& err, string term)
320334
{
321335
err = EPubmedError::operational_error;
322336

323-
CRef<esearch::CESearchResult> result = this->GetESearchResult();
324-
if (result && result->IsSetData()) {
325-
auto& D = result->GetData();
337+
m_Term = term;
338+
339+
CObjectIStream* is = GetObjIStream();
340+
_ASSERT(is);
341+
esearch::CESearchResult result;
342+
*is >> result;
343+
Disconnect();
344+
345+
if (result.IsSetData()) {
346+
auto& D = result.GetData();
326347
if (D.IsInfo() && D.GetInfo().IsSetContent() && D.GetInfo().GetContent().IsSetIdList()) {
327348
const auto& idList = D.GetInfo().GetContent().GetIdList();
328349
if (idList.IsSetId()) {
@@ -374,10 +395,6 @@ TEntrezId CEUtilsUpdater::CitMatch(const CPub& pub, EPubmedError* perr)
374395
TEntrezId CEUtilsUpdater::CitMatch(const SCitMatch& cm, EPubmedError* perr)
375396
{
376397
CSearch_Request req(m_Ctx);
377-
req.SetField("title");
378-
req.SetRetMax(2);
379-
req.SetUseHistory(false);
380-
req.SetRetType(CESearch_Request::eRetType_uilist);
381398
EPubmedError err = EPubmedError::citation_not_found;
382399

383400
// clang-format off
@@ -408,8 +425,7 @@ TEntrezId CEUtilsUpdater::CitMatch(const SCitMatch& cm, EPubmedError* perr)
408425

409426
string term;
410427
if (CSearch_Request::BuildSearchTerm(cm, r, term)) {
411-
req.SetTerm(term);
412-
TEntrezId pmid = req.GetResponse(err);
428+
TEntrezId pmid = req.GetResponse(err, term);
413429
if (pmid != ZERO_ENTREZ_ID) {
414430
return pmid;
415431
}

0 commit comments

Comments
 (0)