};
-static char *parse_settings(struct conf_config *config,
- NMEM nmem, xmlNode *node);
-
static void conf_metadata_assign(NMEM nmem,
struct conf_metadata * metadata,
const char *name,
int rank,
int sortkey_offset,
enum conf_metadata_mergekey mt,
- const char *icu_chain)
+ const char *facetrule)
{
assert(nmem && metadata && name);
metadata->rank = rank;
metadata->sortkey_offset = sortkey_offset;
metadata->mergekey = mt;
- metadata->icu_chain = nmem_strdup_null(nmem, icu_chain);
+ metadata->facetrule = nmem_strdup_null(nmem, facetrule);
}
service->ref_count = 1;
service->nmem = nmem;
service->next = 0;
- service->settings = 0;
service->databases = 0;
service->server = server;
service->session_timeout = 60; /* default session timeout */
int rank,
int sortkey_offset,
enum conf_metadata_mergekey mt,
- const char *icu_chain)
+ const char *facetrule)
{
struct conf_metadata * md = 0;
md = service->metadata + field_id;
conf_metadata_assign(service->nmem, md, name, type, merge, setting,
brief, termlist, rank, sortkey_offset,
- mt, icu_chain);
+ mt, facetrule);
return md;
}
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;
enum conf_metadata_mergekey mergekey_type = Metadata_mergekey_no;
int brief = 0;
int termlist = 0;
else if (!xmlStrcmp(attr->name, BAD_CAST "mergekey") &&
attr->children && attr->children->type == XML_TEXT_NODE)
xml_mergekey = attr->children->content;
- else if (!xmlStrcmp(attr->name, BAD_CAST "icu_chain") &&
+ else if (!xmlStrcmp(attr->name, BAD_CAST "facetrule") &&
attr->children && attr->children->type == XML_TEXT_NODE)
xml_icu_chain = attr->children->content;
else
// add a sortkey if so specified
if (xml_sortkey && strcmp((const char *) xml_sortkey, "no"))
{
+ enum conf_sortkey_type sk_type;
if (merge == Metadata_merge_no)
{
yaz_log(YLOG_FATAL,
return service;
}
-static char *parse_settings(struct conf_config *config,
- NMEM nmem, xmlNode *node)
-{
- xmlChar *src = xmlGetProp(node, (xmlChar *) "src");
- char *r;
-
- if (src)
- {
- WRBUF w = wrbuf_alloc();
- conf_dir_path(config, w, (const char *) src);
- r = nmem_strdup(nmem, wrbuf_cstr(w));
- wrbuf_destroy(w);
- }
- else
- {
- yaz_log(YLOG_FATAL, "Must specify src in targetprofile");
- return 0;
- }
- xmlFree(src);
- return r;
-}
-
static void inherit_server_settings(struct conf_service *s)
{
struct conf_server *server = s->server;
if (!s->dictionary) /* service has no config settings ? */
{
- if (server->server_settings)
+ if (server->settings_fname)
{
/* inherit settings from server */
init_settings(s);
- settings_read_file(s, server->server_settings, 1);
- settings_read_file(s, server->server_settings, 2);
+ settings_read_file(s, server->settings_fname, 1);
+ settings_read_file(s, server->settings_fname, 2);
}
else
{
server->config = config;
server->next = 0;
server->charsets = 0;
- server->server_settings = 0;
server->http_server = 0;
server->iochan_man = 0;
server->database_hosts = 0;
+ server->settings_fname = 0;
if (server_id)
{
}
else if (!strcmp((const char *) n->name, "settings"))
{
- if (server->server_settings)
+ xmlChar *src = xmlGetProp(n, (xmlChar *) "src");
+ WRBUF w;
+ if (!src)
{
- yaz_log(YLOG_FATAL, "Can't repeat 'settings'");
+ yaz_log(YLOG_FATAL, "Missing src attribute for settings");
return 0;
}
- if (!(server->server_settings = parse_settings(config, nmem, n)))
+ if (server->settings_fname)
+ {
+ xmlFree(src);
+ yaz_log(YLOG_FATAL, "Can't repeat 'settings'");
return 0;
+ }
+ w = wrbuf_alloc();
+ conf_dir_path(config, w, (const char *) src);
+ server->settings_fname = nmem_strdup(nmem, wrbuf_cstr(w));
+ wrbuf_destroy(w);
+ xmlFree(src);
}
else if (!strcmp((const char *) n->name, "icu_chain"))
{
config->servers = 0;
config->no_threads = 0;
config->iochan_man = 0;
+ config->database_hosts = 0;
config->confdir = wrbuf_alloc();
if ((p = strrchr(fname,