package org.archive.cdxserver;
import javax.servlet.http.HttpServletRequest;
import org.archive.url.UrlSurtRangeComputer;
import org.archive.url.UrlSurtRangeComputer.MatchType;
import org.springframework.web.bind.ServletRequestBindingException;
import org.springframework.web.bind.ServletRequestUtils;
/**
* container for CDX query parameters.
* @see CDXServer
*
*/
public class CDXQuery {
public static final String EMPTY_STRING = "";
public enum SortType {
regular, reverse, closest,
};
String url;
MatchType matchType = null;
String matchTypeStr = null;
String from = EMPTY_STRING;
String to = EMPTY_STRING;
String closest = EMPTY_STRING;
SortType sort = null;
int collapseTime = -1;
Boolean gzip = null;
String output = EMPTY_STRING;
String[] filter = null;
String[] collapse = null;
boolean showDupeCount = false;
boolean resolveRevisits = false;
boolean showGroupCount = false;
boolean lastSkipTimestamp = false;
boolean showUniqCount = false;
int offset = 0;
int limit = 0;
boolean last = false;
Boolean fastLatest = null;
String fl = EMPTY_STRING;
int page = -1;
int pageSize = 0;
boolean showNumPages = false;
boolean showPagedIndex = false;
String resumeKey = EMPTY_STRING;
boolean showResumeKey = false;
public CDXQuery() {
}
public CDXQuery(String url) {
this.url = url;
}
public CDXQuery(HttpServletRequest request) {
try {
fill(request);
} catch (ServletRequestBindingException e) {
// Ignore
}
}
protected <E extends Enum<E>> E getEnumValue(HttpServletRequest request,
String name, Class<E> eclass, E defaultValue) {
String enumStr = ServletRequestUtils.getStringParameter(request, name,
null);
E enumVal = defaultValue;
if (enumStr != null) {
try {
enumVal = Enum.valueOf(eclass, enumStr);
} catch (IllegalArgumentException ill) {
}
}
return enumVal;
}
public void fill(HttpServletRequest request)
throws ServletRequestBindingException {
if (this.url == null) {
url = ServletRequestUtils
.getRequiredStringParameter(request, "url");
}
matchType = getEnumValue(request, "matchType",
UrlSurtRangeComputer.MatchType.class, null);
from = ServletRequestUtils.getStringParameter(request, "from", from);
to = ServletRequestUtils.getStringParameter(request, "to", "");
closest = ServletRequestUtils
.getStringParameter(request, "closest", "");
sort = getEnumValue(request, "sort", SortType.class, SortType.regular);
collapseTime = ServletRequestUtils.getIntParameter(request,
"collapseTime", 0);
gzip = ServletRequestUtils.getBooleanParameter(request, "gzip");
output = ServletRequestUtils.getStringParameter(request, "output",
output);
filter = ServletRequestUtils.getStringParameters(request, "filter");
collapse = ServletRequestUtils.getStringParameters(request, "collapse");
showDupeCount = ServletRequestUtils.getBooleanParameter(request,
"showDupeCount", false);
resolveRevisits = ServletRequestUtils.getBooleanParameter(request,
"resolveRevisits", false);
showGroupCount = ServletRequestUtils.getBooleanParameter(request,
"showGroupCount", false);
lastSkipTimestamp = ServletRequestUtils.getBooleanParameter(request,
"lastSkipTimestamp", false);
showUniqCount = ServletRequestUtils.getBooleanParameter(request,
"showUniqCount", false);
offset = ServletRequestUtils.getIntParameter(request, "offset", 0);
limit = ServletRequestUtils.getIntParameter(request, "limit", 0);
last = ServletRequestUtils.getBooleanParameter(request, "last", false);
fastLatest = ServletRequestUtils.getBooleanParameter(request,
"fastLatest");
fl = ServletRequestUtils.getStringParameter(request, "fl", "");
page = ServletRequestUtils.getIntParameter(request, "page", -1);
pageSize = ServletRequestUtils.getIntParameter(request, "pageSize", 0);
showNumPages = ServletRequestUtils.getBooleanParameter(request,
"showNumPages", false);
showPagedIndex = ServletRequestUtils.getBooleanParameter(request,
"showPagedIndex", false);
resumeKey = ServletRequestUtils.getStringParameter(request,
"resumeKey", "");
showResumeKey = ServletRequestUtils.getBooleanParameter(request,
"showResumeKey", false);
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public MatchType getMatchType() {
return matchType;
}
public void setMatchType(MatchType matchType) {
this.matchType = matchType;
}
public String getMatchTypeStr() {
return matchTypeStr;
}
public void setMatchTypeStr(String matchTypeStr) {
this.matchTypeStr = matchTypeStr;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getClosest() {
return closest;
}
public void setClosest(String closest) {
this.closest = closest;
}
public SortType getSort() {
return sort;
}
public void setSort(SortType sort) {
this.sort = sort;
}
public boolean isReverse() {
return this.sort == SortType.reverse;
}
public boolean isSortClosest() {
return this.sort == SortType.closest;
}
public Boolean isGzip() {
return gzip;
}
public void setGzip(Boolean gzip) {
this.gzip = gzip;
}
public String getOutput() {
return output;
}
public void setOutput(String output) {
this.output = output;
}
public String[] getFilter() {
return filter;
}
public void setFilter(String[] filter) {
this.filter = filter;
}
public String[] getCollapse() {
return collapse;
}
public void setCollapse(String[] collapse) {
this.collapse = collapse;
}
public boolean isShowDupeCount() {
return showDupeCount;
}
public void setShowDupeCount(boolean showDupeCount) {
this.showDupeCount = showDupeCount;
}
public boolean isResolveRevisits() {
return resolveRevisits;
}
public void setResolveRevisits(boolean resolveRevisits) {
this.resolveRevisits = resolveRevisits;
}
public boolean isShowGroupCount() {
return showGroupCount;
}
public void setShowGroupCount(boolean showGroupCount) {
this.showGroupCount = showGroupCount;
}
public boolean isLastSkipTimestamp() {
return lastSkipTimestamp;
}
public void setLastSkipTimestamp(boolean lastSkipTimestamp) {
this.lastSkipTimestamp = lastSkipTimestamp;
}
public boolean isShowUniqCount() {
return showUniqCount;
}
public void setShowUniqCount(boolean showUniqCount) {
this.showUniqCount = showUniqCount;
}
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
public int getLimit() {
return limit;
}
public void setLimit(int limit) {
this.limit = limit;
}
public boolean isLast() {
return last;
}
public void setLast(boolean last) {
this.last = last;
}
public Boolean getFastLatest() {
return fastLatest;
}
public void setFastLatest(Boolean fastLatest) {
this.fastLatest = fastLatest;
}
public String getFl() {
return fl;
}
public void setFl(String fl) {
this.fl = fl;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public boolean isShowNumPages() {
return showNumPages;
}
public void setShowNumPages(boolean showNumPages) {
this.showNumPages = showNumPages;
}
public boolean isShowPagedIndex() {
return showPagedIndex;
}
public void setShowPagedIndex(boolean showPagedIndex) {
this.showPagedIndex = showPagedIndex;
}
public String getResumeKey() {
return resumeKey;
}
public void setResumeKey(String resumeKey) {
this.resumeKey = resumeKey;
}
public boolean isShowResumeKey() {
return showResumeKey;
}
public void setShowResumeKey(boolean showResumeKey) {
this.showResumeKey = showResumeKey;
}
public int getCollapseTime() {
return collapseTime;
}
public void setCollapseTime(int collapseTime) {
this.collapseTime = collapseTime;
}
}