diff --git a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java index 561ca17b7..34078e3c2 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/AdminSearchlistAction.java @@ -15,32 +15,32 @@ */ package org.codelibs.fess.app.web.admin.searchlist; -import java.text.NumberFormat; import java.util.List; import java.util.Map; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import org.codelibs.core.lang.StringUtil; import org.codelibs.fess.Constants; +import org.codelibs.fess.app.service.SearchService; import org.codelibs.fess.app.web.base.FessAdminAction; +import org.codelibs.fess.entity.SearchRenderData; import org.codelibs.fess.es.client.FessEsClient; -import org.codelibs.fess.es.client.FessEsClient.SearchConditionBuilder; import org.codelibs.fess.exception.InvalidQueryException; import org.codelibs.fess.exception.ResultOffsetExceededException; import org.codelibs.fess.helper.FieldHelper; import org.codelibs.fess.helper.JobHelper; import org.codelibs.fess.helper.QueryHelper; import org.codelibs.fess.helper.SystemHelper; -import org.codelibs.fess.util.QueryResponseList; import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.lastaflute.web.Execute; import org.lastaflute.web.callback.ActionRuntime; import org.lastaflute.web.response.HtmlResponse; import org.lastaflute.web.response.render.RenderData; -import org.lastaflute.web.token.TxToken; -import org.lastaflute.web.util.LaRequestUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @author codelibs @@ -49,21 +49,35 @@ import org.lastaflute.web.util.LaRequestUtil; public class AdminSearchlistAction extends FessAdminAction { // =================================================================================== - // Attribute - // ========= + // Constant + // + private static final Logger logger = LoggerFactory + .getLogger(AdminSearchlistAction.class); + + // =================================================================================== + // Attribute + // ========= @Resource private SystemHelper systemHelper; @Resource protected FessEsClient fessEsClient; + @Resource protected FieldHelper fieldHelper; + @Resource protected QueryHelper queryHelper; @Resource protected JobHelper jobHelper; + @Resource + protected SearchService searchService; + + @Resource + protected HttpServletRequest request; + public List> documentItems; public String pageSize; @@ -87,18 +101,19 @@ public class AdminSearchlistAction extends FessAdminAction { public String execTime; // =================================================================================== - // Hook - // ====== + // Hook + // ====== @Override protected void setupHtmlData(final ActionRuntime runtime) { super.setupHtmlData(runtime); - runtime.registerData("helpLink", systemHelper.getHelpLink("searchList")); + runtime.registerData("helpLink", + systemHelper.getHelpLink("searchList")); } // =================================================================================== - // Search Execute - // ============== + // Search Execute + // ============== @Execute public HtmlResponse index(final SearchListForm form) { return asHtml(path_AdminSearchlist_IndexJsp); @@ -116,7 +131,8 @@ public class AdminSearchlistAction extends FessAdminAction { }); } - private void doSearchInternal(final RenderData data, final SearchListForm form) { + private void doSearchInternal(final RenderData data, + final SearchListForm form) { // init pager if (StringUtil.isBlank(form.start)) { form.start = String.valueOf(Constants.DEFAULT_START_COUNT); @@ -141,48 +157,41 @@ public class AdminSearchlistAction extends FessAdminAction { } } - final int offset = Integer.parseInt(form.start); - final int size = Integer.parseInt(form.num); - try { - documentItems = - fessEsClient.getDocumentList(fieldHelper.docIndex, fieldHelper.docType, searchRequestBuilder -> { - return SearchConditionBuilder.builder(searchRequestBuilder).administrativeAccess().offset(offset).size(size) - .responseFields(queryHelper.getResponseFields()).build(); - }); + final WebRenderData renderData = new WebRenderData(data); + searchService.search(request, form, renderData); } catch (final InvalidQueryException e) { - // TODO Log + if (logger.isDebugEnabled()) { + logger.debug(e.getMessage(), e); + } + throwValidationError(e.getMessageCode(), + () -> asHtml(path_ErrorJsp)); } catch (final ResultOffsetExceededException e) { - // TODO Log + if (logger.isDebugEnabled()) { + logger.debug(e.getMessage(), e); + } + throwValidationError(messages -> { + messages.addErrorsResultSizeExceeded(GLOBAL); + } , () -> asHtml(path_ErrorJsp)); } - final QueryResponseList queryResponseList = (QueryResponseList) documentItems; - final NumberFormat nf = NumberFormat.getInstance(LaRequestUtil.getRequest().getLocale()); - nf.setMaximumIntegerDigits(2); - nf.setMaximumFractionDigits(2); - try { - nf.format((double) queryResponseList.getExecTime() / 1000); - } catch (final Exception e) {} - - copyBeanToBean(documentItems, this, option -> option.include("pageSize", "currentPageNumber", "allRecordCount", "allPageCount", - "existNextPage", "existPrevPage", "currentStartRecordNumber", "currentEndRecordNumber", "pageNumberList")); } - //@Execute(validator = false) + @Execute public HtmlResponse search(final SearchListForm form) { return doSearch(form); } - //@Execute(validator = false) + @Execute public HtmlResponse prev(final SearchListForm form) { return doMove(form, -1); } - //@Execute(validator = false) + @Execute public HtmlResponse next(final SearchListForm form) { return doMove(form, 1); } - //@Execute(validator = false) + @Execute public HtmlResponse move(final SearchListForm form) { return doMove(form, 0); } @@ -218,15 +227,14 @@ public class AdminSearchlistAction extends FessAdminAction { } // ----------------------------------------------------- - // Confirm - // ------- + // Confirm + // ------- @Execute public HtmlResponse confirmDelete(final SearchListForm form) { return asHtml(path_AdminSearchlist_ConfirmDeleteJsp); } - @Execute(token = TxToken.VALIDATE) - //@Execute(validator = true, input = "index") + @Execute public HtmlResponse delete(final SearchListForm form) { return deleteByQuery(form); } @@ -240,20 +248,117 @@ public class AdminSearchlistAction extends FessAdminAction { if (!jobHelper.isCrawlProcessRunning()) { System.currentTimeMillis(); try { - final QueryBuilder query = QueryBuilders.termQuery(fieldHelper.docIdField, docId); - fessEsClient.deleteByQuery(fieldHelper.docIndex, fieldHelper.docType, query); + final QueryBuilder query = QueryBuilders + .termQuery(fieldHelper.docIdField, docId); + fessEsClient.deleteByQuery(fieldHelper.docIndex, + fieldHelper.docType, query); } catch (final Exception e) { // TODO Log + } } - } - } ); + }); thread.start(); saveInfo(messages -> messages.addSuccessDeleteSolrIndex(GLOBAL)); - return redirectWith(getClass(), moreUrl("search").params("query", form.query)); + return redirectWith(getClass(), + moreUrl("search").params("query", form.query)); } public boolean isSolrProcessRunning() { return jobHelper.isCrawlProcessRunning(); } + protected static class WebRenderData extends SearchRenderData { + private final RenderData data; + + WebRenderData(final RenderData data) { + this.data = data; + } + + @Override + public void setDocumentItems( + final List> documentItems) { + data.register("documentItems", documentItems); + super.setDocumentItems(documentItems); + } + + @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 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); + } + } } diff --git a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/SearchListForm.java b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/SearchListForm.java index ba6928060..319d8e452 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/searchlist/SearchListForm.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/searchlist/SearchListForm.java @@ -16,18 +16,30 @@ package org.codelibs.fess.app.web.admin.searchlist; import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import org.codelibs.core.lang.StringUtil; +import org.codelibs.fess.entity.FacetInfo; +import org.codelibs.fess.entity.GeoInfo; +import org.codelibs.fess.entity.SearchRequestParams; +import org.codelibs.fess.helper.QueryHelper; +import org.codelibs.fess.util.ComponentUtil; /** * @author codelibs * @author Keiichi Watanabe */ -public class SearchListForm implements Serializable { +//public class SearchListForm implements Serializable { +public class SearchListForm implements SearchRequestParams, Serializable { private static final long serialVersionUID = 1L; //@Maxbytelength(maxbytelength = 1000) public String query; + public String sort; + //@Digits(integer=10, fraction=0) public String start; @@ -37,9 +49,114 @@ public class SearchListForm implements Serializable { //@Digits(integer=10, fraction=0) public String num; + public String[] lang; + //@Required(target = "confirmDelete,delete") public String docId; //@Required(target = "confirmDelete") public String url; + + @Override + public String getQuery() { + return query; + } + + public Map fields = new HashMap<>(); + + public String additional[]; + + //@Maxbytelength(maxbytelength = 10) + public String op; + + @Override + public String getOperator() { + return op; + } + + @Override + public String[] getAdditional() { + return additional; + } + + @Override + public Map getFields() { + return fields; + } + + // geo + + public GeoInfo geo; + + // facet + + public FacetInfo facet; + + + private int startPosition = -1; + + private int pageSize = -1; + + @Override + public int getStartPosition() { + if (startPosition != -1) { + return startPosition; + } + + final QueryHelper queryHelper = ComponentUtil.getQueryHelper(); + if (StringUtil.isBlank(start)) { + startPosition = queryHelper.getDefaultStart(); + } else { + try { + startPosition = Integer.parseInt(start); + } catch (final NumberFormatException e) { + startPosition = queryHelper.getDefaultStart(); + } + } + start = String.valueOf(startPosition); + return startPosition; + } + + @Override + public int getPageSize() { + if (pageSize != -1) { + return pageSize; + } + + final QueryHelper queryHelper = ComponentUtil.getQueryHelper(); + if (StringUtil.isBlank(num)) { + pageSize = queryHelper.getDefaultPageSize(); + } else { + try { + pageSize = Integer.parseInt(num); + if (pageSize > queryHelper.getMaxPageSize() || pageSize <= 0) { + pageSize = queryHelper.getMaxPageSize(); + } + } catch (final NumberFormatException e) { + pageSize = queryHelper.getDefaultPageSize(); + } + } + num = String.valueOf(pageSize); + return pageSize; + } + + @Override + public String[] getLanguages() { + return lang; + } + + @Override + public GeoInfo getGeoInfo() { + return geo; + } + + @Override + public FacetInfo getFacetInfo() { + return facet; + } + + @Override + public String getSort() { + return sort; + } } diff --git a/src/main/resources/fess_label.properties b/src/main/resources/fess_label.properties index e4578e1bd..fbc83b19e 100644 --- a/src/main/resources/fess_label.properties +++ b/src/main/resources/fess_label.properties @@ -526,7 +526,7 @@ labels.crawling_session_name=Name labels.crawling_session_created_time=Created labels.crawling_session_expired_time=Expired labels.crawling_session_delete_all_link=Delete All -labels.crawling_session_delete_all_confirmation=Do you want to delete all? +labels.crawling_session_delete_all_confirmation=Do you really want to delete all? labels.crawling_session_delete_all_cancel=Cancel labels.crawling_session_CrawlerStatus=Crawling Status labels.crawling_session_CrawlerStartTime=Start Time (Crawling) @@ -734,7 +734,7 @@ labels.design_file_errorNotFound=Error Page (Not Found) labels.design_file_errorSystem=Error Page (System Error) labels.design_file_errorRedirect=Error Page (Redirect) labels.design_file_errorBadRequest=Error Page (BadRequest) -labels.design_delete_confirmation=Do you want to delete it? +labels.design_delete_confirmation=Do you really want to delete it? labels.design_title_edit_content=Edit Page View File labels.design_button_update=Update labels.design_button_back=Back @@ -808,6 +808,8 @@ labels.search_list_index_page=Type a search query. labels.search_list_title_confirm_delete=Delete Confirmation labels.search_list_url=URL labels.search_list_delete_link=Delete +labels.search_list_delete_cancel=Cancel +labels.search_list_delete_confirmation=Do you really want to delete? ({0}) labels.search_log_configuration=Search Log labels.search_log_search_word_search=Search Word labels.search_log_user_code_search=User ID @@ -822,7 +824,7 @@ labels.search_log_client_ip=IP labels.search_log_link_details=Details labels.search_log_link_delete=Delete labels.search_log_delete_all_link=Delete All -labels.search_log_delete_all_confirmation=Do you want to delete all? +labels.search_log_delete_all_confirmation=Do you really want to delete all? labels.search_log_sort_up=(Up) labels.search_log_sort_down=(Down) labels.search_log_download_csv=Download(CSV) @@ -852,7 +854,7 @@ labels.failure_url_url=URL labels.failure_url_last_access_time=Last Access labels.failure_url_link_confirm=Confirm labels.failure_url_delete_all_link=Delete All -labels.failure_url_delete_all_confirmation=Do you want to delete all? +labels.failure_url_delete_all_confirmation=Do you really want to delete all? labels.failure_url_delete_all_cancel=Cancel labels.failure_url_error_count=Error Count labels.failure_url_title_confirm=Failure URL Details @@ -932,7 +934,7 @@ labels.user_info_edit_code=User ID labels.user_info_edit_createddate=Created labels.user_info_edit_lastupdated=Last Accessed labels.user_info_delete_all_link=Delete All -labels.user_info_delete_all_confirmation=Do you want to delete all? +labels.user_info_delete_all_confirmation=Do you really want to delete all? labels.favorite_log_title=Popular URL labels.favorite_log_configuration=Popular URL labels.favorite_log_user_code_search=User ID @@ -943,7 +945,7 @@ labels.favorite_log_created_time=Submitted labels.favorite_log_link_details=Details labels.favorite_log_link_delete=Delete labels.favorite_log_delete_all_link=Delete All -labels.favorite_log_delete_all_confirmation=Do you want to delete it? +labels.favorite_log_delete_all_confirmation=Do you really want to delete it? labels.favorite_log_download_csv=Download (CSV) labels.favorite_log_search_term=Term labels.favorite_log_title_confirm=Details @@ -1011,7 +1013,7 @@ labels.joblog_title_confirm=Confirm Job Log labels.joblog_title_details=Job Log Details labels.joblog_title_list=Job Log List labels.joblog_delete_all_link=Delete All -labels.joblog_delete_all_confirmation=Do you want to delete all? +labels.joblog_delete_all_confirmation=Do you really want to delete all? labels.dict_configuration=Dictionary List labels.dict_list_title=Dictionary List labels.dict_list_link=Dictionaries diff --git a/src/main/webapp/WEB-INF/view/admin/searchlist/index.jsp b/src/main/webapp/WEB-INF/view/admin/searchlist/index.jsp index 53e6e1746..0594982fb 100644 --- a/src/main/webapp/WEB-INF/view/admin/searchlist/index.jsp +++ b/src/main/webapp/WEB-INF/view/admin/searchlist/index.jsp @@ -29,29 +29,14 @@
-
-
+
<%-- Box Header --%>

- -
- - -
-
- -
-
<%-- Box Body --%>
@@ -62,22 +47,27 @@
- + +
+ + +
+
+ +
+
<%-- List --%> -
-
- <%-- -

- -

- --%> -
- -
-

+ +

+
-

-
- -
-
-
    - -
  1. -

    - ${f:h(doc.contentTitle)} -

    -
    - ${doc.contentDescription} -
    - - - - - - - - -
    -
    -
  2. -
    -
- -
- +
diff --git a/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp b/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp index 158f3456b..05880e15a 100644 --- a/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp +++ b/src/main/webapp/WEB-INF/view/common/admin/sidebar.jsp @@ -6,7 +6,7 @@