/*
* Copyright 2009 VoidSearch.com
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.voidsearch.voidbase.protocol;
import com.voidsearch.voidbase.module.VoidBaseModuleRequest;
import java.util.HashMap;
public class VoidBaseHttpRequest {
private static String URI_DELIMITER = "\\?";
private static String PARAM_DELIMITER = "&";
private static String KEYVALUE_DELIMITER = "=";
private HashMap<String, String> queryParams = new HashMap<String, String>();
private String uri;
private long startTime;
public VoidBaseHttpRequest(VoidBaseModuleRequest request) throws InvalidRequestException {
this(request.getURI());
}
public VoidBaseHttpRequest(String query) throws InvalidRequestException {
startTime = System.currentTimeMillis();
if (query != null) {
parseQuery(query);
}
else {
throw new InvalidRequestException();
}
}
public void parseQuery(String query) throws InvalidRequestException {
String[] uriParams = query.split(URI_DELIMITER);
if (uriParams.length == 2) {
uri = uriParams[0];
String[] params = uriParams[1].split(PARAM_DELIMITER);
for (String param : params) {
String[] keyVal = param.split(KEYVALUE_DELIMITER);
if (keyVal.length == 2) {
queryParams.put(keyVal[0], keyVal[1]);
}
}
} else {
throw new InvalidRequestException();
}
}
public String getUri() {
return uri;
}
public int paramCount() {
return queryParams.size();
}
public boolean containsParams(String[] params) {
for (String param : params) {
if (!queryParams.containsKey(param)) {
return false;
}
}
return true;
}
public boolean containsParam(String param) {
return queryParams.containsKey(param);
}
public String getParam(String param) {
return queryParams.get(param);
}
public long getStartTime() {
return startTime;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("uri:\t"+uri+"\n");
for (String param : queryParams.keySet()) {
sb.append("\t" + param + ":" + queryParams.get(param) + "\n");
}
return sb.toString();
}
}