Factor relevance charset normalization out to a separate implementation
[pazpar2-moved-to-github.git] / src / config.c
index b054335..43dad51 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: config.c,v 1.29 2007-04-23 08:48:50 marc Exp $
+/* $Id: config.c,v 1.33 2007-04-27 10:27:35 marc 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.29 2007-04-23 08:48:50 marc Exp $ */
+/* $Id: config.c,v 1.33 2007-04-27 10:27:35 marc Exp $ */
 
 #include <string.h>
 
@@ -59,13 +59,23 @@ struct conf_metadata * conf_metadata_assign(NMEM nmem,
         return 0;
     
     metadata->name = nmem_strdup(nmem, name);
-    metadata->type = type;
-    metadata->merge = merge;
+
+    // enforcing that merge_range is always type_year 
+    if (merge == Metadata_merge_range)
+        metadata->type = Metadata_type_year;
+    else
+        metadata->type = type;
+
+    // enforcing that type_year is always range_merge
+    if (metadata->type == Metadata_type_year)
+        metadata->merge = Metadata_merge_range;
+    else
+        metadata->merge = merge;    
+
     metadata->brief = brief;   
     metadata->termlist = termlist;
     metadata->rank = rank;    
     metadata->sortkey_offset = sortkey_offset;
-
     return metadata;
 }
 
@@ -111,7 +121,7 @@ struct conf_service * conf_service_create(NMEM nmem,
 
 struct conf_metadata* conf_service_add_metadata(NMEM nmem, 
                                                 struct conf_service *service,
-                                                int position,
+                                                int field_id,
                                                 const char *name,
                                                 enum conf_metadata_type type,
                                                 enum conf_metadata_merge merge,
@@ -123,11 +133,11 @@ struct conf_metadata* conf_service_add_metadata(NMEM nmem,
     struct conf_metadata * md = 0;
 
     if (!service || !service->metadata || !service->num_metadata
-        || position < 0  || !(position < service->num_metadata))
+        || field_id < 0  || !(field_id < service->num_metadata))
         return 0;
 
-    //md = &((service->metadata)[position]);
-    md = service->metadata + position;
+    //md = &((service->metadata)[field_id]);
+    md = service->metadata + field_id;
     md = conf_metadata_assign(nmem, md, name, type, merge, 
                              brief, termlist, rank, sortkey_offset);
     return md;
@@ -136,25 +146,26 @@ struct conf_metadata* conf_service_add_metadata(NMEM nmem,
 
 struct conf_sortkey * conf_service_add_sortkey(NMEM nmem,
                                                struct conf_service *service,
-                                               int position,
+                                               int field_id,
                                                const char *name,
                                                enum conf_sortkey_type type)
 {
     struct conf_sortkey * sk = 0;
 
     if (!service || !service->sortkeys || !service->num_sortkeys
-        || position < 0  || !(position < service->num_sortkeys))
+        || field_id < 0  || !(field_id < service->num_sortkeys))
         return 0;
 
-    //sk = &((service->sortkeys)[position]);
-    sk = service->sortkeys + position;
+    //sk = &((service->sortkeys)[field_id]);
+    sk = service->sortkeys + field_id;
     sk = conf_sortkey_assign(nmem, sk, name, type);
 
     return sk;
 }
 
 
-int conf_service_field_id(struct conf_service *service, const char * name)
+int conf_service_metadata_field_id(struct conf_service *service,
+                                   const char * name)
 {
     int i = 0;
 
@@ -170,6 +181,23 @@ int conf_service_field_id(struct conf_service *service, const char * name)
 };
 
 
+int conf_service_sortkey_field_id(struct conf_service *service,
+                                  const char * name)
+{
+    int i = 0;
+
+    if (!service || !service->sortkeys || !service->num_sortkeys)
+        return -1;
+
+    for(i = 0; i < service->num_sortkeys; i++) {
+        if (!strcmp(name, (service->sortkeys[i]).name))
+            return i;
+    }
+   
+    return -1;
+};
+
+
 
 /* Code to parse configuration file */
 /* ==================================================== */
@@ -265,7 +293,8 @@ static struct conf_service *parse_service(xmlNode *node)
                     type = Metadata_type_year;
                 else
                 {
-                    yaz_log(YLOG_FATAL, "Unknown value for metadata/type: %s", xml_type);
+                    yaz_log(YLOG_FATAL, 
+                            "Unknown value for metadata/type: %s", xml_type);
                     return 0;
                 }
             }