metaproxy  1.21.0
Public Member Functions | Private Attributes | Friends | List of all members
metaproxy_1::filter::Zoom::Backend Class Reference
Inheritance diagram for metaproxy_1::filter::Zoom::Backend:
Inheritance graph
Collaboration diagram for metaproxy_1::filter::Zoom::Backend:
Collaboration graph

Public Member Functions

 Backend ()
 
 ~Backend ()
 
void connect (std::string zurl, int *error, char **addinfo, ODR odr)
 
void search (ZOOM_query q, Odr_int *hits, int *error, char **addinfo, Z_FacetList **fl, ODR odr)
 
void present (Odr_int start, Odr_int number, ZOOM_record *recs, int *error, char **addinfo, ODR odr)
 
void set_option (const char *name, const char *value)
 
void set_option (const char *name, const char *value, size_t l)
 
void set_option (const char *name, std::string value)
 
const char * get_option (const char *name)
 
void get_zoom_error (int *error, char **addinfo, ODR odr)
 

Private Attributes

mp::wrbuf m_apdu_wrbuf
 
ZOOM_connection m_connection
 
ZOOM_resultset m_resultset
 
std::string m_frontend_database
 
SearchablePtr sptr
 
xsltStylesheetPtr xsp
 
std::string cproxy_host
 
bool enable_cproxy
 
bool enable_explain
 
xmlDoc * explain_doc
 
std::string m_proxy
 
cql_transform_t cqlt
 
std::string retry_on_failure
 

Friends

class Impl
 
class Frontend
 

Detailed Description

Definition at line 95 of file filter_zoom.cpp.

Constructor & Destructor Documentation

◆ Backend()

mp::filter::Zoom::Backend::Backend ( )

Definition at line 299 of file filter_zoom.cpp.

300 {
301  m_connection = ZOOM_connection_create(0);
302  ZOOM_connection_save_apdu_wrbuf(m_connection, m_apdu_wrbuf);
303  m_resultset = 0;
304  xsp = 0;
305  enable_cproxy = true;
306  enable_explain = false;
307  explain_doc = 0;
308  cqlt = 0;
309 }

◆ ~Backend()

mp::filter::Zoom::Backend::~Backend ( )

Definition at line 311 of file filter_zoom.cpp.

312 {
313  if (xsp)
314  xsltFreeStylesheet(xsp);
315  if (explain_doc)
316  xmlFreeDoc(explain_doc);
317  cql_transform_close(cqlt);
318  ZOOM_connection_destroy(m_connection);
319  ZOOM_resultset_destroy(m_resultset);
320 }

Member Function Documentation

◆ connect()

void mp::filter::Zoom::Backend::connect ( std::string  zurl,
int *  error,
char **  addinfo,
ODR  odr 
)

Definition at line 371 of file filter_zoom.cpp.

374 {
375  size_t h = zurl.find_first_of('#');
376  if (h != std::string::npos)
377  zurl.erase(h);
378  ZOOM_connection_connect(m_connection, zurl.length() ? zurl.c_str() : 0, 0);
379  get_zoom_error(error, addinfo, odr);
380 
381 }
void get_zoom_error(int *error, char **addinfo, ODR odr)

◆ get_option()

const char * mp::filter::Zoom::Backend::get_option ( const char *  name)

Definition at line 490 of file filter_zoom.cpp.

491 {
492  return ZOOM_connection_option_get(m_connection, name);
493 }

◆ get_zoom_error()

void mp::filter::Zoom::Backend::get_zoom_error ( int *  error,
char **  addinfo,
ODR  odr 
)

Definition at line 323 of file filter_zoom.cpp.

