X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;ds=sidebyside;f=src%2Fconfig.c;h=c43109ccf87466ea62fd400d703c8977c0555f16;hb=eed30a5461c8c61a88582b69af6ff735839646b4;hp=247df8acc2413b9a1daad770080afe5e2a4d8a87;hpb=3da1c681b8d08ce707325c41743630842f0a7014;p=pazpar2-moved-to-github.git diff --git a/src/config.c b/src/config.c index 247df8a..c43109c 100644 --- a/src/config.c +++ b/src/config.c @@ -1,4 +1,4 @@ -/* $Id: config.c,v 1.38 2007-07-25 11:00:26 adam Exp $ +/* $Id: config.c,v 1.42 2007-10-31 05:29:08 quinn Exp $ Copyright (c) 2006-2007, Index Data. This file is part of Pazpar2. @@ -19,7 +19,7 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* $Id: config.c,v 1.38 2007-07-25 11:00:26 adam Exp $ */ +/* $Id: config.c,v 1.42 2007-10-31 05:29:08 quinn Exp $ */ #include @@ -52,6 +52,7 @@ struct conf_metadata * conf_metadata_assign(NMEM nmem, const char *name, enum conf_metadata_type type, enum conf_metadata_merge merge, + enum conf_setting_type setting, int brief, int termlist, int rank, @@ -62,11 +63,7 @@ struct conf_metadata * conf_metadata_assign(NMEM nmem, metadata->name = nmem_strdup(nmem, name); - // enforcing that merge_range is always type_year - if (merge == Metadata_merge_range) - metadata->type = Metadata_type_year; - else - metadata->type = type; + metadata->type = type; // enforcing that type_year is always range_merge if (metadata->type == Metadata_type_year) @@ -74,6 +71,7 @@ struct conf_metadata * conf_metadata_assign(NMEM nmem, else metadata->merge = merge; + metadata->setting = setting; metadata->brief = brief; metadata->termlist = termlist; metadata->rank = rank; @@ -128,6 +126,7 @@ struct conf_metadata* conf_service_add_metadata(NMEM nmem, const char *name, enum conf_metadata_type type, enum conf_metadata_merge merge, + enum conf_setting_type setting, int brief, int termlist, int rank, @@ -141,7 +140,7 @@ struct conf_metadata* conf_service_add_metadata(NMEM nmem, //md = &((service->metadata)[field_id]); md = service->metadata + field_id; - md = conf_metadata_assign(nmem, md, name, type, merge, + md = conf_metadata_assign(nmem, md, name, type, merge, setting, brief, termlist, rank, sortkey_offset); return md; } @@ -242,14 +241,16 @@ static struct conf_service *parse_service(xmlNode *node) xmlChar *xml_type = xmlGetProp(n, (xmlChar *) "type"); xmlChar *xml_termlist = xmlGetProp(n, (xmlChar *) "termlist"); xmlChar *xml_rank = xmlGetProp(n, (xmlChar *) "rank"); + xmlChar *xml_setting = xmlGetProp(n, (xmlChar *) "setting"); enum conf_metadata_type type = Metadata_type_generic; enum conf_metadata_merge merge = Metadata_merge_no; + enum conf_setting_type setting = Metadata_setting_no; + enum conf_sortkey_type sk_type = Metadata_sortkey_relevance; int brief = 0; int termlist = 0; int rank = 0; int sortkey_offset = 0; - enum conf_sortkey_type sk_type = Metadata_sortkey_relevance; // now do the parsing logic if (!xml_name) @@ -294,6 +295,8 @@ static struct conf_service *parse_service(xmlNode *node) type = Metadata_type_generic; else if (!strcmp((const char *) xml_type, "year")) type = Metadata_type_year; + else if (!strcmp((const char *) xml_type, "date")) + type = Metadata_type_date; else { yaz_log(YLOG_FATAL, @@ -326,6 +329,22 @@ static struct conf_service *parse_service(xmlNode *node) else merge = Metadata_merge_no; + if (xml_setting) + { + if (!strcmp((const char *) xml_setting, "no")) + setting = Metadata_setting_no; + else if (!strcmp((const char *) xml_setting, "postproc")) + setting = Metadata_setting_postproc; + else if (!strcmp((const char *) xml_setting, "parameter")) + setting = Metadata_setting_parameter; + else + { + yaz_log(YLOG_FATAL, + "Unknown value for medadata/setting: %s", xml_setting); + return 0; + } + } + // add a sortkey if so specified if (xml_sortkey && strcmp((const char *) xml_sortkey, "no")) { @@ -359,7 +378,7 @@ static struct conf_service *parse_service(xmlNode *node) // metadata known, assign values conf_service_add_metadata(nmem, service, md_node, (const char *) xml_name, - type, merge, + type, merge, setting, brief, termlist, rank, sortkey_offset); xmlFree(xml_name); @@ -409,11 +428,9 @@ static struct conf_server *parse_server(xmlNode *node) server->service = 0; server->next = 0; server->settings = 0; - -#ifdef HAVE_ICU - server->icu_chn = 0; -#endif // HAVE_ICU - + server->relevance_pct = 0; + server->sort_pct = 0; + server->mergekey_pct = 0; for (n = node->children; n; n = n->next) { @@ -462,34 +479,17 @@ static struct conf_server *parse_server(xmlNode *node) if (!(server->settings = parse_settings(n))) return 0; } - else if (!strcmp((const char *) n->name, "icu_chain")) + else if (!strcmp((const char *) n->name, "relevance")) { -#ifdef HAVE_ICU - UErrorCode status = U_ZERO_ERROR; - struct icu_chain *chain = icu_chain_xml_config(n, &status); - if (!chain || U_FAILURE(status)){ - //xmlDocPtr icu_doc = 0; - //xmlChar *xmlstr = 0; - //int size = 0; - //xmlDocDumpMemory(icu_doc, size); - - yaz_log(YLOG_FATAL, "Could not parse ICU chain config:\n" - "<%s>\n ... \n", - n->name, n->name); - return 0; - } - server->icu_chn = chain; -#else // HAVE_ICU - yaz_log(YLOG_FATAL, "Error: ICU support requested with element:\n" - "<%s>\n ... \n", - n->name, n->name); - yaz_log(YLOG_FATAL, - "But no ICU support compiled into pazpar2 server."); - yaz_log(YLOG_FATAL, - "Please install libicu36-dev and icu-doc or similar, " - "re-configure and re-compile"); - return 0; -#endif // HAVE_ICU + server->relevance_pct = pp2_charset_create_xml(n->children); + } + else if (!strcmp((const char *) n->name, "sort")) + { + server->sort_pct = pp2_charset_create_xml(n->children); + } + else if (!strcmp((const char *) n->name, "mergekey")) + { + server->mergekey_pct = pp2_charset_create_xml(n->children); } else if (!strcmp((const char *) n->name, "service")) { @@ -504,6 +504,12 @@ static struct conf_server *parse_server(xmlNode *node) return 0; } } + if (!server->relevance_pct) + server->relevance_pct = pp2_charset_create(0); + if (!server->sort_pct) + server->sort_pct = pp2_charset_create(0); + if (!server->mergekey_pct) + server->mergekey_pct = pp2_charset_create(0); return server; }