added conf_service creator inclusive metadata and sortkey assigners, added unittests...
[pazpar2-moved-to-github.git] / src / config.c
index 7c4942e..98cb041 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: config.c,v 1.23 2007-04-10 08:48:56 adam Exp $
+/* $Id: config.c,v 1.26 2007-04-19 19:42:30 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.23 2007-04-10 08:48:56 adam Exp $ */
+/* $Id: config.c,v 1.26 2007-04-19 19:42:30 marc Exp $ */
 
 #include <string.h>
 
@@ -44,6 +44,115 @@ static char confdir[256] = ".";
 
 struct conf_config *config = 0;
 
+
+struct conf_metadata * conf_metadata_assign(NMEM nmem, 
+                                            struct conf_metadata * metadata,
+                                            const char *name,
+                                            enum conf_metadata_type type,
+                                            enum conf_metadata_merge merge,
+                                            int brief,
+                                            int termlist,
+                                            int rank,
+                                            int sortkey_offset)
+{
+    if (!nmem || !metadata || !name)
+        return 0;
+    
+    metadata->name = nmem_strdup(nmem, name);
+    metadata->type = type;
+    metadata->merge = merge;
+    metadata->brief = brief;   
+    metadata->termlist = termlist;
+    metadata->rank = rank;    
+    metadata->sortkey_offset = sortkey_offset;
+
+    return metadata;
+}
+
+
+struct conf_sortkey * conf_sortkey_assign(NMEM nmem, 
+                                          struct conf_sortkey * sortkey,
+                                          const char *name,
+                                          enum conf_sortkey_type type)
+{
+    if (!nmem || !sortkey || !name)
+        return 0;
+    
+    sortkey->name = nmem_strdup(nmem, name);
+    sortkey->type = type;
+
+    return sortkey;
+}
+
+
+struct conf_service * conf_service_create(NMEM nmem,
+                                          int num_metadata, int num_sortkeys)
+{
+    struct conf_service * service
+        = nmem_malloc(nmem, sizeof(struct conf_service));
+    service->num_metadata = num_metadata;
+    service->metadata = 0;
+    if (service->num_metadata)
+      service->metadata 
+          = nmem_malloc(nmem, 
+                        sizeof(struct conf_metadata) * service->num_metadata);
+    service->num_sortkeys = num_sortkeys;
+    service->sortkeys = 0;
+    if (service->num_sortkeys)
+        service->sortkeys 
+            = nmem_malloc(nmem, 
+                          sizeof(struct conf_sortkey) * service->num_sortkeys);
+    return service; 
+}
+
+struct conf_metadata* conf_service_add_metadata(NMEM nmem, 
+                                                struct conf_service *service,
+                                                int position,
+                                                const char *name,
+                                                enum conf_metadata_type type,
+                                                enum conf_metadata_merge merge,
+                                                int brief,
+                                                int termlist,
+                                                int rank,
+                                                int sortkey_offset)
+{
+    struct conf_metadata * md = 0;
+
+    if (!service || !service->metadata || !service->num_metadata
+        || position < 0  || !(position < service->num_metadata))
+        return 0;
+
+    //md = &((service->metadata)[position]);
+    md = service->metadata + position;
+    md = conf_metadata_assign(nmem, md, name, type, merge, 
+                             brief, termlist, rank, sortkey_offset);
+    return md;
+}
+
+
+struct conf_sortkey * conf_service_add_sortkey(NMEM nmem,
+                                               struct conf_service *service,
+                                               int position,
+                                               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))
+        return 0;
+
+    //sk = &((service->sortkeys)[position]);
+    sk = service->sortkeys + position;
+    sk = conf_sortkey_assign(nmem, sk, name, type);
+
+    return sk;
+}
+
+
+
+
+
 /* Code to parse configuration file */
 /* ==================================================== */
 
@@ -191,6 +300,7 @@ static struct conf_service *parse_service(xmlNode *node)
             xmlFree(brief);
             xmlFree(sortkey);
             xmlFree(merge);
+            xmlFree(type);
             xmlFree(termlist);
             xmlFree(rank);
             md_node++;