325 {
326  const char *msg = 0;
327  const char *zoom_addinfo = 0;
328  const char *dset = 0;
329  int error0 = ZOOM_connection_error_x(m_connection, &msg,
330  &zoom_addinfo, &dset);
331  if (error0)
332  {
333  if (!dset)
334  dset = "Unknown";
335 
336  if (!strcmp(dset, "info:srw/diagnostic/1"))
337  *error = yaz_diag_srw_to_bib1(error0);
338  else if (!strcmp(dset, "Bib-1"))
339  *error = error0;
340  else if (!strcmp(dset, "ZOOM"))
341  {
342  *error = YAZ_BIB1_TEMPORARY_SYSTEM_ERROR;
343  if (error0 == ZOOM_ERROR_INIT)
344  *error = YAZ_BIB1_INIT_AC_AUTHENTICATION_SYSTEM_ERROR;
345  else if (error0 == ZOOM_ERROR_DECODE)
346  {
347  if (zoom_addinfo)
348  {
349  if (strstr(zoom_addinfo, "Authentication") ||
350  strstr(zoom_addinfo, "authentication"))
351  *error = YAZ_BIB1_INIT_AC_AUTHENTICATION_SYSTEM_ERROR;
352  }
353  }
354  }
355  else
356  *error = YAZ_BIB1_TEMPORARY_SYSTEM_ERROR;
357 
358  *addinfo = (char *) odr_malloc(
359  odr, 30 + strlen(dset) + strlen(msg) +
360  (zoom_addinfo ? strlen(zoom_addinfo) : 0));
361  **addinfo = '\0';
362  if (zoom_addinfo && *zoom_addinfo)
363  {
364  strcpy(*addinfo, zoom_addinfo);
365  strcat(*addinfo, " ");
366  }
367  sprintf(*addinfo + strlen(*addinfo), "(%s %d %s)", dset, error0, msg);
368  }
369 }

◆ present()

void mp::filter::Zoom::Backend::present ( Odr_int  start,
Odr_int  number,
ZOOM_record *  recs,
int *  error,
char **  addinfo,
ODR  odr 
)

Definition at line 464 of file filter_zoom.cpp.

467 {
468  ZOOM_resultset_records(m_resultset, recs, start, number);
469  get_zoom_error(error, addinfo, odr);
470 }

◆ search()

void mp::filter::Zoom::Backend::search ( ZOOM_query  q,
Odr_int *  hits,
int *  error,
char **  addinfo,
Z_FacetList **  fl,
ODR  odr 
)

Definition at line 383 of file filter_zoom.cpp.

386 {
387  ZOOM_resultset_destroy(m_resultset);
388  m_resultset = 0;
389  if (*flp)
390  {
391  WRBUF w = wrbuf_alloc();
392  yaz_facet_list_to_wrbuf(w, *flp);
393  set_option("facets", wrbuf_cstr(w));
394  wrbuf_destroy(w);
395  }
396  m_resultset = ZOOM_connection_search(m_connection, q);
397  get_zoom_error(error, addinfo, odr);
398  if (*error == 0)
399  *hits = ZOOM_resultset_size(m_resultset);
400  else
401  *hits = 0;
402  *flp = 0;
403  size_t num_facets = ZOOM_resultset_facets_size(m_resultset);
404  if (num_facets > 0)
405  {
406  size_t i;
407  Z_FacetList *fl = (Z_FacetList *) odr_malloc(odr, sizeof(*fl));
408  fl->elements = (Z_FacetField **)
409  odr_malloc(odr, num_facets * sizeof(*fl->elements));
410  for (i = 0; i < num_facets; i++)
411  {
412  ZOOM_facet_field ff =
413  ZOOM_resultset_get_facet_field_by_index(m_resultset, i);
414  if (!ff)
415  break;
416  Z_AttributeList *al = (Z_AttributeList *)
417  odr_malloc(odr, sizeof(*al));
418  al->num_attributes = 1;
419  al->attributes = (Z_AttributeElement **)
420  odr_malloc(odr, sizeof(*al->attributes));
421  Z_AttributeElement *ae = al->attributes[0] = (Z_AttributeElement *)
422  odr_malloc(odr, sizeof(**al->attributes));
423  ae->attributeSet = 0;
424  ae->attributeType = odr_intdup(odr, 1);
425  ae->which = Z_AttributeValue_complex;
426  ae->value.complex = (Z_ComplexAttribute *)
427  odr_malloc(odr, sizeof(*ae->value.complex));
428  ae->value.complex->num_list = 1;
429  ae->value.complex->list = (Z_StringOrNumeric **)
430  odr_malloc(odr, sizeof(**ae->value.complex->list));
431  ae->value.complex->list[0] = (Z_StringOrNumeric *)
432  odr_malloc(odr, sizeof(**ae->value.complex->list));
433  ae->value.complex->list[0]->which = Z_StringOrNumeric_string;
434  ae->value.complex->list[0]->u.string =
435  odr_strdup(odr, ZOOM_facet_field_name(ff));
436  ae->value.complex->num_semanticAction = 0;
437  ae->value.complex->semanticAction = 0;
438 
439  int num_terms = ZOOM_facet_field_term_count(ff);
440  fl->elements[i] = (Z_FacetField *)
441  odr_malloc(odr, sizeof(Z_FacetField));
442  fl->elements[i]->attributes = al;
443  fl->elements[i]->num_terms = num_terms;
444  fl->elements[i]->terms = (Z_FacetTerm **)
445  odr_malloc(odr, num_terms * sizeof(Z_FacetTerm *));
446  int j;
447  for (j = 0; j < num_terms; j++)
448  {
449  int freq;
450  const char *a_term = ZOOM_facet_field_get_term(ff, j, &freq);
451  Z_FacetTerm *ft = (Z_FacetTerm *) odr_malloc(odr, sizeof(*ft));
452  ft->term = z_Term_create(odr, Z_Term_general, a_term,
453  strlen(a_term));
454  ft->count = odr_intdup(odr, freq);
455 
456  fl->elements[i]->terms[j] = ft;
457  }
458  }
459  fl->num = i;
460  *flp = fl;
461  }
462 }
void set_option(const char *name, const char *value)

