Changeset 5511


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

Added some logic to fall back to another response type if CMDI is not available (i.e. for unpublished vc's)
Refs #604

File:
1 edited

Legend:

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

    r5510 r5511  
    22
    33import com.sun.jersey.api.core.InjectParam;
    4 import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionNotFoundException;
    54import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistry;
    65import eu.clarin.cmdi.virtualcollectionregistry.VirtualCollectionRegistryException;
     
    109import java.io.IOException;
    1110import java.io.InputStream;
    12 import java.io.OutputStream;
    1311import java.net.URI;
    1412import java.security.Principal;
     13import java.util.List;
    1514import javax.ws.rs.Consumes;
    1615import javax.ws.rs.DELETE;
     
    2120import javax.ws.rs.PathParam;
    2221import javax.ws.rs.Produces;
    23 import javax.ws.rs.WebApplicationException;
    2422import javax.ws.rs.core.Context;
    2523import javax.ws.rs.core.HttpHeaders;
    2624import javax.ws.rs.core.MediaType;
     25import javax.ws.rs.core.Request;
    2726import javax.ws.rs.core.Response;
    2827import javax.ws.rs.core.SecurityContext;
    29 import javax.ws.rs.core.StreamingOutput;
    3028import javax.ws.rs.core.UriBuilder;
    3129import javax.ws.rs.core.UriInfo;
     30import javax.ws.rs.core.Variant;
    3231
    3332/**
     
    9190     * The virtual collection referenced by the URI will be retrieved
    9291     *
     92     * @param request request object, to be injected by JAX-RS context
    9393     * @return A response containing a representation of the requested Virtual
    9494     * Collection. If the virtual collection is not found the appropriate HTTP
     
    101101        MediaType.APPLICATION_XML,
    102102        MediaType.APPLICATION_JSON})
    103     public Response getVirtualCollection()
     103    public Response getVirtualCollection(@Context Request request)
    104104            throws VirtualCollectionRegistryException {
    105105        final VirtualCollection vc = registry.retrieveVirtualCollection(id);
     106        // CMDI's should not be returned for non-public VC's, so check this...
     107        if (!vc.isPublic() || (vc.getPersistentIdentifier() == null)) {
     108            // exclude CMDI from the options and check if this is ok for request
     109            final List<Variant> variants = Variant.mediaTypes(
     110                    MediaType.TEXT_XML_TYPE,
     111                    MediaType.APPLICATION_XML_TYPE,
     112                    MediaType.APPLICATION_JSON_TYPE).add().build();
     113            final Variant selectVariant = request.selectVariant(variants);
     114            if (selectVariant != null) {
     115                // alternative option is accepted, return this
     116                return Response.ok(vc, selectVariant).build();
     117            }
     118            // else proceed anyway, will probably fail on writing CMDI body
     119        }
    106120        return Response.ok(vc).build();
    107121    }
Note: See TracChangeset for help on using the changeset viewer.