fix #831 Add delete all button to suggest word pages

This commit is contained in:
yfujita 2017-01-20 19:53:02 +09:00
parent 7af5d6e7b6
commit c0daf07c6c
11 changed files with 383 additions and 1 deletions

View file

@ -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());
}
}

View file

@ -0,0 +1,4 @@
package org.codelibs.fess.app.web.admin.suggest;
public class SuggestForm {
}

View file

@ -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()));
}

View file

@ -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();

View file

@ -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");

View file

@ -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);
}

View file

@ -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

View file

@ -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

View file

@ -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

View 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>

View file

@ -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/">