/*
* Copyright 2014 Grow Bit
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.turbogwt.net.http.client;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import javax.annotation.Nullable;
import org.turbogwt.core.collections.client.JsArrayList;
import org.turbogwt.core.collections.client.JsMapInteger;
import org.turbogwt.net.shared.MultivaluedParamComposition;
/**
* Stores form params and values.
*
* @author Danilo Reinert
*/
public class FormData implements Collection<FormParam> {
private final List<FormParam> params;
private MultivaluedParamComposition multivaluedParamComposition;
public FormData() {
this.params = new JsArrayList<>();
}
public FormData(List<FormParam> paramList) {
this.params = paramList;
}
public FormData(FormParam... params) {
this.params = new JsArrayList<>(params);
}
/**
* Returns a builder of FormData.
*
* @return The FormData builder
*/
public static Builder builder() {
return new Builder();
}
public void setMultivaluedParamComposition(MultivaluedParamComposition multivaluedParamComposition) {
this.multivaluedParamComposition = multivaluedParamComposition;
}
@Nullable
public MultivaluedParamComposition getMultivaluedParamComposition() {
return multivaluedParamComposition;
}
@Override
public int size() {
return params.size();
}
@Override
public boolean isEmpty() {
return params.isEmpty();
}
@Override
public boolean contains(Object o) {
return params.contains(o);
}
@Override
public Iterator<FormParam> iterator() {
return params.iterator();
}
@Override
public Object[] toArray() {
return params.toArray();
}
@Override
public <T> T[] toArray(T[] ts) {
return params.toArray(ts);
}
@Override
public boolean add(FormParam formParam) {
return params.add(formParam);
}
@Override
public boolean remove(Object o) {
return params.remove(o);
}
@Override
public boolean containsAll(Collection<?> objects) {
return params.containsAll(objects);
}
@Override
public boolean addAll(Collection<? extends FormParam> formParams) {
return params.addAll(formParams);
}
@Override
public boolean removeAll(Collection<?> objects) {
return params.removeAll(objects);
}
@Override
public boolean retainAll(Collection<?> objects) {
return params.retainAll(objects);
}
@Override
public void clear() {
params.clear();
}
/**
* A builder of FormData.
*/
public static class Builder {
private final JsArrayList<FormParam> params = new JsArrayList<>();
private final JsMapInteger indexes = JsMapInteger.create();
private MultivaluedParamComposition multivaluedParamComposition;
private Builder() {
}
public Builder put(String name, Object... values) {
int i = indexes.get(name, -1);
if (i > -1) {
params.set(i, new FormParam(name, values));
} else {
indexes.set(name, params.size());
params.add(new FormParam(name, values));
}
return this;
}
public Builder strategy(MultivaluedParamComposition multivaluedParamComposition) {
this.multivaluedParamComposition = multivaluedParamComposition;
return this;
}
public FormData build() {
final FormData data = new FormData(params);
data.setMultivaluedParamComposition(multivaluedParamComposition);
return data;
}
}
}