#include <stdio.h> #include <stdarg.h> #include "repmgr.h" |
adaptor_info
structure is used to pass adaptor info (duh) back to the
config module when it's building an adaptor instance. Here's what it contains:
static char *names[] = { "init", "free", "info", "version", "load" }; XML * PDREP_list_init (WFTK_ADAPTOR * ad, va_list args); XML * PDREP_list_free (WFTK_ADAPTOR * ad, va_list args); XML * PDREP_list_info (WFTK_ADAPTOR * ad, va_list args); XML * PDREP_list_version (WFTK_ADAPTOR * ad, va_list args); XML * PDREP_list_load (WFTK_ADAPTOR * ad, va_list args); static WFTK_API_FUNC vtab[] = { PDREP_list_init, PDREP_list_free, PDREP_list_info, PDREP_list_version, PDREP_list_load }; static struct wftk_adaptor_info _PDREP_list_info = { 5, names, vtab }; |
struct wftk_adaptor_info * PDREP_list_get_info () { return & _PDREP_list_info; } |
XML * PDREP_list_init (WFTK_ADAPTOR * ad, va_list args) { const char * parms; XML * mark; parms = xml_attrval (ad->parms, "parm"); if (!*parms) parms = ""; if (*parms) { mark = repos_defn (ad->session, parms); if (!mark) xml_setf (ad->parms, "error", "List '%s' is not defined in the repository.", parms); xml_set (ad->parms, "list", parms); xml_setf (ad->parms, "spec", "list:%s", parms); return NULL; } mark = xml_search (ad->session, "list", "pdrep-default", "yes"); if (mark) { xml_set (ad->parms, "list", xml_attrval (mark, "id")); xml_setf (ad->parms, "spec", "list:%s", xml_attrval (mark, "id")); } else { xml_set (ad->parms, "list", "_procdefs"); xml_set (ad->parms, "spec", "list:_procdefs"); } return (XML *) 0; } |
XML * PDREP_list_free (WFTK_ADAPTOR * ad, va_list args) { return (XML *) 0; } |
XML * PDREP_list_info (WFTK_ADAPTOR * ad, va_list args) { XML * info; info = xml_create ("info"); xml_set (info, "type", "pdrep"); xml_set (info, "name", "list"); xml_set (info, "ver", "1.0.0"); xml_set (info, "compiled", __TIME__ " " __DATE__); xml_set (info, "author", "Michael Roberts"); xml_set (info, "contact", "wftk@vivtek.com"); xml_set (info, "extra_functions", "0"); return (info); } |
XML * PDREP_list_version (WFTK_ADAPTOR * ad, va_list args) { char * id = (char *) 0; XML * field; XML * value; XML * obj; xml_set (ad->parms, "error", ""); if (args) id = va_arg (args, char *); if (!id) { xml_set (ad->parms, "error", "No ID given."); return (XML *) 0; } obj = repos_get (ad->session, xml_attrval (ad->parms, "list"), id); if (obj) { field = xml_search (obj, "field", "type", "document"); if (field) { /*repos_attach_getver (ad->session, xml_attrval (ad->parms, "list"), id, xml_attrval (value, "id"));*/ value = xml_create ("value"); xml_set (value, "value", *xml_attrval (field, "ver") ? xml_attrval (field, "ver") : "1"); xml_free (obj); return (value); } xml_free (obj); } value = xml_create ("value"); xml_set (value, "value", "0"); return value; } |
XML * PDREP_list_load (WFTK_ADAPTOR * ad, va_list args) { char *id = (char *) 0; char *ver = (char *) 0; XML * ret; char * defn; XML * obj; if (args) id = va_arg (args, char *); if (!id) { xml_set (ad->parms, "error", "No ID given."); return (XML *) 0; } ver = va_arg (args, char *); if (!ver) { xml_set (ad->parms, "error", "No version given."); return (XML *) 0; } if (strcmp (ver, "0")) { ret = repos_retrieve_load (ad->session, xml_attrval(ad->parms, "list"), id, NULL, ver); return ret; } obj = repos_get (ad->session, xml_attrval (ad->parms, "list"), id); if (obj) { defn = xmlobj_get (obj, NULL, "defn"); if (defn) { ret = xml_parse (defn); free (defn); xml_free (obj); return (ret); } xml_free (obj); xml_setf (ad->parms, "error", "Procdef '%s' has no attachment and no field named 'defn'", id); return (xml_create ("workflow")); } obj = xml_locf (ad->session, ".workflow[%s]", id); if (obj) { return (xml_copy (obj)); } xml_setf (ad->parms, "error", "Procdef '%s' is not defined.", id); return (xml_create ("workflow")); } |
This code and documentation are released under the terms of the GNU license. They are additionally copyright (c) 2003-2004, Vivtek. All rights reserved except those explicitly granted under the terms of the GNU license. This presentation was prepared with LPML. Try literate programming. You'll like it. |