Class PartList

All Implemented Interfaces:
Serializable, Cloneable, Iterable<NameValuePair>, Collection<NameValuePair>, List<NameValuePair>, RandomAccess
Direct Known Subclasses:
PartList.Void

An simple list of HTTP parts (form-data, query-parameters, path-parameters).
Example

PartList parts = PartList .create() .append(MyPart.of("foo")) .append("Bar", ()->getDynamicValueFromSomewhere());

See Also:
See Also:
  • Constructor Details

    • PartList

      public PartList()
      Constructor.
    • PartList

      protected PartList(PartList copyFrom)
      Copy constructor.
      Parameters:
      copyFrom - The bean to copy.
  • Method Details

    • create

      public static PartList create()
      Instantiates a new part list.
      Returns:
      A new part list.
    • of

      public static PartList of(List<NameValuePair> parts)
      Creates a new PartList initialized with the specified parts.
      Parameters:
      parts - The parts to add to the list.
      Can be null.
      null entries are ignored.
      Returns:
      A new unmodifiable instance, never null.
    • of

      public static PartList of(NameValuePair... parts)
      Creates a new PartList initialized with the specified parts.
      Parameters:
      parts - The parts to add to the list.
      null entries are ignored.
      Returns:
      A new unmodifiable instance, never null.
    • ofPairs

      public static PartList ofPairs(String... pairs)
      Creates a new PartList initialized with the specified name/value pairs.
      Example

      PartList parts = PartList.ofPairs("foo", 1, "bar", true);

      Parameters:
      pairs - Initial list of pairs.
      Must be an even number of parameters representing key/value pairs.
      Returns:
      A new instance.
      Throws:
      RuntimeException - If odd number of parameters were specified.
    • copy

      public PartList copy()
      Makes a copy of this list.
      Returns:
      A new copy of this list.
    • setDefault

      Adds a collection of default parts.

      Default parts are set if they're not already in the list.

      Parameters:
      parts - The list of default parts.
      Returns:
      This object.
    • setDefault

      public PartList setDefault(NameValuePair... parts)
      Makes a copy of this list of parts and adds a collection of default parts.

      Default parts are set if they're not already in the list.

      Parameters:
      parts - The list of default parts.
      Returns:
      A new list, or the same list if the parts were empty.
    • setDefault

      public PartList setDefault(String name, Object value)
      Replaces the first occurrence of the part with the same name.
      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • setDefault

      public PartList setDefault(String name, Supplier<?> value)
      Replaces the first occurrence of the headers with the same name.
      Parameters:
      name - The header name.
      value - The header value.
      Returns:
      This object.
    • resolving

      public PartList resolving()
      Allows part values to contain SVL variables.

      Resolves variables in part values when using the following methods:

      Uses VarResolver.DEFAULT to resolve variables.

      Returns:
      This object.
    • resolving

      public PartList resolving(VarResolver varResolver)
      Allows part values to contain SVL variables.

      Resolves variables in part values when using the following methods:

      Parameters:
      varResolver - The variable resolver to use for resolving variables.
      Returns:
      This object.
    • caseInsensitive

      public PartList caseInsensitive(boolean value)
      Specifies that the parts in this list should be treated as case-sensitive.

      The default behavior is case-sensitive.

      Parameters:
      value - The new value for this setting.
      Returns:
      This object.
    • append

      public PartList append(NameValuePair value)
      Adds the specified part to the end of the parts in this list.
      Parameters:
      value - The part to add. null values are ignored.
      Returns:
      This object.
    • append

      public PartList append(String name, Object value)
      Appends the specified part to the end of this list.

      The part is added as a BasicPart.

      Parameters:
      name - The part name.
      value - The part value.
      Returns:
      This object.
    • append

      public PartList append(String name, Supplier<?> value)
      Appends the specified part to the end of this list using a value supplier.

      The part is added as a BasicPart.

      Value is re-evaluated on each call to BasicPart.getValue().

      Parameters:
      name - The part name.
      value - The part value supplier.
      Returns:
      This object.
    • append

      public PartList append(NameValuePair... values)
      Adds the specified parts to the end of the parts in this list.
      Parameters:
      values - The parts to add. null values are ignored.
      Returns:
      This object.
    • append

      public PartList append(List<NameValuePair> values)
      Adds the specified parts to the end of the parts in this list.
      Parameters:
      values - The parts to add. null values are ignored.
      Returns:
      This object.
    • prepend

      public PartList prepend(NameValuePair value)
      Adds the specified part to the beginning of the parts in this list.
      Parameters:
      value - The part to add. null values are ignored.
      Returns:
      This object.
    • prepend

      public PartList prepend(String name, Object value)
      Appends the specified part to the beginning of this list.

      The part is added as a BasicPart.

      Parameters:
      name - The part name.
      value - The part value.
      Returns:
      This object.
    • prepend

      public PartList prepend(String name, Supplier<?> value)
      Appends the specified part to the beginning of this list using a value supplier.

      The part is added as a BasicPart.

      Value is re-evaluated on each call to BasicPart.getValue().

      Parameters:
      name - The part name.
      value - The part value supplier.
      Returns:
      This object.
    • prepend

      public PartList prepend(NameValuePair... values)
      Adds the specified parts to the beginning of the parts in this list.
      Parameters:
      values - The parts to add. null values are ignored.
      Returns:
      This object.
    • prepend

      public PartList prepend(List<NameValuePair> values)
      Adds the specified parts to the beginning of the parts in this list.
      Parameters:
      values - The parts to add. null values are ignored.
      Returns:
      This object.
    • remove

      public PartList remove(NameValuePair value)
      Removes the specified part from this list.
      Parameters:
      value - The part to remove. null values are ignored.
      Returns:
      This object.
    • remove

      public PartList remove(NameValuePair... values)
      Removes the specified parts from this list.
      Parameters:
      values - The parts to remove. null values are ignored.
      Returns:
      This object.
    • remove

      public PartList remove(List<NameValuePair> values)
      Removes the specified parts from this list.
      Parameters:
      values - The parts to remove. null values are ignored.
      Returns:
      This object.
    • remove

      public PartList remove(String name)
      Removes the part with the specified name from this list.
      Parameters:
      name - The part name.
      Returns:
      This object.
    • remove

      public PartList remove(String... names)
      Removes the part with the specified name from this list.
      Parameters:
      names - The part name.
      Returns:
      This object.
    • set

      public PartList set(NameValuePair value)
      Adds or replaces the part(s) with the same name.

      If no part with the same name is found the given part is added to the end of the list.

      Parameters:
      value - The part to replace. null values are ignored.
      Returns:
      This object.
    • set

      public PartList set(NameValuePair... values)
      Adds or replaces the part(s) with the same name.

      If no part with the same name is found the given part is added to the end of the list.

      Parameters:
      values - The part to replace. null values are ignored.
      Returns:
      This object.
    • set

      public PartList set(String name, Object value)
      Replaces the first occurrence of the parts with the same name.
      Parameters:
      name - The part name.
      value - The part value.
      Returns:
      This object.
    • set

      public PartList set(String name, Supplier<?> value)
      Replaces the first occurrence of the parts with the same name.
      Parameters:
      name - The part name.
      value - The part value.
      Returns:
      This object.
    • set

      public PartList set(List<NameValuePair> values)
      Replaces the first occurrence of the parts with the same name.

      If no part with the same name is found the given part is added to the end of the list.

      Parameters:
      values - The parts to replace. null values are ignored.
      Returns:
      This object.
    • getFirst

      Gets the first part with the given name.

      Part name comparison is case sensitive by default.

      Parameters:
      name - The part name.
      Returns:
      The first matching part, or Optional.empty() if not found.
    • getLast

      Gets the last part with the given name.

      Part name comparison is case sensitive by default.

      Parameters:
      name - The part name.
      Returns:
      The last matching part, or Optional.empty() if not found.
    • get

      public Optional<NameValuePair> get(String name)
      Gets a part representing all of the part values with the given name.

      If more that one part with the given name exists the values will be combined with ", " as per RFC 2616 Section 4.2.

      Parameters:
      name - The part name.
      Returns:
      A part with a condensed value, or Optional.empty() if no parts by the given name are present
    • get

      public <T> Optional<T> get(String name, Class<T> type)
      Gets a part representing all of the part values with the given name.

      If more that one part with the given name exists the values will be combined with ", " as per RFC 2616 Section 4.2.

      The implementation class must have a public constructor taking in one of the following argument lists:

      • X(String value)
      • X(Object value)
      • X(String name, String value)
      • X(String name, Object value)
      Example

      BasicIntegerPart age = partList.get("age", BasicIntegerPart.class);

      Type Parameters:
      T - The part implementation class.
      Parameters:
      name - The part name.
      type - The part implementation class.
      Returns:
      A part with a condensed value or null if no parts by the given name are present
    • get

      public <T> Optional<T> get(Class<T> type)
      Gets a part representing all of the part values with the given name.

      Same as get(String, Class) but the part name is pulled from the name or value attribute of the FormData/Query/Path annotation.

      Example

      Age age = partList.get(Age.class);

      Type Parameters:
      T - The part implementation class.
      Parameters:
      type - The part implementation class.
      Returns:
      A part with a condensed value or null if no parts by the given name are present
    • getAll

      public NameValuePair[] getAll()
      Gets all of the parts.

      The returned array maintains the relative order in which the parts were added. Each call creates a new array not backed by this list.

      As a general rule, it's more efficient to use the other methods with consumers to get parts.

      Returns:
      An array containing all parts, never null.
    • getAll

      public NameValuePair[] getAll(String name)
      Gets all of the parts with the given name.

      The returned array maintains the relative order in which the parts were added. Part name comparison is case sensitive by default. Parts with null values are ignored. Each call creates a new array not backed by this list.

      As a general rule, it's more efficient to use the other methods with consumers to get parts.

      Parameters:
      name - The part name.
      Returns:
      An array containing all matching parts, never null.
    • forEachValue

      Performs an action on the values for all matching parts in this list.
      Parameters:
      filter - A predicate to apply to each element to determine if it should be included. Can be null.
      action - An action to perform on each element.
      Returns:
      This object.
    • forEachValue

      public PartList forEachValue(String name, Consumer<String> action)
      Performs an action on the values of all matching parts in this list.
      Parameters:
      name - The part name.
      action - An action to perform on each element.
      Returns:
      This object.
    • getValues

      public String[] getValues(String name)
      Returns all the string values for all parts with the specified name.
      Parameters:
      name - The part name.
      Returns:
      An array containing all values. Never null.
    • contains

      public boolean contains(String name)
      Tests if parts with the given name are contained within this list.

      Part name comparison is case insensitive.

      Parameters:
      name - The part name.
      Returns:
      true if at least one part with the name is present.
    • partIterator

      Returns an iterator over this list of parts.
      Returns:
      A new iterator over this list of parts.
    • partIterator

      Returns an iterator over the parts with a given name in this list.
      Parameters:
      name - The name of the parts over which to iterate, or null for all parts
      Returns:
      A new iterator over the matching parts in this list.
    • forEach

      public PartList forEach(String name, Consumer<NameValuePair> action)
      Performs an action on all parts in this list with the specified name.

      This is the preferred method for iterating over parts as it does not involve creation or copy of lists/arrays.

      Parameters:
      name - The parts name.
      action - An action to perform on each element.
      Returns:
      This object.
    • forEach

      Performs an action on all the matching parts in this list.

      This is the preferred method for iterating over parts as it does not involve creation or copy of lists/arrays.

      Parameters:
      filter - A predicate to apply to each element to determine if it should be included. Can be null.
      action - An action to perform on each element.
      Returns:
      This object.
    • stream

      Returns a stream of the parts in this list with the specified name.

      This does not involve a copy of the underlying array of NameValuePair objects so should perform well.

      Parameters:
      name - The part name.
      Returns:
      This object.
    • toString

      public String toString()
      Returns this list as a URL-encoded custom query.
      Overrides:
      toString in class AbstractCollection<NameValuePair>
    • setUnmodifiable

      Description copied from class: ControlledArrayList
      Specifies whether this bean should be unmodifiable.

      When enabled, attempting to set any properties on this bean will cause an UnsupportedOperationException.

      Overrides:
      setUnmodifiable in class ControlledArrayList<NameValuePair>
      Returns:
      This object.