modify query error handling

This commit is contained in:
Shinsuke Sugaya 2015-12-12 12:52:18 +09:00
parent 65b5e610cb
commit 75e8135e4b
5 changed files with 73 additions and 150 deletions

View file

@ -44,17 +44,6 @@ public abstract class FessAdminAction extends FessBaseAction {
// ===================================================================================
// Small Helper
// ============
protected void saveInfo(final VaMessenger<FessMessages> validationMessagesLambda) {
final FessMessages messages = createMessages();
validationMessagesLambda.message(messages);
sessionManager.info().save(messages);
}
protected void saveError(final VaMessenger<FessMessages> validationMessagesLambda) {
final FessMessages messages = createMessages();
validationMessagesLambda.message(messages);
sessionManager.errors().save(messages);
}
protected void write(final String path, final byte[] data) {
LdiFileUtil.write(path, data);

View file

@ -47,6 +47,7 @@ import org.lastaflute.web.ruts.process.ActionRuntime;
import org.lastaflute.web.servlet.session.SessionManager;
import org.lastaflute.web.validation.ActionValidator;
import org.lastaflute.web.validation.LaValidatable;
import org.lastaflute.web.validation.VaMessenger;
/**
* @author jflute
@ -151,4 +152,20 @@ public abstract class FessBaseAction extends TypicalAction // has several interf
public FessMessages createMessages() { // application may call
return new FessMessages(); // overriding to change return type to concrete-class
}
// ===================================================================================
// Small Helper
// ============
protected void saveInfo(final VaMessenger<FessMessages> validationMessagesLambda) {
final FessMessages messages = createMessages();
validationMessagesLambda.message(messages);
sessionManager.info().save(messages);
}
protected void saveError(final VaMessenger<FessMessages> validationMessagesLambda) {
final FessMessages messages = createMessages();
validationMessagesLambda.message(messages);
sessionManager.errors().save(messages);
}
}

View file

@ -42,6 +42,7 @@ import org.codelibs.fess.screenshot.ScreenShotManager;
import org.dbflute.optional.OptionalThing;
import org.lastaflute.web.login.LoginManager;
import org.lastaflute.web.response.ActionResponse;
import org.lastaflute.web.response.HtmlResponse;
import org.lastaflute.web.ruts.process.ActionRuntime;
import org.lastaflute.web.util.LaRequestUtil;
@ -184,4 +185,9 @@ public abstract class FessSearchAction extends FessBaseAction {
}
}
protected HtmlResponse redirectToRoot() {
final String contextPath = request.getServletContext().getContextPath();
return newHtmlResponseAsRediect(StringUtil.isBlank(contextPath) ? "/" : contextPath);
}
}

View file

@ -112,42 +112,45 @@ public class SearchAction extends FessSearchAction {
if (StringUtil.isBlank(form.q) && form.fields.isEmpty()) {
// redirect to index page
form.q = null;
return redirect(RootAction.class);
return redirectToRoot();
}
return asHtml(path_SearchJsp).renderWith(data -> {
try {
updateSearchParams(form);
buildLabelParams(form.fields);
form.lang = searchService.getLanguages(request, form);
try {
final WebRenderData renderData = new WebRenderData(data);
searchService.search(request, form, renderData);
final WebRenderData renderData = new WebRenderData();
searchService.search(request, form, renderData);
return asHtml(path_SearchJsp).renderWith(data -> {
renderData.register(data);
// favorite or screenshot
if (favoriteSupport || screenShotManager != null) {
final String queryId = renderData.getQueryId();
final List<Map<String, Object>> documentItems = renderData.getDocumentItems();
userInfoHelper.storeQueryId(queryId, documentItems);
if (screenShotManager != null) {
screenShotManager.storeRequest(queryId, documentItems);
data.register("screenShotSupport", true);
if (favoriteSupport || screenShotManager != null) {
final String queryId = renderData.getQueryId();
final List<Map<String, Object>> documentItems = renderData.getDocumentItems();
userInfoHelper.storeQueryId(queryId, documentItems);
if (screenShotManager != null) {
screenShotManager.storeRequest(queryId, documentItems);
data.register("screenShotSupport", true);
}
}
}
} catch (final InvalidQueryException e) {
if (logger.isDebugEnabled()) {
logger.debug(e.getMessage(), e);
}
throwValidationError(e.getMessageCode(), () -> asHtml(path_ErrorJsp));
} catch (final ResultOffsetExceededException e) {
if (logger.isDebugEnabled()) {
logger.debug(e.getMessage(), e);
}
throwValidationError(messages -> {
messages.addErrorsResultSizeExceeded(GLOBAL);
}, () -> asHtml(path_ErrorJsp));
data.register("displayQuery", getDisplayQuery(form, labelTypeHelper.getLabelTypeItemList()));
data.register("pagingQuery", getPagingQuery(form));
});
} catch (final InvalidQueryException e) {
if (logger.isDebugEnabled()) {
logger.debug(e.getMessage(), e);
}
data.register("displayQuery", getDisplayQuery(form, labelTypeHelper.getLabelTypeItemList()));
data.register("pagingQuery", getPagingQuery(form));
});
saveError(e.getMessageCode());
return redirectToRoot();
} catch (final ResultOffsetExceededException e) {
if (logger.isDebugEnabled()) {
logger.debug(e.getMessage(), e);
}
saveError(messages -> {
messages.addErrorsResultSizeExceeded(GLOBAL);
});
return redirectToRoot();
}
}
protected HtmlResponse doMove(final SearchForm form, final int move) {
@ -246,118 +249,26 @@ public class SearchAction extends FessSearchAction {
}
protected static class WebRenderData extends SearchRenderData {
private final RenderData data;
WebRenderData(final RenderData data) {
this.data = data;
}
@Override
public void setQueryId(final String queryId) {
public void register(RenderData data) {
data.register("queryId", queryId);
super.setQueryId(queryId);
}
@Override
public void setDocumentItems(final List<Map<String, Object>> documentItems) {
data.register("documentItems", documentItems);
super.setDocumentItems(documentItems);
}
@Override
public void setFacetResponse(final FacetResponse facetResponse) {
data.register("facetResponse", facetResponse);
super.setFacetResponse(facetResponse);
}
@Override
public void setAppendHighlightParams(final String appendHighlightParams) {
data.register("appendHighlightParams", appendHighlightParams);
super.setAppendHighlightParams(appendHighlightParams);
}
@Override
public void setExecTime(final String execTime) {
data.register("execTime", execTime);
super.setExecTime(execTime);
}
@Override
public void setPageSize(final int pageSize) {
data.register("pageSize", pageSize);
super.setPageSize(pageSize);
}
@Override
public void setCurrentPageNumber(final int currentPageNumber) {
data.register("currentPageNumber", currentPageNumber);
super.setCurrentPageNumber(currentPageNumber);
}
@Override
public void setAllRecordCount(final long allRecordCount) {
data.register("allRecordCount", allRecordCount);
super.setAllRecordCount(allRecordCount);
}
@Override
public void setAllPageCount(final int allPageCount) {
data.register("allPageCount", allPageCount);
super.setAllPageCount(allPageCount);
}
@Override
public void setExistNextPage(final boolean existNextPage) {
data.register("existNextPage", existNextPage);
super.setExistNextPage(existNextPage);
}
@Override
public void setExistPrevPage(final boolean existPrevPage) {
data.register("existPrevPage", existPrevPage);
super.setExistPrevPage(existPrevPage);
}
@Override
public void setCurrentStartRecordNumber(final long currentStartRecordNumber) {
data.register("currentStartRecordNumber", currentStartRecordNumber);
super.setCurrentStartRecordNumber(currentStartRecordNumber);
}
@Override
public void setCurrentEndRecordNumber(final long currentEndRecordNumber) {
data.register("currentEndRecordNumber", currentEndRecordNumber);
super.setCurrentEndRecordNumber(currentEndRecordNumber);
}
@Override
public void setPageNumberList(final List<String> pageNumberList) {
data.register("pageNumberList", pageNumberList);
super.setPageNumberList(pageNumberList);
}
@Override
public void setPartialResults(final boolean partialResults) {
data.register("partialResults", partialResults);
super.setPartialResults(partialResults);
}
@Override
public void setQueryTime(final long queryTime) {
data.register("queryTime", queryTime);
super.setQueryTime(queryTime);
}
@Override
public void setSearchQuery(final String searchQuery) {
data.register("searchQuery", searchQuery);
super.setSearchQuery(searchQuery);
}
@Override
public void setRequestedTime(final long requestedTime) {
data.register("requestedTime", requestedTime);
super.setRequestedTime(requestedTime);
}
}
}

View file

@ -22,41 +22,41 @@ import org.codelibs.fess.util.FacetResponse;
public class SearchRenderData {
private List<Map<String, Object>> documentItems;
protected List<Map<String, Object>> documentItems;
private FacetResponse facetResponse;
protected FacetResponse facetResponse;
private String appendHighlightParams;
protected String appendHighlightParams;
private String execTime;
protected String execTime;
private int pageSize;
protected int pageSize;
private int currentPageNumber;
protected int currentPageNumber;
private long allRecordCount;
protected long allRecordCount;
private int allPageCount;
protected int allPageCount;
private boolean existNextPage;
protected boolean existNextPage;
private boolean existPrevPage;
protected boolean existPrevPage;
private long currentStartRecordNumber;
protected long currentStartRecordNumber;
private long currentEndRecordNumber;
protected long currentEndRecordNumber;
private List<String> pageNumberList;
protected List<String> pageNumberList;
private boolean partialResults;
protected boolean partialResults;
private String searchQuery;
protected String searchQuery;
private long queryTime;
protected long queryTime;
private long requestedTime;
protected long requestedTime;
private String queryId;
protected String queryId;
public void setDocumentItems(final List<Map<String, Object>> documentItems) {
this.documentItems = documentItems;