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);
}
}
}