/*
* Copyright 2013 Simon Taddiken
*
* This file is part of Polly HTTP API.
*
* Polly HTTP API is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or (at
* your option) any later version.
*
* Polly HTTP API is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
* You should have received a copy of the GNU General Public License along
* with Polly HTTP API. If not, see http://www.gnu.org/licenses/.
*/
package de.skuzzle.polly.http.internal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import de.skuzzle.polly.http.api.HttpException;
import de.skuzzle.polly.http.api.ParameterHandler;
class NativeHandlers {
public final static ParameterHandler BOOLEAN = new ParameterHandler() {
@Override
public Object parse(String value) throws HttpException {
if (value == null) {
return false;
} else {
final String lc = value.toLowerCase();
if (lc.equals("true") || lc.equals("yes") || lc.equals("on")) {
return true;
} else if (lc.equals("false") || lc.equals("no") || lc.equals("off")) {
return false;
}
throw new IllegalArgumentException("invalid boolean: " + value);
}
}
@Override
public boolean canHandle(Class<?> type, Class<?> typeVar) {
return Boolean.class.isAssignableFrom(type) ||
boolean.class.isAssignableFrom(type);
}
};
public final static ParameterHandler STRING = new ParameterHandler() {
@Override
public Object parse(String value) {
return value;
}
@Override
public boolean canHandle(Class<?> type, Class<?> typeVar) {
return String.class.isAssignableFrom(type);
}
};
public final static ParameterHandler INTEGER = new ParameterHandler() {
@Override
public Object parse(String value) throws HttpException {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {
throw new HttpException(e);
}
}
@Override
public boolean canHandle(Class<?> type, Class<?> typeVar) {
return Integer.class.isAssignableFrom(type) ||
int.class.isAssignableFrom(type);
}
};
public final static ParameterHandler STRING_LIST = new ParameterHandler() {
@Override
public Object parse(String value) throws HttpException {
if (value.equals("")) {
return new ArrayList<String>();
}
return new ArrayList<String>(Arrays.asList(value.split(";")));
}
@Override
public boolean canHandle(Class<?> type, Class<?> typeVar) {
return List.class.isAssignableFrom(type) && typeVar != null &&
String.class.isAssignableFrom(typeVar);
}
};
public final static ParameterHandler INT_LIST = new ParameterHandler() {
@Override
public Object parse(String value) throws HttpException {
if (value.equals("")) {
return new ArrayList<Integer>();
}
final String[] parts = value.split(";");
final List<Integer> result = new ArrayList<Integer>();
for (final String p : parts) {
try {
result.add(Integer.parseInt(p));
} catch (NumberFormatException e) {
throw new HttpException(e);
}
}
return result;
}
@Override
public boolean canHandle(Class<?> type, Class<?> typeVar) {
return List.class.isAssignableFrom(type) && typeVar != null &&
Integer.class.isAssignableFrom(typeVar);
}
};
}