◆ set_option() [1/3]

void mp::filter::Zoom::Backend::set_option ( const char *  name,
const char *  value 
)

Definition at line 478 of file filter_zoom.cpp.

479 {
480  ZOOM_connection_option_set(m_connection, name, value);
481  if (m_resultset)
482  ZOOM_resultset_option_set(m_resultset, name, value);
483 }

◆ set_option() [2/3]

void mp::filter::Zoom::Backend::set_option ( const char *  name,
const char *  value,
size_t  l 
)

Definition at line 473 of file filter_zoom.cpp.

474 {
475  ZOOM_connection_option_setl(m_connection, name, value, l);
476 }

◆ set_option() [3/3]

void mp::filter::Zoom::Backend::set_option ( const char *  name,
std::string  value 
)

Definition at line 485 of file filter_zoom.cpp.

486 {
487  set_option(name, value.c_str());
488 }

Friends And Related Function Documentation

◆ Frontend

friend class Frontend
friend

Definition at line 97 of file filter_zoom.cpp.

◆ Impl

friend class Impl
friend

Definition at line 96 of file filter_zoom.cpp.

Member Data Documentation

◆ cproxy_host

std::string metaproxy_1::filter::Zoom::Backend::cproxy_host
private

Definition at line 104 of file filter_zoom.cpp.

◆ cqlt

cql_transform_t metaproxy_1::filter::Zoom::Backend::cqlt
private

Definition at line 109 of file filter_zoom.cpp.

◆ enable_cproxy

bool metaproxy_1::filter::Zoom::Backend::enable_cproxy
private

Definition at line 105 of file filter_zoom.cpp.

◆ enable_explain

bool metaproxy_1::filter::Zoom::Backend::enable_explain
private

Definition at line 106 of file filter_zoom.cpp.

◆ explain_doc

xmlDoc* metaproxy_1::filter::Zoom::Backend::explain_doc
private

Definition at line 107 of file filter_zoom.cpp.

◆ m_apdu_wrbuf

mp::wrbuf metaproxy_1::filter::Zoom::Backend::m_apdu_wrbuf
private

Definition at line 98 of file filter_zoom.cpp.

◆ m_connection

ZOOM_connection metaproxy_1::filter::Zoom::Backend::m_connection
private

Definition at line 99 of file filter_zoom.cpp.

◆ m_frontend_database

std::string metaproxy_1::filter::Zoom::Backend::m_frontend_database
private

Definition at line 101 of file filter_zoom.cpp.

◆ m_proxy

std::string metaproxy_1::filter::Zoom::Backend::m_proxy
private

Definition at line 108 of file filter_zoom.cpp.

◆ m_resultset

ZOOM_resultset metaproxy_1::filter::Zoom::Backend::m_resultset
private

Definition at line 100 of file filter_zoom.cpp.

◆ retry_on_failure

std::string metaproxy_1::filter::Zoom::Backend::retry_on_failure
private

Definition at line 110 of file filter_zoom.cpp.

◆ sptr

SearchablePtr metaproxy_1::filter::Zoom::Backend::sptr
private

Definition at line 102 of file filter_zoom.cpp.

◆ xsp

xsltStylesheetPtr metaproxy_1::filter::Zoom::Backend::xsp
private

Definition at line 103 of file filter_zoom.cpp.


The documentation for this class was generated from the following file: