[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