/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2013 Index Data
+ * Copyright (C) Index Data
* See the file LICENSE for details.
*/
/** \file
#include <yaz/wrbuf.h>
#include <yaz/marcdisp.h>
#include <yaz/odr.h>
+#include <yaz/log.h>
#include "ztest.h"
+#if HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#ifdef WIN32
+#include <sys/stat.h>
+#endif
+
+#include <stdlib.h>
+#if HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
#define NO_MARC_RECORDS 24
char *marc_records[NO_MARC_RECORDS] = {
}
}
+#define PZ_CBEGIN "<pz:cluster xmlns:pz=\"http://www.indexdata.com/pazpar2/1.0\">\n"
+#define PZ_CEND "</pz:cluster>\n"
+#define PZ_BEGIN "<record xmlns=\"http://www.indexdata.com/pazpar2/1.0\">\n"
+#define PZ_END "</record>\n"
+#define PZ_METADATA(x, y) " <metadata type=\"" #x "\">" y "</metadata>\n"
+
+static char *dummy_pz2_record(int num, ODR odr)
+{
+ const char *rec[] = {
+ PZ_CBEGIN
+ PZ_BEGIN
+ PZ_METADATA(author,"Jack Collins")
+ PZ_METADATA(medium, "book")
+ PZ_METADATA(date, "1995")
+ PZ_METADATA(title, "How to program a computer vol1")
+ PZ_END
+ PZ_BEGIN
+ PZ_METADATA(author,"Jack Collins")
+ PZ_METADATA(medium, "book")
+ PZ_METADATA(date, "1995")
+ PZ_METADATA(title, "How to program a computer vol2")
+ PZ_END
+ PZ_CEND
+ ,
+ PZ_CBEGIN
+ PZ_BEGIN
+ PZ_METADATA(author,"Jack Collins")
+ PZ_METADATA(medium, "book")
+ PZ_METADATA(date, "1995")
+ PZ_METADATA(title, "How to program a computer vol3")
+ PZ_END
+ PZ_BEGIN
+ PZ_METADATA(author,"Jack Collins")
+ PZ_METADATA(medium, "book")
+ PZ_METADATA(date, "1995")
+ PZ_METADATA(title, "How to program a computer vol2")
+ PZ_END
+ PZ_CEND
+ ,
+ PZ_BEGIN
+ PZ_METADATA(author,"Jack Collins")
+ PZ_METADATA(medium, "book")
+ PZ_METADATA(date, "1995")
+ PZ_METADATA(title, "How to program a computer vol1")
+ PZ_END
+ ,
+ /* identical to first */
+ PZ_CBEGIN
+ PZ_BEGIN
+ PZ_METADATA(author,"Jack Collins")
+ PZ_METADATA(medium, "book")
+ PZ_METADATA(date, "1995")
+ PZ_METADATA(title, "How to program a computer vol1")
+ PZ_END
+ PZ_BEGIN
+ PZ_METADATA(author,"Jack Collins")
+ PZ_METADATA(medium, "book")
+ PZ_METADATA(date, "1995")
+ PZ_METADATA(title, "How to program a computer vol4")
+ PZ_END
+ PZ_CEND
+ };
+ if (num > 0 && num <= sizeof(rec)/sizeof(*rec))
+ return odr_strdup(odr, rec[num - 1]);
+ return 0;
+}
+
/* read MARC record and convert to XML */
-char *dummy_xml_record(int num, ODR odr)
+char *dummy_xml_record(int num, ODR odr, const char *esn)
{
- char *rec = dummy_marc_record(num, odr);
+ if (esn && !strcmp(esn, "pz2"))
+ {
+ return dummy_pz2_record(num, odr);
+ }
+ else if (!esn || !strcmp(esn, "marcxml") || !strcmp(esn, "OP"))
+ {
+ /* MARCXML and OPACXML */
+ char *rec = dummy_marc_record(num, odr);
+ if (rec)
+ {
+ WRBUF w = wrbuf_alloc();
+ yaz_marc_t mt = yaz_marc_create();
+ yaz_marc_xml(mt, YAZ_MARC_MARCXML);
+ if (esn && !strcmp(esn, "OP"))
+ {
+ /* generate OPACXML (OPAC in XML) */
+ Z_OPACRecord *opac = dummy_opac(num, odr, rec);
+ yaz_opac_decode_wrbuf(mt, opac, w);
+ }
+ else
+ {
+ /* generate MARCXML */
+ yaz_marc_decode_wrbuf(mt, rec, -1, w);
+ }
+ rec = odr_strdup(odr, wrbuf_cstr(w));
+ yaz_marc_destroy(mt);
+ wrbuf_destroy(w);
+ return rec;
+ }
+ }
+ else
+ {
+ char *buf = 0;
+ const char *e = getenv("YAZ_ZTEST_XML_FETCH");
+ if (e)
+ {
+ WRBUF w = wrbuf_alloc();
+ struct stat sbuf;
+ FILE *file = 0;
- if (rec)
+ wrbuf_printf(w, "%s%s.%d.xml", e, esn, num);
+ if (stat(wrbuf_cstr(w), &sbuf) == 0 &&
+ (file = fopen(wrbuf_cstr(w), "rb")))
+ {
+ buf = odr_malloc(odr, 1 + sbuf.st_size);
+ fread(buf, 1, sbuf.st_size, file);
+ buf[sbuf.st_size] = '\0';
+ }
+ if (file)
+ fclose(file);
+ }
+ return buf;
+ }
+ return 0;
+}
+
+char *dummy_json_record(int num, ODR odr, const char *esn)
+{
+ if (!esn || !strcmp(esn, "marcinjson"))
{
- const char *result;
- size_t rlen;
- int len;
- yaz_marc_t mt = yaz_marc_create();
- yaz_marc_xml(mt, YAZ_MARC_MARCXML);
- len = yaz_marc_decode_buf(mt, rec, -1, &result, &rlen);
- if (len > 1)
+ char *rec = dummy_marc_record(num, odr);
+ if (rec)
{
- rec = (char *) odr_malloc(odr, rlen+1);
- memcpy(rec, result, rlen);
- rec[rlen] = '\0';
+ WRBUF w = wrbuf_alloc();
+ yaz_marc_t mt = yaz_marc_create();
+ yaz_marc_xml(mt, YAZ_MARC_JSON);
+ yaz_marc_decode_wrbuf(mt, rec, -1, w);
+ rec = odr_strdup(odr, wrbuf_cstr(w));
+ yaz_marc_destroy(mt);
+ wrbuf_destroy(w);
+ return rec;
}
- yaz_marc_destroy(mt);
}
- return rec;
+ return 0;
}
+
/*
* Local variables:
* c-basic-offset: 4