package io.craft.atom.protocol.http.model; import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Map; import lombok.Getter; import lombok.Setter; import lombok.ToString; /** * One element of an HTTP {@link HttpHeader header} value consisting of a name / * value pair and a number of optional name / value parameters. * <p> * Some HTTP headers (such as the set-cookie header) have values that can be * decomposed into multiple elements. Such headers must be in the following * form: * </p> * * <pre> * header = [ element ] *( "," [ element ] ) * element = name [ "=" [ value ] ] *( ";" [ param ] ) * param = name [ "=" [ value ] ] * * name = token * value = ( token | quoted-string ) * * token = 1*<any char except "=", ",", ";", <"> and white space> * quoted-string = <"> *( text | quoted-char ) <"> * text = any char except <"> * quoted-char = "\" char * </pre> * <p> * Any amount of white space is allowed between any part of the header, element * or param and is ignored. A missing value in any element or param will be * stored as the empty {@link String}; if the "=" is also missing * <var>null</var> will be stored instead. * * @author mindwind * @version 1.0, Feb 1, 2013 * @see HttpHeader */ @ToString(of = { "name", "value", "params" }) public class HttpHeaderValueElement implements Serializable { private static final long serialVersionUID = -5552007949156024715L; @Getter @Setter private String name ; @Getter @Setter private String value ; @Getter @Setter private Map<String, String> params = new LinkedHashMap<String, String>(); // ~ ----------------------------------------------------------------------------------------------------------- public HttpHeaderValueElement() { super(); } public HttpHeaderValueElement(String name, String value, Map<String, String> params) { this.name = name; this.value = value; this.params = params; } // ~ ----------------------------------------------------------------------------------------------------------- /** * Add a name value pair parameter, if exists replace it. * * @param name * @param value */ public void addParam(String name, String value) { params.put(name, value); } /** * Get param value by name. * * @param name * @return param value */ public String getParamValue(String name) { return params.get(name); } }