All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bitbucket.jsoup.form.Form Maven / Gradle / Ivy

package org.bitbucket.jsoup.form;

import javax.annotation.Nonnull;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.StringJoiner;

import static java.util.Collections.emptyMap;
import static org.bitbucket.javatek.require.ObjectRequires.requireNonNull;

/**
 *
 */
public final class Form implements Iterable {
  private final Map fields;

  private Form(Map fields) {
    this.fields = requireNonNull(fields);
  }

  public Form() {
    this(emptyMap());
  }

  public Form with(@Nonnull String field, @Nonnull String... values) {
    return with(new Field(field, Arrays.asList(values)));
  }

  public Form with(@Nonnull Field field) {
    Map newFields = new LinkedHashMap<>(fields);
    newFields.put(field.name(), field);
    return new Form(newFields);
  }

  @Nonnull
  @Override
  public Iterator iterator() {
    return fields.values().iterator();
  }

  @Override
  public String toString() {
    StringJoiner joiner = new StringJoiner(", ");
    for (Field field : this) {
      joiner.add(field.toString());
    }
    return joiner.toString();
  }

  public String toUrlEncodedString() {
    try {
      StringJoiner fields = new StringJoiner("&");
      for (Field field : this) {
        String name = URLEncoder.encode(field.name(), "UTF-8");
        StringJoiner values = new StringJoiner("+");
        for (String value : field.values()) {
          values.add(URLEncoder.encode(value, "UTF-8"));
        }
        fields.add(name + "=" + values);
      }
      return fields.toString();
    }
    catch (UnsupportedEncodingException e) {
      throw new AssertionError("UTF-8 not found", e);
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy