package org.araqne.logdb.query.parser;
import java.util.HashMap;
import java.util.Map;
import org.araqne.logdb.AbstractQueryCommandParser;
import org.araqne.logdb.QueryCommand;
import org.araqne.logdb.QueryContext;
import org.araqne.logdb.QueryErrorMessage;
import org.araqne.logdb.QueryParseException;
import org.araqne.logdb.SavedResult;
import org.araqne.logdb.SavedResultManager;
import org.araqne.logdb.query.command.Load;
import org.araqne.logstorage.LogCursor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoadParser extends AbstractQueryCommandParser {
private final Logger logger = LoggerFactory.getLogger(LoadParser.class);
private SavedResultManager savedResultManager;
public LoadParser(SavedResultManager savedResultManager) {
this.savedResultManager = savedResultManager;
setDescriptions("Load saved query result.", "저장된 쿼리 결과를 다시 조회합니다.");
}
@Override
public String getCommandName() {
return "load";
}
@Override
public Map<String, QueryErrorMessage> getErrorMessages() {
Map<String, QueryErrorMessage> m = new HashMap<String, QueryErrorMessage>();
m.put("11200", new QueryErrorMessage("saved-result-not-found", "저장된 쿼리 결과가 없습니다."));
m.put("11201", new QueryErrorMessage("no-read-permission", "읽기 권한이 없습니다."));
m.put("11202", new QueryErrorMessage("io-error", "IO 에러가 발생했습니다:[msg]"));
return m;
}
@Override
public QueryCommand parse(QueryContext context, String commandString) {
String guid = commandString.substring(getCommandName().length()).trim();
SavedResult sr = savedResultManager.getResult(guid);
if (sr == null)
// throw new QueryParseException("saved-result-not-found", -1);
throw new QueryParseException("11200", -1, -1, null);
if (!sr.getOwner().equals(context.getSession().getLoginName()))
// throw new QueryParseException("no-read-permission", -1);
throw new QueryParseException("11201", -1, -1, null);
LogCursor cursor = null;
try {
cursor = savedResultManager.getCursor(guid);
return new Load(cursor, guid);
} catch (Throwable t) {
if (cursor != null)
cursor.close();
logger.error("araqne logdb: failed to load saved result", t);
// throw new QueryParseException("io-error", -1);
Map<String, String> params = new HashMap<String, String>();
params.put("msg", t.getMessage());
throw new QueryParseException("11202", -1, -1, params);
}
}
}