[Building Sakai] New web service for site membership status

Noah Botimer botimer at umich.edu
Tue Apr 13 14:50:14 PDT 2010


Fooled again! I was going to send you straight to the AZG service... Oh well.

It's worth noting that Site implements AuthzGroup, so you can pass a Site object directly to the save method and avoid the string building below. I suppose it would be slightly more idiomatic.

It's also worth a more technical consideration of why SiteService.save does not update the AZG... I remember tripping over this a number of times myself and did again this time.

Thanks,
-Noah

On Apr 13, 2010, at 5:37 PM, Nicola Monat-Jacobs wrote:

> Thanks to Noah and Zhen - unfortunately siteService.save() didn't work, but AuthzGroupService.save() did, so I had to tweak it like so:
> 
> public String setMemberStatus(String sessionid, String siteid, String eid, boolean active) throws AxisFault { 
> 	
> 	Session s = establishSession(sessionid); 
> 	
> 	try {
> 		AuthzGroup site = AuthzGroupService.getAuthzGroup("/site/"+siteid);
> 
> 		String userid = UserDirectoryService.getUserByEid(eid).getId();
> 		Member membership = site.getMember(userid);
> 
> 		if (membership.isActive() && !active) {
> 			LOG.error("membership is active but we want it to be inactive");
> 			membership.setActive(false);
> 		} else if (!membership.isActive() && active) {
> 			LOG.error("membership is inactive, but we want it to be active");
> 			membership.setActive(true);
> 		}
> 		AuthzGroupService.save(site);
> 		
> 	} catch (Exception e) {
> 		LOG.error("WS setMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
> 		return "";
> 	}
> 	
> 	return "success";
> }
> 
> 
> On Apr 13, 2010, at  1:55 PM, Noah Botimer wrote:
> 
>> Nicola,
>> 
>> You'll need to pass the site back to the site service to commit the changes. That is, something like this:
>> 
>> 		if (membership.isActive() && !active) {
>> 			LOG.error("membership is active but we want it to be inactive");
>> 			membership.setActive(false);
>> 		} else if (!membership.isActive() && active) {
>> 			LOG.error("membership is inactive, but we want it to be active");
>> 			membership.setActive(true);
>> 		}
>> 		siteService.save(site);
>> 
>> Thanks,
>> -Noah
>> 
>> On Apr 13, 2010, at 4:18 PM, Nicola Monat-Jacobs wrote:
>> 
>>> Hi -
>>> 
>>> I'm working on a new simple sakai web service that would allow me to remotely get and set the status of a user's enrollment in a site - active or inactive. The get method works great, however the set method doesn't seem to be working - the status of the user's enrollment doesn't change. I'd love to know if anyone has any thoughts on why this might not be working. Oh, this is a sakai 2-6-x install. Thanks!
>>> 
>>> Here's my jws code:
>>> 
>>> /** 
>>>  * Get the status (active vs inactive) of a user's enrollment (membership) in a site
>>>  *
>>>  * @param	sessionid	the id of a valid session
>>>  * @param	siteId		the id of the site you want to check 
>>>  * @param	eid			the userid of the person you want to check
>>>  * @return		        active, inactive, blank or error
>>>  * @throws	AxisFault		
>>>  *
>>>  */
>>> public String getMemberStatus(String sessionid, String siteid, String eid) throws AxisFault { 
>>> 	
>>> 	Session s = establishSession(sessionid); 
>>> 	
>>> 	String status = "";
>>> 	
>>> 	try {
>>> 		Site site = SiteService.getSite(siteid);
>>> 
>>> 		String userid = UserDirectoryService.getUserByEid(eid).getId();
>>> 		Member membership = site.getMember(userid);
>>> 
>>> 		if (membership.isActive()) {
>>> 			status = "active";
>>> 		} else {
>>> 			status = "inactive";
>>> 		}
>>> 		
>>> 	} catch (Exception e) {
>>> 		LOG.error("WS getMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
>>> 		return "";
>>> 	}
>>> 	
>>> 	return status;
>>> }
>>> 
>>> 
>>> /** 
>>>  * Set the status of a user's enrollment (membership) in a site to either active or inactive
>>>  *
>>>  * @param	sessionid	the id of a valid session
>>>  * @param	siteId		the id of the site 
>>>  * @param	eid			the userid of the person whose status you want to set
>>>  * @param	active		true = active, false = inactive
>>>  * @return		        success or exception
>>>  * @throws	AxisFault		
>>>  *
>>>  */
>>> public String setMemberStatus(String sessionid, String siteid, String eid, boolean active) throws AxisFault { 
>>> 	
>>> 	Session s = establishSession(sessionid); 
>>> 	
>>> 	try {
>>> 		Site site = SiteService.getSite(siteid);
>>> 
>>> 		String userid = UserDirectoryService.getUserByEid(eid).getId();
>>> 		Member membership = site.getMember(userid);
>>> 
>>> 		if (membership.isActive() && !active) {
>>> 			LOG.error("membership is active but we want it to be inactive");
>>> 			membership.setActive(false);
>>> 		} else if (!membership.isActive() && active) {
>>> 			LOG.error("membership is inactive, but we want it to be active");
>>> 			membership.setActive(true);
>>> 		}
>>> 		
>>> 	} catch (Exception e) {
>>> 		LOG.error("WS setMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
>>> 		return "";
>>> 	}
>>> 	
>>> 	return "success";
>>> }
>>> 
>>> 
>>> And here's the demo perl script that I'm using to test it:
>>> 
>>> !/usr/bin/perl
>>> use SOAP::Lite;
>>> my $host='http://localhost:8080';
>>> 
>>> my $soap = SOAP::Lite -> proxy("$host/sakai-axis/SakaiLogin.jws?wsdl");
>>> my $result =$soap->login("admin","admin");
>>> my $session=$result->result();
>>> print $session."\n\n";
>>> 
>>> my $true = SOAP::Data->value('true')->type('boolean');
>>> my $false = SOAP::Data->value('')->type('boolean');
>>> 
>>> my $soap2 = SOAP::Lite -> proxy("$host/sakai-axis/WSLongsight.jws?wsdl");
>>> 
>>> my $result2 = $soap2->setMemberStatus($session,
>>> 	"39760797-6184-4b84-892f-e93041e2bcf1",
>>> 	"joe",
>>> 	$true);
>>> 	
>>> print $result2->result();
>>> 
>>> 
>>> _______________________________________________
>>> sakai-dev mailing list
>>> sakai-dev at collab.sakaiproject.org
>>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>>> 
>>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org with a subject of "unsubscribe"
>> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20100413/0eb83ab3/attachment.html 


More information about the sakai-dev mailing list