Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
retrofit2.RequestAction Maven / Gradle / Ivy
/*
* Copyright (C) 2015 Square, Inc.
*
* 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 retrofit2;
import android.net.Uri;
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URI;
import java.util.Map;
import okhttp3.Headers;
import okhttp3.RequestBody;
import static retrofit2.Utils.checkNotNull;
abstract class RequestAction {
abstract void perform(RequestBuilder builder, T value) throws IOException;
final RequestAction> iterable() {
return new RequestAction>() {
@Override void perform(RequestBuilder builder, Iterable values) throws IOException {
if (values == null) return; // Skip null values.
for (T value : values) {
RequestAction.this.perform(builder, value);
}
}
};
}
final RequestAction array() {
return new RequestAction() {
@Override void perform(RequestBuilder builder, Object values) throws IOException {
if (values == null) return; // Skip null values.
for (int i = 0, size = Array.getLength(values); i < size; i++) {
//noinspection unchecked
RequestAction.this.perform(builder, (T) Array.get(values, i));
}
}
};
}
static final class StringUrl extends RequestAction {
@Override void perform(RequestBuilder builder, String value) {
builder.setRelativeUrl(value);
}
}
static final class JavaUriUrl extends RequestAction {
@Override void perform(RequestBuilder builder, URI value) {
builder.setRelativeUrl(value.toString());
}
}
static final class AndroidUriUrl extends RequestAction {
@Override void perform(RequestBuilder builder, Uri value) {
builder.setRelativeUrl(value.toString());
}
}
static final class Header extends RequestAction {
private final String name;
private final Converter valueConverter;
Header(String name, Converter valueConverter) {
this.name = checkNotNull(name, "name == null");
this.valueConverter = valueConverter;
}
@Override void perform(RequestBuilder builder, T value) throws IOException {
if (value == null) return; // Skip null values.
builder.addHeader(name, valueConverter.convert(value));
}
}
static final class Path extends RequestAction {
private final String name;
private final Converter valueConverter;
private final boolean encoded;
Path(String name, Converter valueConverter, boolean encoded) {
this.name = checkNotNull(name, "name == null");
this.valueConverter = valueConverter;
this.encoded = encoded;
}
@Override void perform(RequestBuilder builder, T value) throws IOException {
if (value == null) {
throw new IllegalArgumentException(
"Path parameter \"" + name + "\" value must not be null.");
}
builder.addPathParam(name, valueConverter.convert(value), encoded);
}
}
static final class Query extends RequestAction {
private final String name;
private final Converter valueConverter;
private final boolean encoded;
Query(String name, Converter valueConverter, boolean encoded) {
this.name = checkNotNull(name, "name == null");
this.valueConverter = valueConverter;
this.encoded = encoded;
}
@Override void perform(RequestBuilder builder, T value) throws IOException {
if (value == null) return; // Skip null values.
builder.addQueryParam(name, valueConverter.convert(value), encoded);
}
}
static final class QueryMap extends RequestAction> {
private final Converter valueConverter;
private final boolean encoded;
QueryMap(Converter valueConverter, boolean encoded) {
this.valueConverter = valueConverter;
this.encoded = encoded;
}
@Override void perform(RequestBuilder builder, Map value) throws IOException {
if (value == null) return; // Skip null values.
for (Map.Entry entry : value.entrySet()) {
String entryKey = entry.getKey();
if (entryKey == null) {
throw new IllegalArgumentException("Query map contained null key.");
}
T entryValue = entry.getValue();
if (entryValue != null) { // Skip null values.
builder.addQueryParam(entryKey, valueConverter.convert(entryValue), encoded);
}
}
}
}
static final class Field extends RequestAction {
private final String name;
private final Converter valueConverter;
private final boolean encoded;
Field(String name, Converter valueConverter, boolean encoded) {
this.name = checkNotNull(name, "name == null");
this.valueConverter = valueConverter;
this.encoded = encoded;
}
@Override void perform(RequestBuilder builder, T value) throws IOException {
if (value == null) return; // Skip null values.
builder.addFormField(name, valueConverter.convert(value), encoded);
}
}
static final class FieldMap extends RequestAction> {
private final Converter valueConverter;
private final boolean encoded;
FieldMap(Converter valueConverter, boolean encoded) {
this.valueConverter = valueConverter;
this.encoded = encoded;
}
@Override void perform(RequestBuilder builder, Map value) throws IOException {
if (value == null) return; // Skip null values.
for (Map.Entry entry : value.entrySet()) {
String entryKey = entry.getKey();
if (entryKey == null) {
throw new IllegalArgumentException("Field map contained null key.");
}
T entryValue = entry.getValue();
if (entryValue != null) { // Skip null values.
builder.addFormField(entryKey, valueConverter.convert(entryValue), encoded);
}
}
}
}
static final class Part extends RequestAction {
private final Headers headers;
private final Converter converter;
Part(Headers headers, Converter converter) {
this.headers = headers;
this.converter = converter;
}
@Override void perform(RequestBuilder builder, T value) {
if (value == null) return; // Skip null values.
RequestBody body;
try {
body = converter.convert(value);
} catch (IOException e) {
throw new RuntimeException("Unable to convert " + value + " to RequestBody", e);
}
builder.addPart(headers, body);
}
}
static final class PartMap extends RequestAction> {
private final Converter valueConverter;
private final String transferEncoding;
PartMap(Converter valueConverter, String transferEncoding) {
this.valueConverter = valueConverter;
this.transferEncoding = transferEncoding;
}
@Override void perform(RequestBuilder builder, Map value) throws IOException {
if (value == null) return; // Skip null values.
for (Map.Entry entry : value.entrySet()) {
String entryKey = entry.getKey();
if (entryKey == null) {
throw new IllegalArgumentException("Part map contained null key.");
}
T entryValue = entry.getValue();
if (entryValue == null) {
continue; // Skip null values.
}
Headers headers = Headers.of(
"Content-Disposition", "form-data; name=\"" + entryKey + "\"",
"Content-Transfer-Encoding", transferEncoding);
builder.addPart(headers, valueConverter.convert(entryValue));
}
}
}
static final class Body extends RequestAction {
private final Converter converter;
Body(Converter converter) {
this.converter = converter;
}
@Override void perform(RequestBuilder builder, T value) {
if (value == null) {
throw new IllegalArgumentException("Body parameter value must not be null.");
}
RequestBody body;
try {
body = converter.convert(value);
} catch (IOException e) {
throw new RuntimeException("Unable to convert " + value + " to RequestBody", e);
}
builder.setBody(body);
}
}
}