Changeset 5508


Ignore:
Timestamp:
08/01/14 08:50:14 (10 years ago)
Author:
Twan Goosen
Message:

All representations of a VC are retrieved at the same URL that provides internal XML, JSON, CMDI, or a web UI redirect determined through content negotiation. Added a filter that allows for 'content negotation' through URL extension
Refs #604

TODO: Default to CMDI
TODO: PID reference

Location:
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/VirtualCollectionResource.java

    r5417 r5508  
    1111import java.io.InputStream;
    1212import java.io.OutputStream;
     13import java.net.URI;
    1314import java.security.Principal;
    1415import javax.ws.rs.Consumes;
     
    2728import javax.ws.rs.core.SecurityContext;
    2829import javax.ws.rs.core.StreamingOutput;
     30import javax.ws.rs.core.UriBuilder;
     31import javax.ws.rs.core.UriInfo;
    2932
    3033/**
     
    3639 * with it.
    3740 *
     41 * FIXME: make this default to {@link #getVirtualCollectionCmdi() } instead
     42 * of XML.
     43 *
    3844 * @author twagoo
    3945 */
     46@Produces(VirtualCollectionResource.MediaTypes.CMDI)
    4047public final class VirtualCollectionResource {
    4148
     49    public static class MediaTypes {
     50        public static final String CMDI = "application/x-cmdi+xml";
     51        public static final MediaType CMDI_TYPE = new MediaType("application", "x-cmdi+xml");
     52    }
     53   
    4254    @InjectParam
    4355    private VirtualCollectionRegistry registry;
     
    4860    @Context
    4961    private HttpHeaders headers;
     62    @Context
     63    private UriInfo uriInfo;
    5064
    5165    private Long id;
     
    7185        }
    7286        this.id = id;
     87    }
     88   
     89    /**
     90     * The virtual collection referenced by the URI will be retrieved in CMDI
     91     * format.
     92     *
     93     * @return A response containing the virtual collection in CMDI format. If
     94     * the virtual collection is not found the appropriate HTTP status code is
     95     * issued and an error message is returned.
     96     * @throws VirtualCollectionRegistryException
     97     */
     98    @GET
     99    public Response getVirtualCollectionCmdi()
     100            throws VirtualCollectionRegistryException {
     101        final VirtualCollection vc = registry.retrieveVirtualCollection(id);
     102        if (!vc.isPublic() || (vc.getPersistentIdentifier() == null)) {
     103            throw new VirtualCollectionNotFoundException(id);
     104        }
     105        StreamingOutput writer = new StreamingOutput() {
     106            @Override
     107            public void write(OutputStream output) throws IOException,
     108                    WebApplicationException {
     109                marshaller.marshalAsCMDI(output, VirtualCollectionMarshaller.Format.XML, vc);
     110                output.close();
     111            }
     112        };
     113        return Response.ok(writer).build();
    73114    }
    74115
     
    167208
    168209    /**
    169      * The virtual collection referenced by the URI will be retrieved in CMDI
    170      * format.
    171      *
    172      * @return A response containing the virtual collection in CMDI format. If
    173      * the virtual collection is not found the appropriate HTTP status code is
    174      * issued and an error message is returned.
    175      * @throws VirtualCollectionRegistryException
    176      */
    177     @GET
    178     @Path("/cmdi")
    179     @Produces({MediaType.TEXT_XML,
    180         MediaType.APPLICATION_XML})
    181     public Response getVirtualCollectionCmdi()
    182             throws VirtualCollectionRegistryException {
    183         final VirtualCollection vc = registry.retrieveVirtualCollection(id);
    184         if (!vc.isPublic() || (vc.getPersistentIdentifier() == null)) {
    185             throw new VirtualCollectionNotFoundException(id);
    186         }
    187         StreamingOutput writer = new StreamingOutput() {
    188             @Override
    189             public void write(OutputStream output) throws IOException,
    190                     WebApplicationException {
    191                 marshaller.marshalAsCMDI(output, VirtualCollectionMarshaller.Format.XML, vc);
    192                 output.close();
    193             }
    194         };
    195         return Response.ok(writer).build();
     210     * Redirects the client to the VC's details page in the Wicket frontend
     211     * @return
     212     * @throws VirtualCollectionRegistryException
     213     */
     214    @GET
     215    @Produces({MediaType.TEXT_HTML})
     216    public Response getVirtualCollectionDetailsRedirect()
     217            throws VirtualCollectionRegistryException {
     218        final UriBuilder pathBuilder = uriInfo.getBaseUriBuilder().path("../app/details/{arg1}");
     219        final URI detailsUri = pathBuilder.build(id);
     220        return Response.seeOther(detailsUri).build();
    196221    }
    197222
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/webapp/WEB-INF/web-dev.xml

    r5479 r5508  
    7272            <param-name>com.sun.jersey.config.property.packages</param-name>
    7373            <param-value>eu.clarin.cmdi.virtualcollectionregistry.rest</param-value>
     74        </init-param>
     75        <init-param>
     76            <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
     77            <param-value>eu.clarin.cmdi.virtualcollectionregistry.rest.VirtualCollectionMediaTypeFilter</param-value>
    7478        </init-param>
    7579        <load-on-startup>1</load-on-startup>
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/webapp/WEB-INF/web-shib.xml

    r5479 r5508  
    9393            <param-value>eu.clarin.cmdi.virtualcollectionregistry.rest</param-value>
    9494        </init-param>
     95        <init-param>
     96            <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
     97            <param-value>eu.clarin.cmdi.virtualcollectionregistry.rest.VirtualCollectionMediaTypeFilter</param-value>
     98        </init-param>
    9599        <load-on-startup>1</load-on-startup>
    96100    </servlet>
Note: See TracChangeset for help on using the changeset viewer.