fix #831 Add delete all button to suggest word pages
This commit is contained in:
parent
7af5d6e7b6
commit
c0daf07c6c
11 changed files with 383 additions and 1 deletions
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright 2012-2016 CodeLibs Project and the Others.
|
||||
*
|
||||
* 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 org.codelibs.fess.app.web.admin.suggest;
|
||||
|
||||
import org.codelibs.fess.app.web.base.FessAdminAction;
|
||||
import org.codelibs.fess.helper.SuggestHelper;
|
||||
import org.lastaflute.web.Execute;
|
||||
import org.lastaflute.web.response.HtmlResponse;
|
||||
import org.lastaflute.web.ruts.process.ActionRuntime;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @author yfujita
|
||||
*/
|
||||
public class AdminSuggestAction extends FessAdminAction {
|
||||
private static final Logger logger = LoggerFactory.getLogger(AdminSuggestAction.class);
|
||||
|
||||
// ===================================================================================
|
||||
// Attribute
|
||||
// =========
|
||||
@Resource
|
||||
protected SuggestHelper suggestHelper;
|
||||
|
||||
// ===================================================================================
|
||||
// Hook
|
||||
// ======
|
||||
@Override
|
||||
protected void setupHtmlData(final ActionRuntime runtime) {
|
||||
super.setupHtmlData(runtime);
|
||||
runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameSuggest()));
|
||||
runtime.registerData("totalWordsNum", suggestHelper.getAllWordsNum());
|
||||
runtime.registerData("documentWordsNum", suggestHelper.getDocumentWordsNum());
|
||||
runtime.registerData("queryWordsNum", suggestHelper.getQueryWordsNum());
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
// Execute
|
||||
// ========
|
||||
@Execute
|
||||
public HtmlResponse index() {
|
||||
saveToken();
|
||||
return asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class);
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse deleteAllWords() {
|
||||
if (!suggestHelper.deleteAllWords()) {
|
||||
throwValidationError(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL),
|
||||
() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
|
||||
}
|
||||
saveInfo(messages -> messages.addSuccessDeleteDocFromIndex(GLOBAL));
|
||||
verifyToken(() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
|
||||
return redirect(getClass());
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse deleteDocumentWords() {
|
||||
if (!suggestHelper.deleteDocumentWords()) {
|
||||
throwValidationError(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL),
|
||||
() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
|
||||
}
|
||||
saveInfo(messages -> messages.addSuccessDeleteDocFromIndex(GLOBAL));
|
||||
verifyToken(() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
|
||||
return redirect(getClass());
|
||||
}
|
||||
|
||||
@Execute
|
||||
public HtmlResponse deleteQueryWords() {
|
||||
if (!suggestHelper.deleteQueryWords()) {
|
||||
throwValidationError(messages -> messages.addErrorsFailedToDeleteDocInAdmin(GLOBAL),
|
||||
() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
|
||||
}
|
||||
saveInfo(messages -> messages.addSuccessDeleteDocFromIndex(GLOBAL));
|
||||
verifyToken(() -> asHtml(path_AdminSuggest_AdminSuggestJsp).useForm(SuggestForm.class));
|
||||
return redirect(getClass());
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
package org.codelibs.fess.app.web.admin.suggest;
|
||||
|
||||
public class SuggestForm {
|
||||
}
|
|
@ -239,7 +239,7 @@ public class WebConfig extends BsWebConfig implements CrawlingConfig {
|
|||
rhList.toArray(new org.codelibs.fess.crawler.client.http.RequestHeader[rhList.size()]));
|
||||
|
||||
// proxy credentials
|
||||
if (paramMap.get("proxyUsername") == null && paramMap.get("proxyPassword") == null) {
|
||||
if (paramMap.get("proxyUsername") != null && paramMap.get("proxyPassword") != null) {
|
||||
paramMap.put(HcHttpClient.PROXY_CREDENTIALS_PROPERTY, new UsernamePasswordCredentials(paramMap.remove("proxyUsername")
|
||||
.toString(), paramMap.remove("proxyPassword").toString()));
|
||||
}
|
||||
|
|
|
@ -43,14 +43,18 @@ import org.codelibs.fess.mylasta.direction.FessConfig;
|
|||
import org.codelibs.fess.suggest.Suggester;
|
||||
import org.codelibs.fess.suggest.constants.FieldNames;
|
||||
import org.codelibs.fess.suggest.entity.SuggestItem;
|
||||
import org.codelibs.fess.suggest.index.SuggestDeleteResponse;
|
||||
import org.codelibs.fess.suggest.index.contents.document.ESSourceReader;
|
||||
import org.codelibs.fess.suggest.settings.SuggestSettings;
|
||||
import org.codelibs.fess.suggest.util.SuggestUtil;
|
||||
import org.codelibs.fess.util.ComponentUtil;
|
||||
import org.elasticsearch.index.query.BoolQueryBuilder;
|
||||
import org.elasticsearch.index.query.QueryBuilders;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class SuggestHelper {
|
||||
private static final Logger logger = LoggerFactory.getLogger(SuggestHelper.class);
|
||||
|
||||
private static final String TEXT_SEP = " ";
|
||||
|
||||
|
@ -179,6 +183,48 @@ public class SuggestHelper {
|
|||
SuggestUtil.deleteByQuery(fessEsClient, suggester.getIndex(), suggester.getType(), boolQueryBuilder);
|
||||
}
|
||||
|
||||
public long getAllWordsNum() {
|
||||
return suggester.getAllWordsNum();
|
||||
}
|
||||
|
||||
public long getDocumentWordsNum() {
|
||||
return suggester.getDocumentWordsNum();
|
||||
}
|
||||
|
||||
public long getQueryWordsNum() {
|
||||
return suggester.getQueryWordsNum();
|
||||
}
|
||||
|
||||
public boolean deleteAllWords() {
|
||||
final SuggestDeleteResponse response = suggester.indexer().deleteAll();
|
||||
if (response.hasError()) {
|
||||
logger.warn("Failed to delete all words.", response.getErrors().get(0));
|
||||
return false;
|
||||
}
|
||||
suggester.refresh();
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean deleteDocumentWords() {
|
||||
final SuggestDeleteResponse response = suggester.indexer().deleteDocumentWords();
|
||||
if (response.hasError()) {
|
||||
logger.warn("Failed to delete document words.", response.getErrors().get(0));
|
||||
return false;
|
||||
}
|
||||
suggester.refresh();
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean deleteQueryWords() {
|
||||
final SuggestDeleteResponse response = suggester.indexer().deleteQueryWords();
|
||||
if (response.hasError()) {
|
||||
logger.warn("Failed to delete query words.", response.getErrors().get(0));
|
||||
return false;
|
||||
}
|
||||
suggester.refresh();
|
||||
return true;
|
||||
}
|
||||
|
||||
public void refreshWords() {
|
||||
deleteAllBadWords();
|
||||
storeAllElevateWords();
|
||||
|
|
|
@ -297,6 +297,9 @@ public interface FessHtmlPath {
|
|||
/** The path of the HTML: /admin/searchlist/admin_searchlist_edit.jsp */
|
||||
HtmlNext path_AdminSearchlist_AdminSearchlistEditJsp = new HtmlNext("/admin/searchlist/admin_searchlist_edit.jsp");
|
||||
|
||||
/** The path of the HTML: /admin/suggest/admin_suggest.jsp */
|
||||
HtmlNext path_AdminSuggest_AdminSuggestJsp = new HtmlNext("/admin/suggest/admin_suggest.jsp");
|
||||
|
||||
/** The path of the HTML: /admin/systeminfo/admin_systeminfo.jsp */
|
||||
HtmlNext path_AdminSysteminfo_AdminSysteminfoJsp = new HtmlNext("/admin/systeminfo/admin_systeminfo.jsp");
|
||||
|
||||
|
|
|
@ -810,6 +810,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
/** The key of the configuration. e.g. accesstoken */
|
||||
String ONLINE_HELP_NAME_ACCESSTOKEN = "online.help.name.accesstoken";
|
||||
|
||||
/** The key of the configuration. e.g. suggest */
|
||||
String ONLINE_HELP_NAME_SUGGEST = "online.help.name.suggest";
|
||||
|
||||
/** The key of the configuration. e.g. ja */
|
||||
String ONLINE_HELP_SUPPORTED_LANGS = "online.help.supported.langs";
|
||||
|
||||
|
@ -3613,6 +3616,13 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
*/
|
||||
String getOnlineHelpNameAccesstoken();
|
||||
|
||||
/**
|
||||
* Get the value for the key 'online.help.name.suggest'. <br>
|
||||
* The value is, e.g. suggest <br>
|
||||
* @return The value of found property. (NotNull: if not found, exception but basically no way)
|
||||
*/
|
||||
String getOnlineHelpNameSuggest();
|
||||
|
||||
/**
|
||||
* Get the value for the key 'online.help.supported.langs'. <br>
|
||||
* The value is, e.g. ja <br>
|
||||
|
@ -5756,6 +5766,10 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction
|
|||
return get(FessConfig.ONLINE_HELP_NAME_ACCESSTOKEN);
|
||||
}
|
||||
|
||||
public String getOnlineHelpNameSuggest() {
|
||||
return get(FessConfig.ONLINE_HELP_NAME_SUGGEST);
|
||||
}
|
||||
|
||||
public String getOnlineHelpSupportedLangs() {
|
||||
return get(FessConfig.ONLINE_HELP_SUPPORTED_LANGS);
|
||||
}
|
||||
|
|
|
@ -417,6 +417,7 @@ online.help.name.backup=backup
|
|||
online.help.name.upgrade=upgrade
|
||||
online.help.name.esreq=esreq
|
||||
online.help.name.accesstoken=accesstoken
|
||||
online.help.name.suggest=suggest
|
||||
|
||||
online.help.supported.langs=ja
|
||||
|
||||
|
|
|
@ -171,6 +171,7 @@ labels.menu_user=User
|
|||
labels.menu_role=Role
|
||||
labels.menu_group=Group
|
||||
labels.menu_suggest=Suggest
|
||||
labels.menu_suggest_word=Suggest Word
|
||||
labels.menu_elevate_word=Additional Word
|
||||
labels.menu_bad_word=Bad Word
|
||||
labels.menu_system_log=System Info
|
||||
|
@ -696,6 +697,13 @@ labels.access_token_token=Token
|
|||
labels.access_token_expires=Expired
|
||||
labels.access_token_parameter_name=Parameter Name
|
||||
labels.access_token_updated_time=Created
|
||||
labels.suggest_word_configuration=Suggest Word
|
||||
labels.suggest_word_title_details=Suggest Word
|
||||
labels.suggest_word_type=Word Type
|
||||
labels.suggest_word_number=Word Number
|
||||
labels.suggest_word_type_all=All
|
||||
labels.suggest_word_type_document=Document
|
||||
labels.suggest_word_type_query=Query
|
||||
labels.elevate_word_configuration=Additional Word
|
||||
labels.elevate_word_title_details=Additional Word
|
||||
labels.elevate_word_link_list=List
|
||||
|
|
|
@ -171,6 +171,7 @@ labels.menu_user=User
|
|||
labels.menu_role=Role
|
||||
labels.menu_group=Group
|
||||
labels.menu_suggest=Suggest
|
||||
labels.menu_suggest_word=Suggest Word
|
||||
labels.menu_elevate_word=Additional Word
|
||||
labels.menu_bad_word=Bad Word
|
||||
labels.menu_system_log=System Info
|
||||
|
@ -696,6 +697,13 @@ labels.access_token_token=Token
|
|||
labels.access_token_expires=Expired
|
||||
labels.access_token_parameter_name=Parameter Name
|
||||
labels.access_token_updated_time=Created
|
||||
labels.suggest_word_configuration=Suggest Word
|
||||
labels.suggest_word_title_details=Suggest Word
|
||||
labels.suggest_word_type=Word Type
|
||||
labels.suggest_word_number=Word Number
|
||||
labels.suggest_word_type_all=All
|
||||
labels.suggest_word_type_document=Document
|
||||
labels.suggest_word_type_query=Query
|
||||
labels.elevate_word_configuration=Additional Word
|
||||
labels.elevate_word_title_details=Additional Word
|
||||
labels.elevate_word_link_list=List
|
||||
|
|
196
src/main/webapp/WEB-INF/view/admin/suggest/admin_suggest.jsp
Normal file
196
src/main/webapp/WEB-INF/view/admin/suggest/admin_suggest.jsp
Normal file
|
@ -0,0 +1,196 @@
|
|||
<%@page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%><!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title><la:message key="labels.admin_brand_title" /> | <la:message
|
||||
key="labels.suggest_word_configuration" /></title>
|
||||
<jsp:include page="/WEB-INF/view/common/admin/head.jsp"></jsp:include>
|
||||
</head>
|
||||
<body class="hold-transition skin-blue sidebar-mini">
|
||||
<div class="wrapper">
|
||||
<jsp:include page="/WEB-INF/view/common/admin/header.jsp"></jsp:include>
|
||||
<jsp:include page="/WEB-INF/view/common/admin/sidebar.jsp">
|
||||
<jsp:param name="menuCategoryType" value="suggest" />
|
||||
<jsp:param name="menuType" value="badWord" />
|
||||
</jsp:include>
|
||||
<div class="content-wrapper">
|
||||
<section class="content-header">
|
||||
<h1>
|
||||
<la:message key="labels.suggest_word_title_details" />
|
||||
</h1>
|
||||
</section>
|
||||
<section class="content">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="box box-primary">
|
||||
<!-- /.box-header -->
|
||||
<div class="box-body">
|
||||
<%-- Message --%>
|
||||
<div>
|
||||
<la:info id="msg" message="true">
|
||||
<div class="alert alert-info">${msg}</div>
|
||||
</la:info>
|
||||
<la:errors />
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-12">
|
||||
<la:form action="/admin/suggest/">
|
||||
<table class="table table-bordered table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="col-md-3"><la:message key="labels.suggest_word_type" /></th>
|
||||
<th class="col-md-2 text-center"><la:message key="labels.suggest_word_number" /></th>
|
||||
<th class="text-center"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><la:message key="labels.suggest_word_type_all" /></td>
|
||||
<td class="text-right">${f:h(totalWordsNum)}</td>
|
||||
<td class="text-center">
|
||||
<button type="button" class="btn btn-danger" name="deleteAllWords"
|
||||
data-toggle="modal" data-target="#confirmToAllDelete"
|
||||
value="<la:message key="labels.design_delete_button" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.design_delete_button" />
|
||||
</button>
|
||||
<div class="modal modal-danger fade" id="confirmToAllDelete"
|
||||
tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title">
|
||||
<la:message key="labels.crud_title_delete" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<la:message key="labels.crud_delete_confirmation" />
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline pull-left"
|
||||
data-dismiss="modal">
|
||||
<la:message key="labels.crud_button_cancel" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-outline btn-danger"
|
||||
name="deleteAllWords"
|
||||
value="<la:message key="labels.crud_button_delete" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crud_button_delete" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><la:message key="labels.suggest_word_type_document" /></td>
|
||||
<td class="text-right">${f:h(documentWordsNum)}</td>
|
||||
<td class="text-center">
|
||||
<button type="button" class="btn btn-danger" name="deleteDocumentWords"
|
||||
data-toggle="modal" data-target="#confirmToDocumentDelete"
|
||||
value="<la:message key="labels.design_delete_button" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.design_delete_button" />
|
||||
</button>
|
||||
<div class="modal modal-danger fade" id="confirmToDocumentDelete"
|
||||
tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title">
|
||||
<la:message key="labels.crud_title_delete" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<la:message key="labels.crud_delete_confirmation" />
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline pull-left"
|
||||
data-dismiss="modal">
|
||||
<la:message key="labels.crud_button_cancel" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-outline btn-danger"
|
||||
name="deleteDocumentWords"
|
||||
value="<la:message key="labels.crud_button_delete" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crud_button_delete" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><la:message key="labels.suggest_word_type_query" /></td>
|
||||
<td class="text-right">${f:h(queryWordsNum)}</td>
|
||||
<td class="text-center">
|
||||
<button type="button" class="btn btn-danger" name="deleteQueryWords"
|
||||
data-toggle="modal" data-target="#confirmToQueryDelete"
|
||||
value="<la:message key="labels.design_delete_button" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.design_delete_button" />
|
||||
</button>
|
||||
<div class="modal modal-danger fade" id="confirmToQueryDelete"
|
||||
tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal"
|
||||
aria-label="Close">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title">
|
||||
<la:message key="labels.crud_title_delete" />
|
||||
</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>
|
||||
<la:message key="labels.crud_delete_confirmation" />
|
||||
</p>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-outline pull-left"
|
||||
data-dismiss="modal">
|
||||
<la:message key="labels.crud_button_cancel" />
|
||||
</button>
|
||||
<button type="submit" class="btn btn-outline btn-danger"
|
||||
name="deleteQueryWords"
|
||||
value="<la:message key="labels.crud_button_delete" />">
|
||||
<i class="fa fa-trash"></i>
|
||||
<la:message key="labels.crud_button_delete" />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</la:form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<jsp:include page="/WEB-INF/view/common/admin/footer.jsp"></jsp:include>
|
||||
</div>
|
||||
<jsp:include page="/WEB-INF/view/common/admin/foot.jsp"></jsp:include>
|
||||
</body>
|
||||
</html>
|
|
@ -194,6 +194,14 @@
|
|||
class="fa fa-angle-left pull-right"></i></a>
|
||||
<ul class="treeview-menu">
|
||||
|
||||
<li
|
||||
<c:if test="${param.menuType=='elevateWord'}">class="active"</c:if>><la:link
|
||||
href="/admin/suggest/">
|
||||
<i class='fa fa-circle-o'></i>
|
||||
<span><la:message key="labels.menu_suggest_word" /></span>
|
||||
<!-- <span><la:message key="labels.menu_elevate_word" /></span>-->
|
||||
</la:link></li>
|
||||
|
||||
<li
|
||||
<c:if test="${param.menuType=='elevateWord'}">class="active"</c:if>><la:link
|
||||
href="/admin/elevateword/">
|
||||
|
|
Loading…
Add table
Reference in a new issue