package cn.dreampie.route.core;
import cn.dreampie.common.entity.CaseInsensitiveMap;
import cn.dreampie.common.entity.Entity;
import cn.dreampie.common.util.json.Jsoner;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
/**
* Created by ice on 15-1-26.
*/
public class Params {
/**
* params for validate
*/
private Map<String, Object> params;
public Params() {
this.params = new CaseInsensitiveMap<Object>();
}
public Params(Entity entity) {
this.params = entity.getAttrs();
}
public Params(CaseInsensitiveMap<Object> params) {
this.params = params;
}
/**
* Put key value pair to the params.
*/
public Params set(String key, Object value) {
params.put(key, value);
return this;
}
/**
* Get param of any type.
*/
public <T> T get(String name) {
return (T) (params.get(name));
}
/**
* Parse param to any type
*/
public <T> T get(String attr, Class<T> clazz) {
Object value = params.get(attr);
if (clazz.isAssignableFrom(value.getClass())) {
return (T) value;
} else {
return Jsoner.toObject(Jsoner.toJSON(value), clazz);
}
}
/**
* Get param of any type. Returns defaultValue if null.
*/
public <T> T get(String attr, Object defaultValue) {
Object result = get(attr);
return (T) (result != null ? result : defaultValue);
}
/**
* Get param for clazz. Returns defaultValue if null.
*/
public <T> T get(String attr, Class<T> clazz, Object defaultValue) {
Object result = get(attr, clazz);
return (T) (result != null ? result : defaultValue);
}
/**
* Return param name of this route.
*/
public String[] getNames() {
Set<String> nameSet = params.keySet();
return nameSet.toArray(new String[nameSet.size()]);
}
/**
* Return param values of this route.
*/
public Object[] getValues() {
Collection<Object> valueCollection = params.values();
return valueCollection.toArray(new Object[valueCollection.size()]);
}
/**
* 判断是否存在某个参数
*
* @param name
* @return
*/
public boolean containsName(String name) {
return params.containsKey(name);
}
/**
* 判断是否存在某个值
*
* @param value
* @return
*/
public boolean containsValue(Object value) {
return params.containsValue(value);
}
}