Add new methods to error out in case a non-matching statement is passed to a REST endpoint.
git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_stabilization_result_distribution@1162 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java
index 76063e5..1ae3054 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java
@@ -17,16 +17,26 @@
import java.util.Arrays;
import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+
import edu.uci.ics.asterix.aql.base.Statement;
import edu.uci.ics.asterix.aql.base.Statement.Kind;
public class DDLAPIServlet extends RESTAPIServlet {
private static final long serialVersionUID = 1L;
+ protected String getQueryParameter(HttpServletRequest request) {
+ return request.getParameter("ddl");
+ }
+
protected List<Statement.Kind> getAllowedStatements() {
Kind[] statementsArray = { Kind.DATAVERSE_DECL, Kind.DATAVERSE_DROP, Kind.FUNCTION_DECL, Kind.NODEGROUP_DECL,
Kind.NODEGROUP_DROP, Kind.TYPE_DECL, Kind.TYPE_DROP, Kind.CREATE_INDEX, Kind.INDEX_DECL,
Kind.CREATE_DATAVERSE, Kind.INDEX_DROP, Kind.CREATE_FUNCTION, Kind.FUNCTION_DROP };
return Arrays.asList(statementsArray);
}
+
+ protected String getErrorMessage() {
+ return "Invalid statement: Non-DDL statement %s to the DDL API.";
+ }
}
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java
index 069c607..a893bd6 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java
@@ -17,15 +17,25 @@
import java.util.Arrays;
import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+
import edu.uci.ics.asterix.aql.base.Statement;
import edu.uci.ics.asterix.aql.base.Statement.Kind;
public class QueryAPIServlet extends RESTAPIServlet {
private static final long serialVersionUID = 1L;
+ protected String getQueryParameter(HttpServletRequest request) {
+ return request.getParameter("query");
+ }
+
protected List<Statement.Kind> getAllowedStatements() {
Kind[] statementsArray = { Kind.DATAVERSE_DECL, Kind.QUERY, Kind.SET, Kind.WRITE, Kind.BEGIN_FEED,
- Kind.CONTROL_FEED };
+ Kind.CONTROL_FEED };
return Arrays.asList(statementsArray);
}
+
+ protected String getErrorMessage() {
+ return "Invalid statement: Non-query statement %s to the query API.";
+ }
}
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
index e8660a9..abf89f0 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
@@ -47,17 +47,13 @@
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter out = response.getWriter();
- String query = request.getParameter("query");
- String mode = request.getParameter("mode");
- response.setContentType("text/html");
+ String query = getQueryParameter(request);
+ boolean asyncResults = isAsync(request);
+
+ response.setContentType("application/json");
ServletContext context = getServletContext();
IHyracksClientConnection hcc;
- boolean asyncResults = false;
- if (mode != null && mode.equals("asynchronous")) {
- asyncResults = true;
- }
-
try {
HyracksProperties hp = new HyracksProperties();
String strIP = hp.getHyracksIPAddress();
@@ -109,8 +105,7 @@
private boolean checkForbiddenStatements(List<Statement> aqlStatements, PrintWriter out) {
for (Statement st : aqlStatements) {
if (!getAllowedStatements().contains(st.getKind())) {
- JSONObject errorResp = ResultUtils.getErrorResponse(1,
- "Invalid stament: Non-query statement " + st.getKind() + " to the query API.");
+ JSONObject errorResp = ResultUtils.getErrorResponse(1, String.format(getErrorMessage(), st.getKind()));
out.write(errorResp.toString());
return true;
}
@@ -118,5 +113,18 @@
return false;
}
+ protected boolean isAsync(HttpServletRequest request) {
+ String mode = request.getParameter("mode");
+ boolean asyncResults = false;
+ if (mode != null && mode.equals("asynchronous")) {
+ asyncResults = true;
+ }
+ return asyncResults;
+ }
+
+ protected abstract String getQueryParameter(HttpServletRequest request);
+
protected abstract List<Kind> getAllowedStatements();
+
+ protected abstract String getErrorMessage();
}
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java
index 400fe47..7336876 100644
--- a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java
@@ -17,15 +17,25 @@
import java.util.Arrays;
import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+
import edu.uci.ics.asterix.aql.base.Statement;
import edu.uci.ics.asterix.aql.base.Statement.Kind;
public class UpdateAPIServlet extends RESTAPIServlet {
private static final long serialVersionUID = 1L;
+ protected String getQueryParameter(HttpServletRequest request) {
+ return request.getParameter("statements");
+ }
+
protected List<Statement.Kind> getAllowedStatements() {
Kind[] statementsArray = { Kind.DATAVERSE_DECL, Kind.DATASET_DECL, Kind.DATASET_DROP, Kind.DELETE, Kind.INSERT,
Kind.UPDATE, Kind.DML_CMD_LIST, Kind.LOAD_FROM_FILE, Kind.WRITE_FROM_QUERY_RESULT };
return Arrays.asList(statementsArray);
}
+
+ protected String getErrorMessage() {
+ return "Invalid statement: Non-Update statement %s to the Update API.";
+ }
}