X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fpazpar2_config.c;h=8068b13cbc141860009dfa2dd580ace49b66e553;hb=e3d8ed2a9688b50e22e71755d83984659879ecf3;hp=81f0e55da7d6165ba63fbb5ac31c50e0baac26a3;hpb=22a1cf361ec5c4850c74cd1652dd175d833afe0e;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index 81f0e55..8068b13 100644 --- a/src/pazpar2_config.c +++ b/src/pazpar2_config.c @@ -150,8 +150,7 @@ struct conf_service *service_init(struct conf_server *server, service->sortkeys = nmem_malloc(nmem, sizeof(struct conf_sortkey) * service->num_sortkeys); - - + service->xml_node = 0; return service; } @@ -282,8 +281,6 @@ void service_destroy(struct conf_service *service) void service_incref(struct conf_service *service) { - yaz_log(YLOG_LOG, "service_incref. p=%p cnt=%d", service, - service->ref_count); pazpar2_incref(&service->ref_count, service->mutex); } @@ -743,6 +740,14 @@ static struct conf_service *service_create_static(struct conf_server *server, } } } + + { + xmlBufferPtr buf = xmlBufferCreate(); + xmlNodeDump(buf, node->doc, node, 0, 0); + service->xml_node = + nmem_strdupn(service->nmem, (const char *) buf->content, buf->use); + xmlBufferFree(buf); + } return service; } @@ -979,9 +984,147 @@ struct conf_service *locate_service(struct conf_server *server, return s; } +static void info_service_metadata(struct conf_service *service, WRBUF w) +{ + int i; + struct conf_metadata *md; + + if (service->num_metadata) + { + for (i = 0; i < service->num_metadata; i++) + { + md = &(service->metadata[i]); + wrbuf_puts(w, " name) { + wrbuf_puts(w, " name=\""); + wrbuf_xmlputs(w, md->name); + wrbuf_puts(w, "\""); + } + if (md->brief) { + wrbuf_puts(w, " brief=\"yes\""); + } + if (md->termlist) { + wrbuf_puts(w, " termlist=\"yes\""); + } + if (md->rank) { + wrbuf_puts(w, " rank=\""); + wrbuf_xmlputs(w, md->rank); + wrbuf_puts(w, "\""); + } + if (md->sortkey_offset > 0) { + wrbuf_puts(w, " sortkey=\""); + switch (service->sortkeys[md->sortkey_offset].type) { + case Metadata_sortkey_relevance: + wrbuf_puts(w, "relevance"); + break; + case Metadata_sortkey_numeric: + wrbuf_puts(w, "numeric"); + break; + case Metadata_sortkey_skiparticle: + wrbuf_puts(w, "skiparticle"); + break; + case Metadata_sortkey_string: + wrbuf_puts(w, "string"); + break; + case Metadata_sortkey_position: + wrbuf_puts(w, "position"); + break; + } + wrbuf_puts(w, "\""); + } + + switch (md->type) { + case Metadata_type_generic: + break; + case Metadata_type_year: + wrbuf_puts(w, " type=\"year\""); + break; + case Metadata_type_date: + wrbuf_puts(w, " type=\"date\""); + break; + } + + switch (md->merge) { + case Metadata_merge_no: + break; + case Metadata_merge_unique: + wrbuf_puts(w, " merge=\"unique\""); + break; + case Metadata_merge_longest: + wrbuf_puts(w, " merge=\"longest\""); + break; + case Metadata_merge_range: + wrbuf_puts(w, " merge=\"range\""); + break; + case Metadata_merge_all: + wrbuf_puts(w, " merge=\"all\""); + break; + case Metadata_merge_first: + wrbuf_puts(w, " merge=\"first\""); + break; + } + + switch (md->mergekey) { + case Metadata_mergekey_no: + break; + case Metadata_mergekey_optional: + wrbuf_puts(w, " mergekey=\"optional\""); + break; + case Metadata_mergekey_required: + wrbuf_puts(w, " mergekey=\"required\""); + break; + } + wrbuf_puts(w, " />\n"); + } + } +} + +static void info_service_databases(struct conf_service *service, WRBUF w) +{ + struct database *db; + struct setting *s; + int i; + + if (service->databases) + { + wrbuf_puts(w, " \n"); + for(db = service->databases; db; db = db->next) + { + wrbuf_puts(w, " id) { + wrbuf_puts(w, " id=\""); + wrbuf_printf(w, "%s", db->id); + wrbuf_puts(w, "\""); + } + wrbuf_puts(w, ">\n"); + for (i = 0; i < db->num_settings; i++) + { + s = db->settings[i]; + while (s != NULL) { + wrbuf_puts(w, " name); + wrbuf_puts(w, "\""); + wrbuf_puts(w, " value=\""); + wrbuf_xmlputs(w, s->value); + wrbuf_puts(w, "\""); + wrbuf_puts(w, " />\n"); + s = s->next; + } + } + wrbuf_puts(w, " \n"); + } + + wrbuf_puts(w, " \n"); + } +} + void info_services(struct conf_server *server, WRBUF w) { struct conf_service *s = server->service; + int i; + struct setting *S; + wrbuf_puts(w, " \n"); for (; s; s = s->next) { @@ -992,7 +1135,35 @@ void info_services(struct conf_server *server, WRBUF w) wrbuf_xmlputs(w, s->id); wrbuf_puts(w, "\""); } - wrbuf_puts(w, "/>"); + wrbuf_puts(w, ">\n"); + if (s->settings) + { + for (i=0; isettings->num_settings; i++) + { + S = s->settings->settings[i]; + while (S != NULL) { + wrbuf_puts(w, " name); + wrbuf_puts(w, "\""); + wrbuf_puts(w, " value=\""); + wrbuf_xmlputs(w, S->value); + wrbuf_puts(w, "\""); + if (S->target) { + wrbuf_puts(w, " target=\""); + wrbuf_xmlputs(w, S->target); + wrbuf_puts(w, "\""); + } + + wrbuf_puts(w, " />\n"); + + S = S->next; + } + } + } + info_service_metadata(s, w); + info_service_databases(s, w); + wrbuf_puts(w, " "); wrbuf_puts(w, "\n"); } @@ -1113,7 +1284,6 @@ void server_destroy(struct conf_server *server) s = s_next; } pp2_charset_fact_destroy(server->charsets); - yaz_log(YLOG_LOG, "server_destroy server=%p", server); http_server_destroy(server->http_server); }