making cstore "controller" aware
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 25 Sep 2006 14:31:26 +0000 (14:31 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Mon, 25 Sep 2006 14:31:26 +0000 (14:31 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6210 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/c-apps/oils_cstore.c
Open-ILS/src/c-apps/oils_idl-core.c

index 3773cc2..83b1d76 100644 (file)
 #include <stdlib.h>
 #include <string.h>
 
-#define OILS_AUTH_CACHE_PRFX "oils_cstore_"
-#define MODULENAME "open-ils.cstore"
+#ifndef MODULENAME
+#  define MODULENAME "open-ils.cstore"
+#endif
+
 #define PERSIST_NS "http://open-ils.org/spec/opensrf/IDL/persistance/v1"
 #define OBJECT_NS "http://open-ils.org/spec/opensrf/IDL/objects/v1"
 #define BASE_NS "http://opensrf.org/spec/IDL/base/v1"
@@ -63,21 +65,12 @@ jsonObject* jsonNULL = NULL; //
 osrfHash* idl;
 
 int osrfAppInitialize() {
-
-       // first we register all the transaction and savepoint methods
-       osrfAppRegisterMethod( MODULENAME, "open-ils.cstore.transaction.begin", "beginTransaction", "", 0, 0 );
-       osrfAppRegisterMethod( MODULENAME, "open-ils.cstore.transaction.commit", "commitTransaction", "", 0, 0 );
-       osrfAppRegisterMethod( MODULENAME, "open-ils.cstore.transaction.rollback", "rollbackTransaction", "", 0, 0 );
-
-       osrfAppRegisterMethod( MODULENAME, "open-ils.cstore.savepoint.set", "setSavepoint", "", 1, 0 );
-       osrfAppRegisterMethod( MODULENAME, "open-ils.cstore.savepoint.release", "releaseSavepoint", "", 1, 0 );
-       osrfAppRegisterMethod( MODULENAME, "open-ils.cstore.savepoint.rollback", "rollbackSavepoint", "", 1, 0 );
-
+       growing_buffer* method_name;
 
        osrfLogInfo(OSRF_LOG_MARK, "Initializing the CStore Server...");
        osrfLogInfo(OSRF_LOG_MARK, "Finding XML file...");
 
-       char * idl_filename = osrf_settings_host_value("/apps/%s/app_settings/IDL", MODULENAME);
+       char* idl_filename = osrf_settings_host_value("/apps/%s/app_settings/IDL", MODULENAME);
        osrfLogInfo(OSRF_LOG_MARK, "Found file:");
        osrfLogInfo(OSRF_LOG_MARK, idl_filename);
 
@@ -88,6 +81,32 @@ int osrfAppInitialize() {
                exit(1);
        }
 
+       // first we register all the transaction and savepoint methods
+       method_name =  buffer_init(64);
+       buffer_fadd(method_name, "%s.transaction.begin", MODULENAME);
+       osrfAppRegisterMethod( MODULENAME, buffer_data(method_name), "beginTransaction", "", 0, 0 );
+
+       buffer_reset(method_name)
+       buffer_fadd(method_name, "%s.transaction.commit", MODULENAME);
+       osrfAppRegisterMethod( MODULENAME, buffer_data(method_name), "commitTransaction", "", 0, 0 );
+
+       buffer_reset(method_name)
+       buffer_fadd(method_name, "%s.transaction.rollback", MODULENAME);
+       osrfAppRegisterMethod( MODULENAME, buffer_data(method_name), "rollbackTransaction", "", 0, 0 );
+
+
+       buffer_reset(method_name)
+       buffer_fadd(method_name, "%s.savepoint.set", MODULENAME);
+       osrfAppRegisterMethod( MODULENAME, buffer_data(method_name), "setSavepoint", "", 1, 0 );
+
+       buffer_reset(method_name)
+       buffer_fadd(method_name, "%s.savepoint.release", MODULENAME);
+       osrfAppRegisterMethod( MODULENAME, buffer_data(method_name), "releaseSavepoint", "", 1, 0 );
+
+       buffer_reset(method_name)
+       buffer_fadd(method_name, "%s.savepoint.rollback", MODULENAME);
+       osrfAppRegisterMethod( MODULENAME, buffer_data(method_name), "rollbackSavepoint", "", 1, 0 );
+
        osrfStringArray* global_methods = osrfNewStringArray(6);
 
        osrfStringArrayAdd( global_methods, "create" );
@@ -108,6 +127,11 @@ int osrfAppInitialize() {
                
                osrfHash* idlClass = osrfHashGet(idl, classname);
 
+               if (!osrfStringArrayContains( osrfHashGet(idlClass, "controller"), MODULENAME )) {
+                       osrfLogInfo(OSRF_LOG_MARK, "%s is not listed as a controller for %s, moving on", MODULENAME, classname);
+                       continue;
+               }
+
                char* virt = osrfHashGet(idlClass, "virtual");
                if (virt && !strcmp( virt, "true")) {
                        osrfLogDebug(OSRF_LOG_MARK, "Class %s is virtual, skipping", classname );
index 6799696..68837ff 100644 (file)
@@ -67,6 +67,25 @@ osrfHash* oilsIDLInit( char* idl_filename ) {
                                );
                        }
 
+                       osrfStringArray* controller = osrfNewStringArray(0);
+                       string_tmp = NULL;
+                       if( (string_tmp = (char*)xmlGetProp(kid, "controller") )) {
+                               char* controller_list = strdup( string_tmp );
+                               osrfLogInfo(OSRF_LOG_MARK, "Controller list is %s", string_tmp );
+
+                               if (strlen( controller_list ) > 0) {
+                                       char* st_tmp;
+                                       char* _controller_class = strtok_r(controller_list, " ", &st_tmp);
+                                       osrfStringArrayAdd(controller, strdup(_controller_class));
+
+                                       while ((_controller_class = strtok_r(NULL, " ", &st_tmp))) {
+                                               osrfStringArrayAdd(controller, strdup(_controller_class));
+                                       }
+                               }
+                       }
+                       osrfHashSet( usrData, controller, "controller");
+
+
                        osrfHash* _tmp;
                        osrfHash* links = osrfNewHash();
                        osrfHash* fields = osrfNewHash();