/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.smartitengineering.user.ws.resources;
import com.smartitengineering.user.service.Services;
import com.smartitengineering.user.domain.Organization;
import com.smartitengineering.user.domain.Privilege;
import com.smartitengineering.user.domain.User;
import com.smartitengineering.util.rest.atom.server.AbstractResource;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
import javax.ws.rs.core.Response.Status;
import org.apache.abdera.model.Feed;
import org.apache.abdera.model.Link;
/**
*
* @author modhu7
*/
@Path("/orgs/sn/{organizationUniqueShortName}/un/{username}/privs/name/{privilegeName}")
public class UserPrivilegeResource extends AbstractResource {
private String organizationUniqueShortName;
private String username;
private String privilegeName;
private Privilege privilege;
private Organization organization;
private User user;
private static String REL_PRIV = "privilege";
public UserPrivilegeResource(@PathParam("organizationUniqueShortName") String organizationUniqueShortName, @PathParam(
"username") String username, @PathParam("privilegeName") String privilegeName) {
this.organizationUniqueShortName = organizationUniqueShortName;
this.username = username;
this.privilegeName = privilegeName;
privilege = getPrivilege();
organization = getOrganization();
user = getUser();
}
@GET
@Produces(MediaType.APPLICATION_ATOM_XML)
public Response get() {
ResponseBuilder responseBuilder;
if (organization == null || user == null || privilege == null) {
responseBuilder = Response.status(Status.NOT_FOUND);
return responseBuilder.build();
}
try {
responseBuilder = Response.status(Status.OK);
Feed privilegeFeed = getUserPrivilegeFeed();
responseBuilder = Response.ok(privilegeFeed);
}
catch (Exception ex) {
responseBuilder = Response.status(Status.INTERNAL_SERVER_ERROR);
}
return responseBuilder.build();
}
@DELETE
public Response delete() {
ResponseBuilder responseBuilder;
if (organization == null || user == null || privilege == null) {
responseBuilder = Response.status(Status.NOT_FOUND);
return responseBuilder.build();
}
try {
responseBuilder = Response.status(Status.OK);
User newUser = Services.getInstance().getUserService().getUserByOrganizationAndUserName(organizationUniqueShortName,
username);
newUser.getPrivileges().remove(privilege);
Services.getInstance().getUserService().update(newUser);
}
catch (Exception ex) {
responseBuilder = Response.status(Status.INTERNAL_SERVER_ERROR);
}
return responseBuilder.build();
}
private Feed getUserPrivilegeFeed() {
Feed privilegeFeed = getAbderaFactory().newFeed();
privilegeFeed.setId(privilegeName);
privilegeFeed.setTitle(privilegeName);
privilegeFeed.addLink(getSelfLink());
Link altLink = getAbderaFactory().newLink();
altLink.setHref(getRelativeURIBuilder().path(UserPrivilegeResource.class).build(organizationUniqueShortName,
username, privilegeName).toString());
altLink.setRel(Link.REL_ALTERNATE);
altLink.setMimeType(MediaType.APPLICATION_JSON);
privilegeFeed.addLink(altLink);
Link privLink = getAbderaFactory().newLink();
privLink.setHref(getRelativeURIBuilder().path(OrganizationPrivilegeResource.class).build(organizationUniqueShortName,
privilegeName).toString());
privLink.setRel(REL_PRIV);
privLink.setMimeType(MediaType.APPLICATION_JSON);
privilegeFeed.addLink(privLink);
return privilegeFeed;
}
private Privilege getPrivilege() {
return Services.getInstance().getPrivilegeService().getPrivilegeByOrganizationAndPrivilegeName(
organizationUniqueShortName, privilegeName);
}
private Organization getOrganization() {
return Services.getInstance().getOrganizationService().getOrganizationByUniqueShortName(organizationUniqueShortName);
}
private User getUser() {
return Services.getInstance().getUserService().getUserByOrganizationAndUserName(organizationUniqueShortName,
username);
}
@Override
protected String getAuthor() {
return "Smart User";
}
}