: Here is a slice of what RequestParams or SolrParams might look like:
I like it ... we can even add more helpers to the base class like
"getInt(String param)" and such.
(the NamedList one should probably extend MultiMapRequestParams though
right ... multiple items with the same name and all that.)
I still vote for the name "SolrParams" though :)
: abstract class RequestParams {
:
: public boolean parseBool(String s) {
: return s.equalsIgnoreCase("true") || s.equalsIgnoreCase("on") ||
: s.equalsIgnoreCase("yes");
: }
:
: public abstract String get(String param);
:
: public abstract String[] getParams(String param);
:
:
: protected String fpname(String field, String param) {
: return "f."+field+'.'+param;
: }
:
: public String getFieldParam(String field, String param) {
: String val = get(fpname(field,param));
: return val!=null ? val : get(param);
: }
:
: public Boolean getBool(String param) {
: String val = get(param);
: if (val != null) return parseBool(val);
: return Boolean.FALSE;
: }
:
: }
:
:
: class MapRequestParams extends RequestParams {
: protected final Map<String,String> map;
:
: public MapRequestParams(Map<String,String> map) {
: this.map = map;
: }
:
: public String get(String name) {
: return map.get(name);
: }
:
: public String[] getParams(String name) {
: String val = map.get(name);
: return val==null ? null : new String[]{val};
: }
: }
:
: class MultiMapRequestParams extends RequestParams {
: protected final Map<String,String[]> map;
:
: public MultiMapRequestParams(Map<String,String[]> map) {
: this.map = map;
: }
:
: public String get(String name) {
: String[] arr = map.get(name);
: return arr==null ? null : arr[0];
: }
:
: public String[] getParams(String name) {
: return map.get(name);
: }
: }
:
:
: class ServletRequestParams extends MultiMapRequestParams {
: public ServletRequestParams(ServletRequest req) {
: super(req.getParameterMap());
: }
:
: public String get(String name) {
: String[] arr = map.get(name);
: if (arr==null) return null;
: String s = arr[0];
: if (s.length()==0) return null; // screen out blank parameters
: return s;
: }
: }
:
: class DefaultRequestParams extends RequestParams {
: protected final RequestParams params;
: protected final RequestParams defaults;
:
: public DefaultRequestParams(RequestParams params, RequestParams defaults) {
: this.params = params;
: this.defaults = defaults;
: }
:
: public String get(String param) {
: String val = params.get(param);
: return val!=null ? val : defaults.get(param);
: }
:
: public String[] getParams(String param) {
: String[] vals = params.getParams(param);
: return vals!=null ? vals : defaults.getParams(param);
: }
: }
:
:
: class NamedListRequestParams extends MapRequestParams {
: private static Map<String,String> toMap(NamedList params) {
: HashMap<String,String> map = new HashMap<String,String>();
: for (int i=0; i<params.size(); i++) {
: map.put(params.getName(i), params.getVal(i).toString());
: }
: return map;
: }
:
: public NamedListRequestParams(NamedList params) {
: super(toMap(params));
: }
: }
:
-Hoss