package com.collabinate.server.resources; import org.joda.time.DateTime; import org.restlet.data.Status; import org.restlet.resource.Delete; import org.restlet.resource.Get; import org.restlet.resource.Put; import org.restlet.resource.ServerResource; import com.collabinate.server.activitystreams.Activity; import com.collabinate.server.activitystreams.ActivityStreamsObject; import com.collabinate.server.engine.CollabinateReader; import com.collabinate.server.engine.CollabinateWriter; /** * Restful resource representing a user like of an activity. * * @author mafuba * */ public class LikeResource extends ServerResource { @Get("json") public String getLike() { // extract necessary information from the context CollabinateReader reader = (CollabinateReader)getContext() .getAttributes().get("collabinateReader"); String tenantId = getAttribute("tenantId"); String userId = getAttribute("userId"); String entityId = getAttribute("entityId"); String activityId = getAttribute("activityId"); DateTime likeDate = reader.userLikesActivity(tenantId, userId, entityId, activityId); if (null != likeDate) { setStatus(Status.SUCCESS_OK); return createLikeActivity(userId, LIKE, activityId, likeDate) .toString(); } else { // TODO: set error message setStatus(Status.CLIENT_ERROR_NOT_FOUND); return null; } } @Put public void likeActivity() { // extract necessary information from the context CollabinateReader reader = (CollabinateReader)getContext() .getAttributes().get("collabinateReader"); CollabinateWriter writer = (CollabinateWriter)getContext() .getAttributes().get("collabinateWriter"); String tenantId = getAttribute("tenantId"); String userId = getAttribute("userId"); String entityId = getAttribute("entityId"); String activityId = getAttribute("activityId"); if (null == reader.getActivity(tenantId, entityId, activityId)) { // TODO: set error message setStatus(Status.CLIENT_ERROR_NOT_FOUND); return; } writer.likeActivity(tenantId, userId, entityId, activityId); setStatus(Status.SUCCESS_OK); } @Delete public void unlikeActivity() { // extract necessary information from the context CollabinateReader reader = (CollabinateReader)getContext() .getAttributes().get("collabinateReader"); CollabinateWriter writer = (CollabinateWriter)getContext() .getAttributes().get("collabinateWriter"); String tenantId = getAttribute("tenantId"); String userId = getAttribute("userId"); String entityId = getAttribute("entityId"); String activityId = getAttribute("activityId"); if (null == reader.getActivity(tenantId, entityId, activityId)) { // TODO: set error message setStatus(Status.CLIENT_ERROR_NOT_FOUND); return; } writer.unlikeActivity(tenantId, userId, entityId, activityId); setStatus(Status.SUCCESS_OK); } /** * Creates an activity to represent a change to a like relationship. * * @param userId The user who started or stopped liking. * @param verb Like or unlike. * @param activityId The object that was liked or unliked. * @param published The time of the activity. * * @return An appropriately structured activity that captures the like * change. */ protected Activity createLikeActivity( String userId, String verb, String activityId, DateTime published) { Activity activity = new Activity(); ActivityStreamsObject actor = new ActivityStreamsObject(); actor.setId(userId); activity.setActor(actor); ActivityStreamsObject object = new ActivityStreamsObject(); object.setId(activityId); activity.setObject(object); activity.setVerb(verb); activity.setPublished(published); return activity; } protected static final String LIKE = "like"; protected static final String UNLIKE = "unlike"; }