package org.openntf.domino.rest.service;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.UriInfo;
import org.apache.wink.common.internal.utils.StringUtils;
import org.openntf.domino.types.CaseInsensitiveString;
public enum Parameters {
ID, KEY, TYPE, EDGES, VERTICES, COUNTS, DESC, FILTERKEY, FILTERVALUE, LABEL, DIRECTION, START, COUNT, ORDERBY, PROPS, INPROPS, OUTPROPS, COMMAND, SWITCH, PARTIALKEY, PARTIALVALUE, STARTSKEY, STARTSVALUE, ADD, REMOVE;
public static ParamMap toParamMap(UriInfo uriInfo) {
ParamMap result = new ParamMap();
MultivaluedMap<String, String> mm = uriInfo.getQueryParameters(true);
for (String key : mm.keySet()) {
List<String> values = mm.get(key);
if (values != null) {
List<String> newValues = new ArrayList<String>();
try {
for (String value : values) {
if (value != null) {
if (value.contains(",")) {
String[] sepstrs = StringUtils.fastSplit(value, ",");
for (String sepstr : sepstrs) {
newValues.add(sepstr);
}
} else {
newValues.add(value);
}
}
}
Parameters param = Parameters.valueOf(key.toUpperCase());
result.put(param, newValues);
} catch (IllegalArgumentException iae) {
// don't sweat it. Unused parameters are ignored by the
// engine
}
}
}
return result;
}
public static class ParamMap extends EnumMap<Parameters, List<String>> {
private static final long serialVersionUID = 1L;
public ParamMap() {
super(Parameters.class);
}
public List<CharSequence> getTypes() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.TYPE));
}
public List<CharSequence> getKeys() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.KEY));
}
public List<CharSequence> getProperties() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.PROPS));
}
public List<CharSequence> getFilterKeys() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.FILTERKEY));
}
public List<CharSequence> getFilterValues() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.FILTERVALUE));
}
public List<CharSequence> getPartialKeys() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.PARTIALKEY));
}
public List<CharSequence> getPartialValues() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.PARTIALVALUE));
}
public List<CharSequence> getStartsKeys() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.STARTSKEY));
}
public List<CharSequence> getStartsValues() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.STARTSVALUE));
}
public List<CharSequence> getOrderBys() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.ORDERBY));
}
public int getStart() {
List<String> raw = get(Parameters.START);
if (raw == null)
return 0;
String intStr = raw.get(0);
if (intStr == null || intStr.length() == 0) {
return 0;
}
return Integer.valueOf(intStr);
}
public int getCount() {
List<String> raw = get(Parameters.COUNT);
if (raw == null)
return 0;
String intStr = raw.get(0);
if (intStr == null || intStr.length() == 0) {
return 0;
}
return Integer.valueOf(intStr);
}
public List<CharSequence> getInProperties() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.INPROPS));
}
public List<CharSequence> getOutProperties() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.OUTPROPS));
}
public List<CharSequence> getLabels() {
return CaseInsensitiveString.toCaseInsensitive(get(Parameters.LABEL));
}
public boolean getIncludeVertices() {
return get(Parameters.VERTICES) != null;
}
public boolean getIncludeEdges() {
return get(Parameters.EDGES) != null;
}
public boolean getIncludeCounts() {
return get(Parameters.COUNTS) != null;
}
public boolean getDescending() {
return get(Parameters.DESC) != null;
}
}
}