/* * 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.SecuredObject; import com.smartitengineering.util.rest.atom.server.AbstractResource; import com.sun.jersey.api.view.Viewable; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; 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.MultivaluedMap; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; import javax.ws.rs.core.Response.Status; import javax.ws.rs.core.UriBuilder; import org.apache.abdera.model.Entry; import org.apache.abdera.model.Feed; import org.apache.abdera.model.Link; /** * * @author russel */ @Path("/orgs/sn/{organizationUniqueShortName}/so") public class OrganizationSecuredObjectsResource extends AbstractResource { static final Method ORGANIZATION_SECURED_OBJECTS_BEFORE_OBJECTID_METHOD; static final Method ORGANIZATION_SECURED_OBJECTS_AFTER_OBJECTID_METHOD; static { try { ORGANIZATION_SECURED_OBJECTS_AFTER_OBJECTID_METHOD = OrganizationSecuredObjectsResource.class.getMethod("getAfter", String.class); } catch (Exception ex) { throw new InstantiationError(); } try { ORGANIZATION_SECURED_OBJECTS_BEFORE_OBJECTID_METHOD = OrganizationSecuredObjectsResource.class.getMethod( "getBefore", String.class); } catch (Exception ex) { throw new InstantiationError(); } } @PathParam("count") private Integer count; private String organizationUniqueShortName; private Organization organization; public OrganizationSecuredObjectsResource(@PathParam("organizationUniqueShortName") String orgName) { this.organizationUniqueShortName = orgName; organization = getOrganization(); } @GET @Produces(MediaType.APPLICATION_ATOM_XML) @Path("/before/{beforeObjectID}") public Response getBefore(@PathParam("beforeObjectID") String beforeObjectID) { return get(organizationUniqueShortName, beforeObjectID, true); } @GET @Produces(MediaType.APPLICATION_ATOM_XML) @Path("/after/{afterObjectID}") public Response getAfter(@PathParam("afterObjectID") String afterObjectID) { return get(organizationUniqueShortName, afterObjectID, false); } @GET @Produces(MediaType.TEXT_HTML) public Response getHtml() { ResponseBuilder responseBuilder = Response.ok(); Collection<SecuredObject> securedObjects = Services.getInstance().getSecuredObjectService().getByOrganization( organizationUniqueShortName); Viewable view = new Viewable("orgSecuredObjectList", securedObjects, OrganizationSecuredObjectsResource.class); responseBuilder.entity(view); return responseBuilder.build(); } @GET @Produces(MediaType.APPLICATION_ATOM_XML) public Response get() { return get(organizationUniqueShortName, null, true); } private Response get(String uniqueOrganizationName, String userName, boolean isBefore) { if (count == null) { count = 10; } ResponseBuilder responseBuilder = Response.ok(); if (organization == null) { return responseBuilder.status(Status.NOT_FOUND).build(); } Feed atomFeed = getFeed(userName, new Date()); Link parentLink = getAbderaFactory().newLink(); parentLink.setHref(UriBuilder.fromResource(OrganizationResource.class).build(uniqueOrganizationName).toString()); parentLink.setRel("parent"); atomFeed.addLink(parentLink); Collection<SecuredObject> securedObjects = Services.getInstance().getSecuredObjectService().getByOrganization( uniqueOrganizationName); if (securedObjects != null && !securedObjects.isEmpty()) { MultivaluedMap<String, String> queryParam = getUriInfo().getQueryParameters(); List<SecuredObject> securedObjectList = new ArrayList<SecuredObject>(securedObjects); // uri builder for next and previous organizations according to count final UriBuilder nextUri = getRelativeURIBuilder().path(OrganizationSecuredObjectsResource.class).path( ORGANIZATION_SECURED_OBJECTS_AFTER_OBJECTID_METHOD); final UriBuilder previousUri = getRelativeURIBuilder().path(OrganizationSecuredObjectsResource.class).path( ORGANIZATION_SECURED_OBJECTS_BEFORE_OBJECTID_METHOD); // link to the next organizations based on count Link nextLink = getAbderaFactory().newLink(); nextLink.setRel(Link.REL_NEXT); SecuredObject lastSecuredObject = securedObjectList.get(0); for (String key : queryParam.keySet()) { final Object[] values = queryParam.get(key).toArray(); nextUri.queryParam(key, values); previousUri.queryParam(key, values); } nextLink.setHref(nextUri.build(uniqueOrganizationName, lastSecuredObject.getObjectID()).toString()); atomFeed.addLink(nextLink); /* link to the previous organizations based on count */ Link prevLink = getAbderaFactory().newLink(); prevLink.setRel(Link.REL_PREVIOUS); SecuredObject firstSecuredObject = securedObjectList.get(securedObjects.size() - 1); prevLink.setHref(previousUri.build(uniqueOrganizationName, firstSecuredObject.getObjectID()).toString()); atomFeed.addLink(prevLink); for (SecuredObject securedObject : securedObjects) { Entry securedObjectEntry = getAbderaFactory().newEntry(); securedObjectEntry.setId(securedObject.getObjectID()); securedObjectEntry.setTitle(securedObject.getObjectID()); securedObjectEntry.setSummary(securedObject.getObjectID()); //userEntry.setUpdated("Not available"); // setting link to the each individual user Link securedObjectLink = getAbderaFactory().newLink(); securedObjectLink.setHref(getRelativeURIBuilder().path(OrganizationSecuredObjectResource.class).build( uniqueOrganizationName, securedObject.getName()).toString()); securedObjectLink.setRel(Link.REL_ALTERNATE); securedObjectLink.setMimeType(MediaType.APPLICATION_ATOM_XML); securedObjectEntry.addLink(securedObjectLink); atomFeed.addEntry(securedObjectEntry); } } responseBuilder.entity(atomFeed); return responseBuilder.build(); } @POST @Consumes(MediaType.APPLICATION_JSON) public Response post(SecuredObject securedObject) { ResponseBuilder responseBuilder = Response.ok(); if (organization == null) { return responseBuilder.status(Status.NOT_FOUND).build(); } try { securedObject.setOrganization(organization); Services.getInstance().getSecuredObjectService().save(securedObject); responseBuilder = Response.status(Status.CREATED); responseBuilder.location(getAbsoluteURIBuilder().path(OrganizationSecuredObjectResource.class).build(organizationUniqueShortName, securedObject.getName())); } catch (Exception ex) { responseBuilder = Response.status(Status.INTERNAL_SERVER_ERROR); } return responseBuilder.build(); } private Organization getOrganization() { return Services.getInstance().getOrganizationService().getOrganizationByUniqueShortName(organizationUniqueShortName); } @Override protected String getAuthor() { return "Smart User"; } }