diff options
Diffstat (limited to 'plugins/com.sun.jersey.source/com/sun/jersey/api/JResponse.java')
-rw-r--r-- | plugins/com.sun.jersey.source/com/sun/jersey/api/JResponse.java | 1022 |
1 files changed, 0 insertions, 1022 deletions
diff --git a/plugins/com.sun.jersey.source/com/sun/jersey/api/JResponse.java b/plugins/com.sun.jersey.source/com/sun/jersey/api/JResponse.java deleted file mode 100644 index 90fddc233b6..00000000000 --- a/plugins/com.sun.jersey.source/com/sun/jersey/api/JResponse.java +++ /dev/null @@ -1,1022 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright (c) 2010-2011 Oracle and/or its affiliates. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common Development - * and Distribution License("CDDL") (collectively, the "License"). You - * may not use this file except in compliance with the License. You can - * obtain a copy of the License at - * http://glassfish.java.net/public/CDDL+GPL_1_1.html - * or packager/legal/LICENSE.txt. See the License for the specific - * language governing permissions and limitations under the License. - * - * When distributing the software, include this License Header Notice in each - * file and include the License file at packager/legal/LICENSE.txt. - * - * GPL Classpath Exception: - * Oracle designates this particular file as subject to the "Classpath" - * exception as provided by Oracle in the GPL Version 2 section of the License - * file that accompanied this code. - * - * Modifications: - * If applicable, add the following below the License Header, with the fields - * enclosed by brackets [] replaced by your own identifying information: - * "Portions Copyright [year] [name of copyright owner]" - * - * Contributor(s): - * If you wish your version of this file to be governed by only the CDDL or - * only the GPL Version 2, indicate your decision by adding "[Contributor] - * elects to include this software in this distribution under the [CDDL or GPL - * Version 2] license." If you don't indicate a single choice of license, a - * recipient has the option to distribute your version of this file under - * either the CDDL, the GPL Version 2 or to extend the choice of license to - * its licensees as provided above. However, if you add GPL Version 2 code - * and therefore, elected the GPL Version 2 license, then the option applies - * only if the new code is made subject to such option by the copyright - * holder. - */ -package com.sun.jersey.api; - -import com.sun.jersey.core.header.OutBoundHeaders; -import com.sun.jersey.core.spi.factory.ResponseImpl; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.net.URI; -import java.util.Date; -import java.util.List; -import java.util.Locale; -import javax.ws.rs.core.CacheControl; -import javax.ws.rs.core.EntityTag; -import javax.ws.rs.core.GenericEntity; -import javax.ws.rs.core.HttpHeaders; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.NewCookie; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import javax.ws.rs.core.Response.StatusType; -import javax.ws.rs.core.UriBuilder; -import javax.ws.rs.core.Variant; - -/** - * Defines the contract between a returned instance and the runtime when - * an application needs to provide metadata to the runtime. - * <p> - * JResponse is a type safe alternative to {@link Response} that preserves the - * type information of response entity thus it is not necessary to utilize - * {@link GenericEntity}. It provides equivalent functionality to - * {@link Response}. - * <p> - * JResponse may be extended in combination with {@link AJResponseBuilder} - * specialization when building responses. - * <p> - * Several methods have parameters of type URI, {@link UriBuilder} provides - * convenient methods to create such values as does - * {@link <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/URI.html#create(java.lang.String)">URI.create()</a>}. - * - * @param <E> The entity type - * @see JResponseBuilder - * @see Response - * @author Paul.Sandoz@Sun.Com - */ -public class JResponse<E> { - private final StatusType statusType; - - private final E entity; - - private final OutBoundHeaders headers; - - /** - * Construct given a status type, entity and metadata. - * - * @param statusType the status type - * @param headers the metadata, it is the callers responsibility to copy - * the metadata if necessary. - * @param entity the entity - */ - public JResponse(StatusType statusType, OutBoundHeaders headers, E entity) { - this.statusType = statusType; - this.entity = entity; - this.headers = headers; - } - - /** - * Construct given a status, entity and metadata. - * - * @param status the status - * @param headers the metadata, it is the callers responsibility to copy - * the metadata if necessary. - * @param entity the entity - */ - public JResponse(int status, OutBoundHeaders headers, E entity) { - this(ResponseImpl.toStatusType(status), headers, entity); - } - - /** - * Construct a shallow copy. The metadata map will be copied but not the - * key/value references. - * - * @param that the JResponse to copy from. - */ - public JResponse(JResponse<E> that) { - this(that.statusType, - that.headers != null ? new OutBoundHeaders(that.headers) : null, - that.entity); - } - - /** - * Construct from a {@link AJResponseBuilder}. - * - * @param b the builder. - */ - protected JResponse(AJResponseBuilder<E, ?> b) { - this.statusType = b.getStatusType(); - this.entity = b.getEntity(); - this.headers = b.getMetadata(); - } - - /** - * Convert to a {@link Response} compatible instance. - * - * @return the {@link Response} compatible instance. - */ - public JResponseAsResponse toResponse() { - return new JResponseAsResponse(this); - } - - /** - * Convert to a {@link Response} compatible instance. - * - * @param type the entity type - * @return the {@link Response} compatible instance. - */ - public JResponseAsResponse toResponse(Type type) { - return new JResponseAsResponse(this, type); - } - - /** - * Get the status type associated with the response. - * - * @return the response status type. - */ - public StatusType getStatusType() { - return statusType; - } - - /** - * Get the status code associated with the response. - * - * @return the response status code. - */ - public int getStatus() { - return statusType.getStatusCode(); - } - - /** - * Get metadata associated with the response as a map. The returned map - * may be subsequently modified by the JAX-RS runtime. Values will be - * serialized using a {@link javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate} - * if one is available via - * {@link javax.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} - * for the class of the value or using the values {@code toString} method if a - * header delegate is not available. - * - * @return response metadata as a map - */ - public OutBoundHeaders getMetadata() { - return headers; - } - - /** - * Get the response entity. The response will be serialized using a - * MessageBodyWriter for the class and type the entity <code>E</code>. - * - * @return the response entity. - * @see javax.ws.rs.ext.MessageBodyWriter - */ - public E getEntity() { - return entity; - } - - /** - * Get the type of the entity. - * - * @return the type of the entity. - */ - public Type getType() { - return getSuperclassTypeParameter(getClass()); - } - - private static Type getSuperclassTypeParameter(Class<?> subclass) { - Type superclass = subclass.getGenericSuperclass(); - if (!(superclass instanceof ParameterizedType)) { - return Object.class; - } - ParameterizedType parameterized = (ParameterizedType) superclass; - return parameterized.getActualTypeArguments()[0]; - } - - - /** - * Create a new {@link JResponseBuilder} by performing a shallow copy of an - * existing {@link Response}. The returned builder has its own metadata map but - * entries are simply references to the keys and values contained in the - * supplied Response metadata map. - * - * @param <E> The entity type - * @param response a Response from which the status code, entity and metadata - * will be copied - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> fromResponse(Response response) { - JResponseBuilder b = status(response.getStatus()); - b.entity(response.getEntity()); - for (String headerName: response.getMetadata().keySet()) { - List<Object> headerValues = response.getMetadata().get(headerName); - for (Object headerValue: headerValues) { - b.header(headerName, headerValue); - } - } - return b; - } - - /** - * Create a new {@link JResponseBuilder} by performing a shallow copy of an - * existing {@link JResponse}. The returned builder has its own metadata map but - * entries are simply references to the keys and values contained in the - * supplied Response metadata map. - * - * @param <E> The entity type - * @param response a JResponse from which the status code, entity and metadata - * will be copied - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> fromResponse(JResponse<E> response) { - JResponseBuilder<E> b = status(response.getStatus()); - b.entity(response.getEntity()); - for (String headerName: response.getMetadata().keySet()) { - List<Object> headerValues = response.getMetadata().get(headerName); - for (Object headerValue: headerValues) { - b.header(headerName, headerValue); - } - } - return b; - } - - /** - * Create a new {@link JResponseBuilder} with the supplied status. - * - * @param <E> The entity type - * @param status the response status - * @return a new JResponseBuilder - * @throws IllegalArgumentException if status is null - */ - public static <E> JResponseBuilder<E> status(StatusType status) { - JResponseBuilder<E> b = new JResponseBuilder<E>(); - b.status(status); - return b; - } - - /** - * Create a new {@link JResponseBuilder} with the supplied status. - * - * @param <E> The entity type - * @param status the response status - * @return a new JResponseBuilder - * @throws IllegalArgumentException if status is null - */ - public static <E> JResponseBuilder<E> status(Response.Status status) { - return status((StatusType)status); - } - - /** - * Create a new {@link JResponseBuilder} with the supplied status. - * - * @param <E> The entity type - * @param status the response status - * @return a new JResponseBuilder - * @throws IllegalArgumentException if status is less than 100 or greater - * than 599. - */ - public static <E> JResponseBuilder<E> status(int status) { - JResponseBuilder<E> b = new JResponseBuilder<E>(); - b.status(status); - return b; - } - - /** - * Create a new {@link JResponseBuilder} with an OK status. - * - * @param <E> The entity type - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> ok() { - JResponseBuilder b = status(Status.OK); - return b; - } - - /** - * Create a new {@link JResponseBuilder} that contains a representation. - * - * @param <E> The entity type - * @param entity the representation entity data - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> ok(E entity) { - JResponseBuilder<E> b = ok(); - b.entity(entity); - return b; - } - - /** - * Create a new {@link JResponseBuilder} that contains a representation. - * - * @param <E> The entity type - * @param entity the representation entity data - * @param type the media type of the entity - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> ok(E entity, MediaType type) { - JResponseBuilder<E> b = ok(); - b.entity(entity); - b.type(type); - return b; - } - - /** - * Create a new {@link JResponseBuilder} that contains a representation. - * - * @param <E> The entity type - * @param entity the representation entity data - * @param type the media type of the entity - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> ok(E entity, String type) { - JResponseBuilder<E> b = ok(); - b.entity(entity); - b.type(type); - return b; - } - - /** - * Create a new {@link JResponseBuilder} that contains a representation. - * - * @param <E> The entity type - * @param entity the representation entity data - * @param variant representation metadata - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> ok(E entity, Variant variant) { - JResponseBuilder<E> b = ok(); - b.entity(entity); - b.variant(variant); - return b; - } - - /** - * Create a new {@link JResponseBuilder} with an server error status. - * - * @param <E> The entity type - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> serverError() { - JResponseBuilder<E> b = status(Status.INTERNAL_SERVER_ERROR); - return b; - } - - /** - * Create a new {@link JResponseBuilder} for a created resource, set the - * location header using the supplied value. - * - * @param <E> The entity type - * @param location the URI of the new resource. If a relative URI is - * supplied it will be converted into an absolute URI by resolving it - * relative to the request URI (see {@link UriInfo#getRequestUri}). - * @return a new JResponseBuilder - * @throws java.lang.IllegalArgumentException if location is null - */ - public static <E> JResponseBuilder<E> created(URI location) { - JResponseBuilder<E> b = JResponse.<E>status(Status.CREATED).location(location); - return b; - } - - /** - * Create a new {@link JResponseBuilder} for an empty response. - * - * @param <E> The entity type - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> noContent() { - JResponseBuilder<E> b = status(Status.NO_CONTENT); - return b; - } - - /** - * Create a new {@link JResponseBuilder} with a not-modified status. - * - * @param <E> The entity type - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> notModified() { - JResponseBuilder<E> b = status(Status.NOT_MODIFIED); - return b; - } - - /** - * Create a new {@link JResponseBuilder} with a not-modified status. - * - * @param <E> The entity type - * @param tag a tag for the unmodified entity - * @return a new JResponseBuilder - * @throws java.lang.IllegalArgumentException if tag is null - */ - public static <E> JResponseBuilder<E> notModified(EntityTag tag) { - JResponseBuilder<E> b = notModified(); - b.tag(tag); - return b; - } - - /** - * Create a new {@link JResponseBuilder} with a not-modified status - * and a strong entity tag. This is a shortcut - * for <code>notModified(new EntityTag(<i>value</i>))</code>. - * - * @param <E> The entity type - * @param tag the string content of a strong entity tag. The JAX-RS - * runtime will quote the supplied value when creating the header. - * @return a new JResponseBuilder - * @throws java.lang.IllegalArgumentException if tag is null - */ - public static <E> JResponseBuilder<E> notModified(String tag) { - JResponseBuilder b = notModified(); - b.tag(tag); - return b; - } - - /** - * Create a new {@link JResponseBuilder} for a redirection. Used in the - * redirect-after-POST (aka POST/redirect/GET) pattern. - * - * @param <E> The entity type - * @param location the redirection URI. If a relative URI is - * supplied it will be converted into an absolute URI by resolving it - * relative to the base URI of the application (see - * {@link UriInfo#getBaseUri}). - * @return a new JResponseBuilder - * @throws java.lang.IllegalArgumentException if location is null - */ - public static <E> JResponseBuilder<E> seeOther(URI location) { - JResponseBuilder<E> b = JResponse.<E>status(Status.SEE_OTHER).location(location); - return b; - } - - /** - * Create a new {@link JResponseBuilder} for a temporary redirection. - * - * @param <E> The entity type - * @param location the redirection URI. If a relative URI is - * supplied it will be converted into an absolute URI by resolving it - * relative to the base URI of the application (see - * {@link UriInfo#getBaseUri}). - * @return a new JResponseBuilder - * @throws java.lang.IllegalArgumentException if location is null - */ - public static <E> JResponseBuilder<E> temporaryRedirect(URI location) { - JResponseBuilder<E> b = JResponse.<E>status(Status.TEMPORARY_REDIRECT).location(location); - return b; - } - - /** - * Create a new {@link JResponseBuilder} for a not acceptable response. - * - * @param <E> The entity type - * @param variants list of variants that were available, a null value is - * equivalent to an empty list. - * @return a new JResponseBuilder - */ - public static <E> JResponseBuilder<E> notAcceptable(List<Variant> variants) { - JResponseBuilder<E> b = JResponse.<E>status(Status.NOT_ACCEPTABLE).variants(variants); - return b; - } - - /** - * A class used to build {@link JResponse} instances that contain metadata - * instead of or in addition to an entity. An initial instance may be - * obtained via static methods of the {@link JResponse} class, instance - * methods provide the ability to set metadata. E.g. to create a response - * that indicates the creation of a new resource: - * <pre>@POST - * JResponse addWidget(...) { - * Widget w = ... - * URI widgetId = UriBuilder.fromResource(Widget.class)... - * return JResponse.created(widgetId).build(); - * }</pre> - * <p> - * Several methods have parameters of type URI, {@link UriBuilder} - * provides convenient methods to create such values as does - * <code>URI.create()</code>. - * <p> - * Where multiple variants of the same method are provided, the type of - * the supplied parameter is retained in the metadata of the built - * {@link JResponse}. - * - * @param <E> The entity type - */ - public static final class JResponseBuilder<E> extends AJResponseBuilder<E, JResponseBuilder<E>> { - /** - * Default constructor. - */ - public JResponseBuilder() {} - - /** - * Construct a shallow copy. The metadata map will be copied but not the - * key/value references. - * - * @param that the JResponseBuilder to copy from. - */ - public JResponseBuilder(JResponseBuilder<E> that) { - super(that); - } - - /** - * Create a shallow copy preserving state. The metadata map will be - * copied but not the key/value references. - * - * @return the copy. - */ - @Override - public JResponseBuilder<E> clone() { - return new JResponseBuilder<E>(this); - } - - /** - * Create a {@link JResponse} instance from the current JResponseBuilder. - * The builder is reset to a blank state equivalent to calling - * {@link JResponse#ok() }. - * - * @return a JResponse instance - */ - public JResponse<E> build() { - JResponse<E> r = new JResponse<E>(this); - reset(); - return r; - } - } - - /** - * An abstract response builder that may be utilized to extend - * response building and the construction of {@link JResponse} - * instances. - * - * @param <E> The entity type - * @param <B> The builder type - */ - public static abstract class AJResponseBuilder<E, B extends AJResponseBuilder> { - /** - * The status type. - */ - protected StatusType statusType = Status.NO_CONTENT; - - /** - * The response metadata. - */ - protected OutBoundHeaders headers; - - /** - * The entity. - */ - protected E entity; - - /** - * Default constructor. - */ - protected AJResponseBuilder() {} - - /** - * Construct a shallow copy. The metadata map will be copied but not the - * key/value references. - * - * @param that the AJResponseBuilder to copy from. - */ - protected AJResponseBuilder(AJResponseBuilder<E, ?> that) { - this.statusType = that.statusType; - this.entity = that.entity; - if (that.headers != null) { - this.headers = new OutBoundHeaders(that.headers); - } else { - this.headers = null; - } - } - - /** - * Reset to the default state. - */ - protected void reset() { - statusType = Status.NO_CONTENT; - entity = null; - headers = null; - } - - /** - * Get the status type associated with the response. - * - * @return the response status type. - */ - protected StatusType getStatusType() { - return statusType; - } - - /** - * Get the status code associated with the response. - * - * @return the response status code. - */ - protected int getStatus() { - return statusType.getStatusCode(); - } - - /** - * Get the metadata associated with the response. - * - * @return response metadata as a map - */ - protected OutBoundHeaders getMetadata() { - if (headers == null) - headers = new OutBoundHeaders(); - return headers; - } - - /** - * Get the response entity. - * - * @return the response entity. - */ - protected E getEntity() { - return entity; - } - - /** - * Set the status. - * - * @param status the response status - * @return the updated instance - * @throws IllegalArgumentException if status is less than 100 or greater - * than 599. - */ - public B status(int status) { - return status(ResponseImpl.toStatusType(status)); - } - - /** - * Set the status. - * - * @param status the response status - * @return the updated instance. - * @throws IllegalArgumentException if status is null - */ - public B status(StatusType status) { - if (status == null) - throw new IllegalArgumentException(); - this.statusType = status; - return (B)this; - }; - - /** - * Set the status. - * - * @param status the response status - * @return the updated instance. - * @throws IllegalArgumentException if status is null - */ - public B status(Status status) { - return status((StatusType)status); - }; - - /** - * Set the entity. - * - * @param entity the response entity - * @return the updated instance - */ - public B entity(E entity) { - this.entity = entity; - return (B)this; - } - - /** - * Set the response media type. - * - * @param type the media type of the response entity, if null any - * existing value for type will be removed - * @return the updated instance - */ - public B type(MediaType type) { - headerSingle(HttpHeaders.CONTENT_TYPE, type); - return (B)this; - } - - /** - * Set the response media type. - * - * @param type the media type of the response entity, if null any - * existing value for type will be removed - * @return the updated instance - * @throws IllegalArgumentException if type cannot be parsed - */ - public B type(String type) { - return type(type == null ? null : MediaType.valueOf(type)); - } - - /** - * Set representation metadata. Equivalent to setting the values of - * content type, content language, and content encoding separately using - * the values of the variant properties. - * - * @param variant metadata of the response entity, a null value is - * equivalent to a variant with all null properties. - * @return the updated instance - */ - public B variant(Variant variant) { - if (variant == null) { - type((MediaType)null); - language((String)null); - encoding(null); - return (B)this; - } - - type(variant.getMediaType()); - // TODO set charset - language(variant.getLanguage()); - encoding(variant.getEncoding()); - - return (B)this; - } - - /** - * Add a Vary header that lists the available variants. - * - * @param variants a list of available representation variants, a null - * value will remove an existing value for vary. - * @return the updated instance - */ - public B variants(List<Variant> variants) { - if (variants == null) { - header(HttpHeaders.VARY, null); - return (B)this; - } - - if (variants.isEmpty()) - return (B)this; - - MediaType accept = variants.get(0).getMediaType(); - boolean vAccept = false; - - Locale acceptLanguage = variants.get(0).getLanguage(); - boolean vAcceptLanguage = false; - - String acceptEncoding = variants.get(0).getEncoding(); - boolean vAcceptEncoding = false; - - for (Variant v : variants) { - vAccept |= !vAccept && vary(v.getMediaType(), accept); - vAcceptLanguage |= !vAcceptLanguage && vary(v.getLanguage(), acceptLanguage); - vAcceptEncoding |= !vAcceptEncoding && vary(v.getEncoding(), acceptEncoding); - } - - StringBuilder vary = new StringBuilder(); - append(vary, vAccept, HttpHeaders.ACCEPT); - append(vary, vAcceptLanguage, HttpHeaders.ACCEPT_LANGUAGE); - append(vary, vAcceptEncoding, HttpHeaders.ACCEPT_ENCODING); - - if (vary.length() > 0) - header(HttpHeaders.VARY, vary.toString()); - return (B)this; - } - - private boolean vary(MediaType v, MediaType vary) { - return v != null && !v.equals(vary); - } - - private boolean vary(Locale v, Locale vary) { - return v != null && !v.equals(vary); - } - - private boolean vary(String v, String vary) { - return v != null && !v.equalsIgnoreCase(vary); - } - - private void append(StringBuilder sb, boolean v, String s) { - if (v) { - if (sb.length() > 0) - sb.append(','); - sb.append(s); - } - } - - /** - * Set the language. - * - * @param language the language of the response entity, if null any - * existing value for language will be removed - * @return the updated instance - */ - public B language(String language) { - headerSingle(HttpHeaders.CONTENT_LANGUAGE, language); - return (B)this; - } - - /** - * Set the language. - * - * @param language the language of the response entity, if null any - * existing value for type will be removed - * @return the updated instance - */ - public B language(Locale language) { - headerSingle(HttpHeaders.CONTENT_LANGUAGE, language); - return (B)this; - } - - /** - * Set the location. - * - * @param location the location. If a relative URI is - * supplied it will be converted into an absolute URI by resolving it - * relative to the base URI of the application (see - * {@link UriInfo#getBaseUri}). If null any - * existing value for location will be removed. - * @return the updated instance. - */ - public B location(URI location) { - headerSingle(HttpHeaders.LOCATION, location); - return (B)this; - } - - /** - * Set the content location. - * - * @param location the content location. Relative or absolute URIs - * may be used for the value of content location. If null any - * existing value for content location will be removed. - * @return the updated instance - */ - public B contentLocation(URI location) { - headerSingle(HttpHeaders.CONTENT_LOCATION, location); - return (B)this; - } - - /** - * Set the content encoding. - * - * @param encoding the content encoding of the response entity, if null - * any existing value for type will be removed - * @return the updated instance - */ - public B encoding(String encoding) { - headerSingle(HttpHeaders.CONTENT_ENCODING, encoding); - return (B)this; - } - - /** - * Set an entity tag. - * - * @param tag the entity tag, if null any - * existing entity tag value will be removed. - * @return the updated instance - */ - public B tag(EntityTag tag) { - headerSingle(HttpHeaders.ETAG, tag); - return (B)this; - } - - /** - * Set a strong entity tag. This is a shortcut - * for <code>tag(new EntityTag(<i>value</i>))</code>. - * - * @param tag the string content of a strong entity tag. The JAX-RS - * runtime will quote the supplied value when creating the header. If - * null any existing entity tag value will be removed. - * @return the updated instance - */ - public B tag(String tag) { - return tag(tag == null ? null : new EntityTag(tag)); - } - - /** - * Set the last modified date. - * - * @param lastModified the last modified date, if null any existing - * last modified value will be removed. - * @return the updated instance - */ - public B lastModified(Date lastModified) { - headerSingle(HttpHeaders.LAST_MODIFIED, lastModified); - return (B)this; - } - - /** - * Set the cache control. - * - * @param cacheControl the cache control directives, if null removes any - * existing cache control directives. - * @return the updated instance - */ - public B cacheControl(CacheControl cacheControl) { - headerSingle(HttpHeaders.CACHE_CONTROL, cacheControl); - return (B)this; - } - - /** - * Set the expires date. - * - * @param expires the expiration date, if null removes any existing - * expires value. - * @return the updated instance - */ - public B expires(Date expires) { - headerSingle(HttpHeaders.EXPIRES, expires); - return (B)this; - } - - /** - * Add cookies. - * - * @param cookies new cookies that will accompany the response. A null - * value will remove all cookies, including those added via the - * {@link #header(java.lang.String, java.lang.Object)} method. - * @return the updated instance - */ - public B cookie(NewCookie... cookies) { - if (cookies != null) { - for (NewCookie cookie : cookies) - header(HttpHeaders.SET_COOKIE, cookie); - } else { - header(HttpHeaders.SET_COOKIE, null); - } - return (B)this; - } - - /** - * Add a header. - * - * @param name the name of the header - * @param value the value of the header, the header will be serialized - * using a {@link javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate} if - * one is available via - * {@link javax.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} - * for the class of {@code value} or using its {@code toString} method if a - * header delegate is not available. If {@code value} is null then all - * current headers of the same name will be removed. - * @return the updated instance. - */ - public B header(String name, Object value) { - return header(name, value, false); - } - - /** - * Add a header or replace an existing header. - * - * @param name the name of the header - * @param value the value of the header, the header will be serialized - * using a {@link javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate} if - * one is available via - * {@link javax.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} - * for the class of {@code value} or using its {@code toString} method if a - * header delegate is not available. If {@code value} is null then all - * current headers of the same name will be removed. - * @return the updated instance. - */ - public B headerSingle(String name, Object value) { - return header(name, value, true); - } - - /** - * Add a header. - * - * @param name the name of the header - * @param value the value of the header, the header will be serialized - * using a {@link javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate} if - * one is available via - * {@link javax.ws.rs.ext.RuntimeDelegate#createHeaderDelegate(java.lang.Class)} - * for the class of {@code value} or using its {@code toString} method if a - * header delegate is not available. If {@code value} is null then all - * current headers of the same name will be removed. - * @param single if true then replace the header if it exists, otherwise - * add the header. - * @return the updated instance. - */ - public B header(String name, Object value, boolean single) { - if (value != null) { - if (single) { - getMetadata().putSingle(name, value); - } else { - getMetadata().add(name, value); - } - } else { - getMetadata().remove(name); - } - return (B)this; - } - } -}
\ No newline at end of file |