Changeset 5510


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

Created message body writers for virtual collection; CMDI, XML and JSON are now returned via a single method in the resource and CMDI is default.
Refs #604

Location:
VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest
Files:
2 added
4 edited

Legend:

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

    r5417 r5510  
    9191            public void write(OutputStream output) throws IOException,
    9292                    WebApplicationException {
    93                 final VirtualCollectionMarshaller.Format format = RestUtils.getOutputFormat(headers);
     93                final VirtualCollectionMarshaller.Format format = RestUtils.getOutputFormat(headers.getAcceptableMediaTypes());
    9494                marshaller.marshal(output, format, vcs);
    9595                output.close();
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/RestUtils.java

    r5416 r5510  
    22
    33import eu.clarin.cmdi.virtualcollectionregistry.service.VirtualCollectionMarshaller.Format;
     4import java.util.List;
    45import javax.ws.rs.core.HttpHeaders;
    56import javax.ws.rs.core.MediaType;
     
    4748     * @see HttpHeaders#getAcceptableMediaTypes()
    4849     */
    49     public static Format getOutputFormat(HttpHeaders headers) {
    50         for (MediaType type : headers.getAcceptableMediaTypes()) {
     50    public static Format getOutputFormat(List<MediaType> mediaTypes) {
     51        for (MediaType type : mediaTypes) {
    5152            Format format = getMediaType(type);
    5253            if (format != null) {
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/VirtualCollectionResource.java

    r5508 r5510  
    3939 * with it.
    4040 *
    41  * FIXME: make this default to {@link #getVirtualCollectionCmdi() } instead
    42  * of XML.
    43  * 
     41 * FIXME: make this default to {@link #getVirtualCollectionCmdi() } instead of
     42 * XML.
     43 *
    4444 * @author twagoo
    4545 */
    46 @Produces(VirtualCollectionResource.MediaTypes.CMDI) 
     46@Produces(VirtualCollectionResource.MediaTypes.CMDI)
    4747public final class VirtualCollectionResource {
    4848
    4949    public static class MediaTypes {
     50
    5051        public static final String CMDI = "application/x-cmdi+xml";
    5152        public static final MediaType CMDI_TYPE = new MediaType("application", "x-cmdi+xml");
    5253    }
    53    
     54
    5455    @InjectParam
    5556    private VirtualCollectionRegistry registry;
     
    8687        this.id = id;
    8788    }
    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();
    114     }
    11589
    11690    /**
     
    12397     */
    12498    @GET
    125     @Produces({MediaType.TEXT_XML,
     99    @Produces({VirtualCollectionResource.MediaTypes.CMDI,
     100        MediaType.TEXT_XML,
    126101        MediaType.APPLICATION_XML,
    127102        MediaType.APPLICATION_JSON})
     
    129104            throws VirtualCollectionRegistryException {
    130105        final VirtualCollection vc = registry.retrieveVirtualCollection(id);
    131         // XXX: what about non-public VCs?
    132         StreamingOutput writer = new StreamingOutput() {
    133             @Override
    134             public void write(OutputStream output) throws IOException,
    135                     WebApplicationException {
    136                 final VirtualCollectionMarshaller.Format format = RestUtils.getOutputFormat(headers);
    137                 marshaller.marshal(output, format, vc);
    138                 output.close();
    139             }
    140         };
    141         return Response.ok(writer).build();
     106        return Response.ok(vc).build();
     107    }
     108
     109    /**
     110     * Redirects the client to the VC's details page in the Wicket frontend
     111     *
     112     * @return
     113     * @throws VirtualCollectionRegistryException
     114     */
     115    @GET
     116    @Produces({MediaType.TEXT_HTML})
     117    public Response getVirtualCollectionDetailsRedirect()
     118            throws VirtualCollectionRegistryException {
     119        final UriBuilder pathBuilder = uriInfo.getBaseUriBuilder().path("../app/details/{arg1}");
     120        final URI detailsUri = pathBuilder.build(id);
     121        return Response.seeOther(detailsUri).build();
    142122    }
    143123
     
    208188
    209189    /**
    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();
    221     }
    222 
    223     /**
    224190     * The publication state of the virtual collection referenced by the URI
    225191     *
  • VirtualCollectionRegistry/trunk/VirtualCollectionRegistry/src/main/java/eu/clarin/cmdi/virtualcollectionregistry/rest/VirtualCollectionsResource.java

    r5417 r5510  
    8080            public void write(OutputStream output) throws IOException,
    8181                    WebApplicationException {
    82                 final Format format = RestUtils.getOutputFormat(headers);
     82                final Format format = RestUtils.getOutputFormat(headers.getAcceptableMediaTypes());
    8383                marshaller.marshal(output, format, vcs);
    8484                output.close();
Note: See TracChangeset for help on using the changeset viewer.