metaproxy  1.21.0
Classes | Namespaces | Functions | Variables
filter_record_transform.cpp File Reference
#include "config.hpp"
#include "filter_record_transform.hpp"
#include <metaproxy/package.hpp>
#include <metaproxy/util.hpp>
#include "gduutil.hpp"
#include <yaz/diagbib1.h>
#include <yaz/zgdu.h>
#include <yaz/retrieval.h>
#include <yaz/oid_db.h>
#include <boost/thread/mutex.hpp>
#include <iostream>
Include dependency graph for filter_record_transform.cpp:

Go to the source code of this file.

Classes

class  metaproxy_1::filter::RecordTransform::Impl
 

Namespaces

 metaproxy_1
 
 metaproxy_1::filter
 

Functions

static void convert_npr (yaz_record_conv_t rc, Odr_oid *match_syntax, ODR odr_en, Z_NamePlusRecordList *records, int i)
 
static mp::filter::Base * filter_creator ()
 

Variables

struct metaproxy_1_filter_struct metaproxy_1_filter_record_transform
 

Function Documentation

◆ convert_npr()

static void convert_npr ( yaz_record_conv_t  rc,
Odr_oid *  match_syntax,
ODR  odr_en,
Z_NamePlusRecordList *  records,
int  i 
)
static

Definition at line 244 of file filter_record_transform.cpp.

248 {
249  Z_NamePlusRecord *npr = records->records[i];
250  const char *details = 0;
251  mp::wrbuf output_record;
252  Z_External *r = npr->u.databaseRecord;
253  int ret_trans = -1;
254  if (npr->which != Z_NamePlusRecord_databaseRecord)
255  return;
256  r = npr->u.databaseRecord;
257  if (r->which == Z_External_OPAC)
258  {
259  ret_trans = yaz_record_conv_opac_record(rc, r->u.opac,
260  output_record);
261  details = yaz_record_conv_get_error(rc);
262  }
263  else if (r->which == Z_External_octet)
264  {
265  ret_trans =
266  yaz_record_conv_record(
267  rc, (const char *) r->u.octet_aligned->buf,
268  r->u.octet_aligned->len, output_record);
269  details = yaz_record_conv_get_error(rc);
270  }
271  else
272  {
273  details = "unsupported record type for record_conv";
274  }
275  if (ret_trans)
276  {
277  records->records[i] =
278  zget_surrogateDiagRec(
279  odr_en, npr->databaseName,
280  YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS,
281  details);
282  }
283  else
284  {
285  if (!oid_oidcmp(match_syntax, yaz_oid_recsyn_opac))
286  {
287  yaz_iconv_t cd = 0;
288  yaz_marc_t mt = yaz_marc_create();
289  Z_OPACRecord *opac = 0;
290  const char *output_charset =
291  yaz_record_get_output_charset(rc);
292  if (output_charset)
293  cd = yaz_iconv_open(output_charset, "utf-8");
294  if (yaz_xml_to_opac(mt, output_record.buf(),
295  output_record.len(),
296  &opac, cd,
297  ((ODR )odr_en)->mem, 0)
298  && opac)
299  {
300  npr->u.databaseRecord =
301  z_ext_record_oid(odr_en, match_syntax,
302  (const char *) opac, -1);
303  }
304  else
305  {
306  records->records[i] =
307  zget_surrogateDiagRec(
308  odr_en, npr->databaseName,
309  YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS,
310  "XML to OPAC conversion failed");
311  }
312  yaz_marc_destroy(mt);
313  }
314  else
315  {
316  npr->u.databaseRecord = z_ext_record_oid(odr_en, match_syntax,
317  output_record.buf(),
318  output_record.len());
319  }
320  }
321 }

Referenced by metaproxy_1::filter::RecordTransform::Impl::process().

◆ filter_creator()

static mp::filter::Base* filter_creator ( )
static

Definition at line 546 of file filter_record_transform.cpp.

547 {
548  return new mp::filter::RecordTransform;
549 }

Variable Documentation

◆ metaproxy_1_filter_record_transform

struct metaproxy_1_filter_struct metaproxy_1_filter_record_transform
Initial value:
= {
0,
"record_transform",
}
static mp::filter::Base * filter_creator()

Definition at line 546 of file filter_record_transform.cpp.

Referenced by metaproxy_1::FactoryStatic::FactoryStatic().