def read_agent_related (self, userID, cert, oid):
	##########################################
	# Purpose: Looks up a given row from the "groups" table and 
	#            decodes the role mask for web display
        #
	# Caller: Actor web page "OnClick" event in listing pane
	#############################################
		module="web_forms:agent_related: read-agent_related"

		f = "read_agent_related_event ('%s', '%s', '%s')" % (userID, cert, oid)
		err_status, result = callStoredProc (db, f)

		return err_status, result 
        def read_groups (self, userID, cert):
        ####################################
	# Purpose: When the web page loads, it calls this
	#            to populate "group" drop down list
        #
        # Caller: Onload event for web page
        #######################################
		module="web_forms:agent_group: read-groups"

		f = "read_groups ('%s', '%s')" % (userID, cert) 
		err_status, result = callStoredProc (db, f) 
                result = self.formDroplist (result)
		return err_status, result 
        def read_related_events (self, userID, cert):
        ##########################################
	# Purpose: When the web page loads, it calls this
	#            to populate "event" grid with alphabetized
        #            list of events
        # Caller: Onload event for web page
        #######################################
		module="web_forms:agent_related: read-related_events"

		f = "read_related_events ('%s', '%s')" % (userID, cert)
		err_status, result = callStoredProc (db, f) 
                result = self.formDroplist (result)
		return err_status, result 
	def list_by_agent (self, userID, cert, agent):
	##########################################
	# Purpose: Receives request from Javascript in web page 
	#
	# Caller: Actor web page
	#############################################
		module="web_forms::agent_related: list-by-agent"

		f = "view_agent_related ('%s', '%s', '%s', '%%')" % (userID, cert, agent)
		err_status, result = callStoredProc (db, f)
                result = self.formRow (result)
		# 0 = no err, 1 = err. 
		return err_status, result 
        def c_mod_agent_rel (self, agent, cert, related, roles):
        ##########################################################
        # Purpose: Set the share events between an agent/related agent pair
        #
        # Caller: from Web-server
        ######################################################
		module="web_forms::agent_related: c_mod_agent_rel"

                # call stored proc
                # Need to modify the StoredProc below to accept "Role" array
		f = "cmod_agent_rel ('%s', '%s', '%s'. '%s')" % (agent, cert, related, roles)
		err_status, result = callStoredProc (db, f)
                
                # and return status, 0 - no err, 1 = err
                return err_status, result
	def read_agent_grp (self, userID, cert, oid):
	##########################################
	# Purpose: Looks up a given row from the "groups" table and 
	#            decodes the role mask for web display
        #
	# Caller: Actor web page "OnClick" event in listing pane
	#############################################
		module="web_forms:agent_group: read-agent_grp"

		f = "read_grp_agent_role ('%s', '%s','%s')" % (userID, cert, oid)
		err_status, result = callStoredProc (db, f)
                # Result should look like
                # "agent", "group", "role1, role2, role3 ..."
		# 0 = no err, 1 = err. 
		return err_status, result 
	def list_by_related (self, userID, cert, rel_agent):
	##########################################
	# Purpose: Receives request from Javascript in web page 
	#
	# Caller: Actor web page
	#############################################
		module="web_forms:agent_related: list-by-related"

		f = "view_agent_related ('%s', '%s', '%%', '%s')" % (userID, cert, rel_agent)
		err_status, result = callStoredProc (db, f)
                #print "mod %s, err = %s, res = %s" % (module, err_status, result)
                result = self.formRow (result)
                #print "after call %s" % (result)
		# 0 = no err, 1 = err.    
		return err_status, result 
	def list_by_group (self, userID, cert,  group):
	##########################################
	# Purpose: Receives request from Javascript in web page 
	#
	# Caller: Actor web page
	#############################################
		module="web_forms:agent_group: list-by-group"

		# if we got here the Agent has a valid Kerberos Cert
		# SO now check for authorization on this Actor for
		# this caller to do desired operation to the desired Study
		f = "view_grp_agent_role2 ('%s', '%s', '%%', '%s')" % (userID, cert, group)
		err_status, result = callStoredProc (db, f)
                res = self.formRow (result)
		# 0 = no err, 1 = err. 
		return err_status, res 	
        def c_mod_agent_grp (self, userID, cert, agent, grp, roles):
        ##########################################################
        # Purpose: Take contents from agent-grp-relation FOrm and pass
        #               to dbase table "groups".
        #
        # Caller: 
        # Args:  agent, grp obvious. Roles is a string array containing 
        #           the "roles" that were checked in the form
        ######################################################
		module="web_forms:agent_group: c_mod_agent_grp"
 
                # call stored proc
                # Need to modify the StoredProc below to accept "Role" array
		f = "cmod_agent_grp ('%s', '%s','%s', '%s'. '%s')" % (userID, cert, grp, agent, roles)
		err_status, result = callStoredProc (db, f)
                
                # and return status, 0 - no err, 1 = err
                return err_status, res