This explains basic usage of the Sakai SiteService. This service is used to find out things about Sakai Sites (courses) and look them up by references or contexts. The Site provides access to memberships in the site and allows retrieval and manipulation.
- You can use Spring Framework to inject the service or use the cover
- Using Spring to get the service for your class (e.g. YourAppClass) (recommended)
- Add the SiteService bean to the bean for YourAppClass
Code Block |
---|
|
<bean id="org.sakaiproject.yourapp.logic.YourAppClass"
class="org.sakaiproject.yourapp.logic.impl.YourAppClassImpl">
<property name="siteService"
ref="org.sakaiproject.site.api.SiteService" />
</bean>
|
- Add a variable and setter to YourAppClass to use the service in like so:
Code Block |
---|
|
private SiteService siteService;
public void setSiteService(SiteService siteService) {
this.siteService = siteService;
}
|
- Using the Component Manager to get the service
- Note: This is not the recommended method, you should be using Spring to inject the service
- Use the CM cover to get the service
Code Block |
---|
|
import org.sakaiproject.component.cover.ComponentManager;
import org.sakaiproject.site.api.SiteService;
...
private SiteService siteService;
...
siteService = (SiteService) ComponentManager.get(SiteService.class);
|
Getting the site reference (for security/authz lookups) from the context
- Use the ToolManager service to get the current context
Code Block |
---|
|
String currentContext = toolManager.getCurrentPlacement().getContext();
|
- Note: You could also retrieve the context in other ways, this is just the common one
- Use the SiteService to get the site reference from the context
Code Block |
---|
|
String siteRef = siteService.siteReference(currentContext);
|
Getting the Site object for the site the current user is currently in
Use the ToolManager service to get the current context and then use the SiteService to get the Site
Code Block |
---|
|
Site site = null;
try {
site = siteService.getSite(toolManager.getCurrentPlacement().getContext());
} catch (Exception e) {
// assume we are not in a site then and do something about it
}
|
Getting the membership for a Site
Use the SiteService to get the Site and then get the Members from the site
Code Block |
---|
|
Site site = null;
try {
site = siteService.getSite(siteId);
Set<Member> members = site.getMembers();
for (Member member : members) {
// do something here
log.info("Check it out: " + member.getUserEid());
}
} catch (Exception e) {
// assume we are not in a site or something died and do something about it
}
|
Adding memberships to a Site
Use the SiteService to get the Site and then use the methods on Site to add a membership (it can also update and remove memberships)
Code Block |
---|
|
String userId = getCurrentUserId(); // or some other way of getting the userId
Site site;
try {
site = siteService.getSite(siteId);
} catch (IdUnusedException e) {
throw new IllegalArgumentException("Cannot find site by siteId: " + siteId +":"+e, e);
}
String roleId = site.getJoinerRole(); // or some other role
site.addMember(userId, roleId, true, false);
try {
siteService.saveSiteMembership(site);
} catch (IdUnusedException e) {
throw new IllegalArgumentException("Invalid site: " + site.getId() + ":" + e, e);
} catch (PermissionException e) {
throw new SecurityException("Current user not allowed to update site memberships in site: " + site.getId() + " :"+e, e);
}
|
Getting the workspace Site for a user (using the userId)
- Use the SiteService to get the siteId based on the userId
Code Block |
---|
|
String siteId = siteService.getUserSiteId(userId);
|
- Use the SiteService to get the Site based on the siteId
Code Block |
---|
|
Site workspaceSite = siteService.getSite(siteId);
|