#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. |