/*
* Copyright (c) 2011 LinkedIn, Inc
*
* 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.flaptor.indextank.api.resources;
import java.io.IOException;
import java.util.logging.Logger;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.json.simple.parser.ParseException;
import com.flaptor.indextank.api.IndexEngineApi;
import com.ghosthack.turismo.action.Action;
public class DeleteDocs extends Action {
/**
* @see java.lang.Runnable#run()
*/
public void run() {
IndexEngineApi api = (IndexEngineApi) ctx().getAttribute("api");
try {
Object parse = JSONValue.parseWithException(req().getReader());
if(parse instanceof JSONObject) { // 200, 400, 404, 409, 503
JSONObject jo = (JSONObject) parse;
try {
deleteDocument(api, jo);
res().setStatus(200);
return;
} catch(Exception e) {
e.printStackTrace();
if(LOG_ENABLED) LOG.severe(e.getMessage());
res().setStatus(400);
print("Invalid or missing argument"); // TODO: descriptive error msg
return;
}
} else if(parse instanceof JSONArray) {
JSONArray statuses = new JSONArray();
JSONArray ja = (JSONArray) parse;
if(!validateDocuments(ja)) {
res().setStatus(400);
print("Invalid or missing argument"); // TODO: descriptive error msg
return;
}
boolean hasError = false;
for(Object o: ja) {
JSONObject jo = (JSONObject) o;
JSONObject status = new JSONObject();
try {
deleteDocument(api, jo);
status.put("added", true);
} catch(Exception e) {
status.put("added", false);
status.put("error", "Invalid or missing argument"); // TODO: descriptive error msg
hasError = true;
}
statuses.add(status);
}
print(statuses.toJSONString());
return;
}
} catch (IOException e) {
if(LOG_ENABLED) LOG.severe("DELETE doc, parse input " + e.getMessage());
} catch (ParseException e) {
if(LOG_ENABLED) LOG.severe("DELETE doc, parse input " + e.getMessage());
} catch (Exception e) {
if(LOG_ENABLED) LOG.severe("DELETE doc " + e.getMessage());
}
res().setStatus(503);
print("Service unavailable"); // TODO: descriptive error msg
}
private void deleteDocument(IndexEngineApi api, JSONObject jo) {
String docid = String.valueOf(jo.get("docid"));
api.deleteDocument(docid);
}
private boolean validateDocument(JSONObject jo) {
return true; // TODO: validate the document
}
private boolean validateDocuments(JSONArray ja) {
for(Object o: ja) {
JSONObject jo = (JSONObject) o;
if(!validateDocument(jo)) {
return false;
}
}
return true;
}
private static final Logger LOG = Logger.getLogger(DeleteDocs.class.getName());
private static final boolean LOG_ENABLED = true;
}