diff --git a/pom.xml b/pom.xml index 602ed9d51..6d15e5353 100644 --- a/pom.xml +++ b/pom.xml @@ -108,7 +108,6 @@ org/codelibs/fess/app/web/admin/SuggestElevateWordForm.java org/codelibs/fess/app/web/admin/DocumentForm.java org/codelibs/fess/app/web/admin/DataForm.java - org/codelibs/fess/app/web/admin/SuggestBadWordAction.java org/codelibs/fess/app/web/admin/IndexAction.java org/codelibs/fess/app/web/admin/LogAction.java org/codelibs/fess/app/web/admin/FailureUrlAction.java @@ -118,7 +117,6 @@ org/codelibs/fess/app/web/admin/SystemInfoAction.java org/codelibs/fess/app/web/admin/DataAction.java org/codelibs/fess/app/web/admin/CrawlingSessionAction.java - org/codelibs/fess/app/web/admin/SuggestBadWordForm.java org/codelibs/fess/app/web/admin/CrawlingSessionForm.java org/codelibs/fess/app/web/admin/WizardForm.java org/codelibs/fess/app/web/admin/FailureUrlForm.java diff --git a/src/main/java/org/codelibs/fess/app/web/admin/SuggestBadWordAction.java b/src/main/java/org/codelibs/fess/app/web/admin/SuggestBadWordAction.java deleted file mode 100644 index 98a319979..000000000 --- a/src/main/java/org/codelibs/fess/app/web/admin/SuggestBadWordAction.java +++ /dev/null @@ -1,453 +0,0 @@ -/* - * Copyright 2009-2015 the 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; - -import java.beans.Beans; -import java.io.BufferedInputStream; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStreamReader; -import java.io.OutputStreamWriter; -import java.io.Reader; -import java.io.Writer; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletResponse; - -import org.apache.commons.io.IOUtils; -import org.codelibs.core.beans.util.BeanUtil; -import org.codelibs.core.io.CopyUtil; -import org.codelibs.core.misc.DynamicProperties; -import org.codelibs.fess.Constants; -import org.codelibs.fess.FessSystemException; -import org.codelibs.fess.annotation.Token; -import org.codelibs.fess.app.web.base.FessAdminAction; -import org.codelibs.fess.beans.FessBeans; -import org.codelibs.fess.crud.CommonConstants; -import org.codelibs.fess.crud.CrudMessageException; -import org.codelibs.fess.crud.util.SAStrutsUtil; -import org.codelibs.fess.es.exentity.SuggestBadWord; -import org.codelibs.fess.exception.SSCActionMessagesException; -import org.codelibs.fess.helper.SuggestHelper; -import org.codelibs.fess.helper.SystemHelper; -import org.codelibs.fess.app.pager.SuggestBadWordPager; -import org.codelibs.fess.app.service.SuggestBadWordService; -import org.lastaflute.web.util.LaResponseUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SuggestBadWordAction extends FessAdminAction { - - private static final Logger logger = LoggerFactory.getLogger(SuggestBadWordAction.class); - - // for list - - public List suggestBadWordItems; - - // for edit/confirm/delete - - //@ActionForm - @Resource - protected SuggestBadWordForm suggestBadWordForm; - - @Resource - protected SuggestBadWordService suggestBadWordService; - - @Resource - protected SuggestBadWordPager suggestBadWordPager; - - @Resource - protected SystemHelper systemHelper; - - @Resource - protected SuggestHelper suggestHelper; - - @Resource - protected DynamicProperties crawlerProperties; - - protected String displayList(final boolean redirect) { - // page navi - suggestBadWordItems = suggestBadWordService.getSuggestBadWordList(suggestBadWordPager); - - // restore from pager - BeanUtil.copyBeanToBean(suggestBadWordPager, suggestBadWordForm.searchParams, - option -> option.exclude(CommonConstants.PAGER_CONVERSION_RULE)); - - if (redirect) { - return "index?redirect=true"; - } else { - return "index.jsp"; - } - } - - //@Execute(validator = false, input = "error.jsp") - public String index() { - return displayList(false); - } - - //@Execute(validator = false, input = "error.jsp", urlPattern = "list/{pageNumber}") - public String list() { - // page navi - if (StringUtil.isNotBlank(suggestBadWordForm.pageNumber)) { - try { - suggestBadWordPager.setCurrentPageNumber(Integer.parseInt(suggestBadWordForm.pageNumber)); - } catch (final NumberFormatException e) { - if (logger.isDebugEnabled()) { - logger.debug("Invalid value: " + suggestBadWordForm.pageNumber, e); - } - } - } - - return displayList(false); - } - - //@Execute(validator = false, input = "error.jsp") - public String search() { - BeanUtil.copyBeanToBean(suggestBadWordForm.searchParams, suggestBadWordPager, - option -> option.exclude(CommonConstants.PAGER_CONVERSION_RULE)); - - return displayList(false); - } - - //@Execute(validator = false, input = "error.jsp") - public String reset() { - suggestBadWordPager.clear(); - - return displayList(false); - } - - //@Execute(validator = false, input = "error.jsp") - public String back() { - return displayList(false); - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp") - public String editagain() { - return "edit.jsp"; - } - - //@Execute(validator = false, input = "error.jsp", urlPattern = "confirmpage/{crudMode}/{id}") - public String confirmpage() { - if (suggestBadWordForm.crudMode != CommonConstants.CONFIRM_MODE) { - throw new ActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.CONFIRM_MODE, - suggestBadWordForm.crudMode }); - } - - loadSuggestBadWord(); - - return "confirm.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp") - public String createpage() { - // page navi - suggestBadWordForm.initialize(); - suggestBadWordForm.crudMode = CommonConstants.CREATE_MODE; - - return "edit.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp", urlPattern = "editpage/{crudMode}/{id}") - public String editpage() { - if (suggestBadWordForm.crudMode != CommonConstants.EDIT_MODE) { - throw new ActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.EDIT_MODE, - suggestBadWordForm.crudMode }); - } - - loadSuggestBadWord(); - - return "edit.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp") - public String editfromconfirm() { - suggestBadWordForm.crudMode = CommonConstants.EDIT_MODE; - - loadSuggestBadWord(); - - return "edit.jsp"; - } - - @Token(save = false, validate = true, keep = true) - //@Execute(validator = true, input = "edit.jsp") - public String confirmfromcreate() { - return "confirm.jsp"; - } - - @Token(save = false, validate = true, keep = true) - //@Execute(validator = true, input = "edit.jsp") - public String confirmfromupdate() { - return "confirm.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp", urlPattern = "deletepage/{crudMode}/{id}") - public String deletepage() { - if (suggestBadWordForm.crudMode != CommonConstants.DELETE_MODE) { - throw new ActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.DELETE_MODE, - suggestBadWordForm.crudMode }); - } - - loadSuggestBadWord(); - - return "confirm.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp") - public String deletefromconfirm() { - suggestBadWordForm.crudMode = CommonConstants.DELETE_MODE; - - loadSuggestBadWord(); - - return "confirm.jsp"; - } - - protected Map createKeyMap() { - final Map keys = new HashMap(); - - keys.put("id", suggestBadWordForm.id); - - return keys; - } - - public String getHelpLink() { - return systemHelper.getHelpLink("suggestBadWord"); - } - - protected void loadSuggestBadWord() { - - final SuggestBadWord suggestBadWord = suggestBadWordService.getSuggestBadWord(createKeyMap()); - if (suggestBadWord == null) { - // throw an exception - throw new SSCActionMessagesException("errors.crud_could_not_find_crud_table", new Object[] { suggestBadWordForm.id }); - } - - BeanUtil.copyBeanToBean(suggestBadWord, suggestBadWordForm, option -> option.exclude("searchParams", "mode")); - } - - protected SuggestBadWord createSuggestBadWord() { - SuggestBadWord suggestBadWord; - final String username = systemHelper.getUsername(); - final long currentTime = systemHelper.getCurrentTimeAsLong(); - if (suggestBadWordForm.crudMode == CommonConstants.EDIT_MODE) { - suggestBadWord = suggestBadWordService.getSuggestBadWord(createKeyMap()); - if (suggestBadWord == null) { - // throw an exception - throw new SSCActionMessagesException("errors.crud_could_not_find_crud_table", new Object[] { suggestBadWordForm.id }); - } - } else { - suggestBadWord = new SuggestBadWord(); - suggestBadWord.setCreatedBy(username); - suggestBadWord.setCreatedTime(currentTime); - } - suggestBadWord.setUpdatedBy(username); - suggestBadWord.setUpdatedTime(currentTime); - BeanUtil.copyBeanToBean(suggestBadWordForm, suggestBadWord, option -> option.exclude(CommonConstants.COMMON_CONVERSION_RULE)); - - return suggestBadWord; - } - - //@Execute(validator = false, input = "error.jsp") - public String delete() { - if (suggestBadWordForm.crudMode != CommonConstants.DELETE_MODE) { - throw new SSCActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.DELETE_MODE, - suggestBadWordForm.crudMode }); - } - - try { - final SuggestBadWord suggestBadWord = suggestBadWordService.getSuggestBadWord(createKeyMap()); - if (suggestBadWord == null) { - // throw an exception - throw new SSCActionMessagesException("errors.crud_could_not_find_crud_table", new Object[] { suggestBadWordForm.id }); - } - - suggestBadWordService.delete(suggestBadWord); - suggestHelper.deleteAllBadWord(); - suggestHelper.updateSolrBadwordFile(); - SAStrutsUtil.addSessionMessage("success.crud_delete_crud_table"); - - return displayList(true); - } catch (final ActionMessagesException e) { - logger.error(e.getMessage(), e); - throw e; - } catch (final CrudMessageException e) { - logger.error(e.getMessage(), e); - throw new SSCActionMessagesException(e, e.getMessageId(), e.getArgs()); - } catch (final Exception e) { - logger.error(e.getMessage(), e); - throw new SSCActionMessagesException(e, "errors.crud_failed_to_delete_crud_table"); - } - } - - @Token(save = false, validate = true) - //@Execute(validator = true, input = "edit.jsp") - public String create() { - try { - final SuggestBadWord suggestBadWord = createSuggestBadWord(); - suggestBadWordService.store(suggestBadWord); - suggestHelper.deleteAllBadWord(); - suggestHelper.updateSolrBadwordFile(); - SAStrutsUtil.addSessionMessage("success.crud_create_crud_table"); - - return displayList(true); - } catch (final ActionMessagesException e) { - logger.error(e.getMessage(), e); - throw e; - } catch (final CrudMessageException e) { - logger.error(e.getMessage(), e); - throw new ActionMessagesException(e.getMessageId(), e.getArgs()); - } catch (final Exception e) { - logger.error(e.getMessage(), e); - throw new ActionMessagesException("errors.crud_failed_to_create_crud_table"); - } - } - - @Token(save = false, validate = true) - //@Execute(validator = true, input = "edit.jsp") - public String update() { - try { - final SuggestBadWord suggestBadWord = createSuggestBadWord(); - suggestBadWordService.store(suggestBadWord); - suggestHelper.deleteAllBadWord(); - suggestHelper.updateSolrBadwordFile(); - SAStrutsUtil.addSessionMessage("success.crud_update_crud_table"); - - return displayList(true); - } catch (final ActionMessagesException e) { - logger.error(e.getMessage(), e); - throw e; - } catch (final CrudMessageException e) { - logger.error(e.getMessage(), e); - throw new ActionMessagesException(e.getMessageId(), e.getArgs()); - } catch (final Exception e) { - logger.error(e.getMessage(), e); - throw new ActionMessagesException("errors.crud_failed_to_update_crud_table"); - } - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "downloadpage") - public String downloadpage() { - return "download.jsp"; - } - - @Token(save = false, validate = true) - //@Execute(validator = false, input = "downloadpage") - public String download() { - - final HttpServletResponse response = LaResponseUtil.getResponse(); - response.setContentType("application/octet-stream"); - response.setHeader("Content-Disposition", "attachment; filename=\"" + "badword.csv" + "\""); - - try (Writer writer = - new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), crawlerProperties.getProperty( - Constants.CSV_FILE_ENCODING_PROPERTY, Constants.UTF_8)))) { - suggestBadWordService.exportCsv(writer); - } catch (final Exception e) { - logger.error("Failed to export data.", e); - throw new SSCActionMessagesException(e, "errors.failed_to_export_data"); - } - return null; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "uploadpage") - public String uploadpage() { - return "upload.jsp"; - } - - @Token(save = false, validate = true) - //@Execute(validator = true, input = "uploadpage") - public String upload() { - BufferedInputStream is = null; - File tempFile = null; - FileOutputStream fos = null; - final byte[] b = new byte[20]; - try { - tempFile = File.createTempFile("suggestbadword-import-", ".csv"); - is = new BufferedInputStream(suggestBadWordForm.suggestBadWordFile.getInputStream()); - is.mark(20); - if (is.read(b, 0, 20) <= 0) { - throw new FessSystemException("no import data."); - } - is.reset(); - fos = new FileOutputStream(tempFile); - CopyUtil.copy(is, fos); - } catch (final Exception e) { - if (tempFile != null && !tempFile.delete()) { - logger.warn("Could not delete " + tempFile.getAbsolutePath()); - } - logger.error("Failed to import data.", e); - throw new SSCActionMessagesException(e, "errors.failed_to_import_data"); - } finally { - IOUtils.closeQuietly(is); - IOUtils.closeQuietly(fos); - } - - final File oFile = tempFile; - try { - final String head = new String(b, Constants.UTF_8); - if (!(head.startsWith("\"BadWord\"") || head.startsWith("BadWord"))) { - logger.error("Unknown file: " + suggestBadWordForm.suggestBadWordFile); - throw new SSCActionMessagesException("errors.unknown_import_file"); - } - final String enc = crawlerProperties.getProperty(Constants.CSV_FILE_ENCODING_PROPERTY, Constants.UTF_8); - new Thread(() -> { - Reader reader = null; - try { - reader = new BufferedReader(new InputStreamReader(new FileInputStream(oFile), enc)); - suggestBadWordService.importCsv(reader); - } catch (final Exception e) { - logger.error("Failed to import data.", e); - throw new FessSystemException("Failed to import data.", e); - } finally { - if (!oFile.delete()) { - logger.warn("Could not delete " + oFile.getAbsolutePath()); - } - IOUtils.closeQuietly(reader); - suggestHelper.deleteAllBadWord(); - suggestHelper.updateSolrBadwordFile(); - } - }).start(); - } catch (final ActionMessagesException e) { - if (!oFile.delete()) { - logger.warn("Could not delete " + oFile.getAbsolutePath()); - } - throw e; - } catch (final Exception e) { - if (!oFile.delete()) { - logger.warn("Could not delete " + oFile.getAbsolutePath()); - } - logger.error("Failed to import data.", e); - throw new SSCActionMessagesException(e, "errors.failed_to_import_data"); - } - SAStrutsUtil.addSessionMessage("success.upload_suggest_bad_word"); - - return "uploadpage?redirect=true"; - } -} diff --git a/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/AdminSuggestbadwordAction.java b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/AdminSuggestbadwordAction.java new file mode 100644 index 000000000..540582630 --- /dev/null +++ b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/AdminSuggestbadwordAction.java @@ -0,0 +1,389 @@ +/* + * Copyright 2009-2015 the 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.suggestbadword; + +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.Reader; +import java.io.Writer; +import java.util.HashMap; +import java.util.Map; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.io.IOUtils; +import org.codelibs.core.io.CopyUtil; +import org.codelibs.core.misc.DynamicProperties; +import org.codelibs.fess.Constants; +import org.codelibs.fess.FessSystemException; +import org.codelibs.fess.annotation.Token; +import org.codelibs.fess.app.pager.SuggestBadWordPager; +import org.codelibs.fess.app.service.SuggestBadWordService; +import org.codelibs.fess.app.web.base.FessAdminAction; +import org.codelibs.fess.crud.CommonConstants; +import org.codelibs.fess.es.exentity.SuggestBadWord; +import org.codelibs.fess.helper.SystemHelper; +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.util.LaResponseUtil; +import org.lastaflute.web.validation.VaErrorHook; + +/** + * @author shinsuke + */ +public class AdminSuggestbadwordAction extends FessAdminAction { + + // =================================================================================== + // Attribute + // ========= + @Resource + private SuggestBadWordService suggestBadWordService; + @Resource + private SuggestBadWordPager suggestBadWordPager; + @Resource + private SystemHelper systemHelper; + @Resource + protected DynamicProperties crawlerProperties; + + // =================================================================================== + // Hook + // ====== + @Override + protected void setupHtmlData(final ActionRuntime runtime) { + super.setupHtmlData(runtime); + runtime.registerData("helpLink", systemHelper.getHelpLink("suggestBadWord")); + } + + // =================================================================================== + // Search Execute + // ============== + @Execute + public HtmlResponse index(final SuggestBadWordSearchForm form) { + return asHtml(path_AdminSuggestbadword_IndexJsp).renderWith(data -> { + searchPaging(data, form); + }); + } + + @Execute + public HtmlResponse list(final Integer pageNumber, final SuggestBadWordSearchForm form) { + suggestBadWordPager.setCurrentPageNumber(pageNumber); + return asHtml(path_AdminSuggestbadword_IndexJsp).renderWith(data -> { + searchPaging(data, form); + }); + } + + @Execute + public HtmlResponse search(final SuggestBadWordSearchForm form) { + copyBeanToBean(form.searchParams, suggestBadWordPager, op -> op.exclude(CommonConstants.PAGER_CONVERSION_RULE)); + return asHtml(path_AdminSuggestbadword_IndexJsp).renderWith(data -> { + searchPaging(data, form); + }); + } + + @Execute + public HtmlResponse reset(final SuggestBadWordSearchForm form) { + suggestBadWordPager.clear(); + return asHtml(path_AdminSuggestbadword_IndexJsp).renderWith(data -> { + searchPaging(data, form); + }); + } + + @Execute + public HtmlResponse back(final SuggestBadWordSearchForm form) { + return asHtml(path_AdminSuggestbadword_IndexJsp).renderWith(data -> { + searchPaging(data, form); + }); + } + + protected void searchPaging(final RenderData data, final SuggestBadWordSearchForm form) { + data.register("suggestBadWordItems", suggestBadWordService.getSuggestBadWordList(suggestBadWordPager)); // page navi + // restore from pager + copyBeanToBean(suggestBadWordPager, form.searchParams, op -> op.exclude(CommonConstants.PAGER_CONVERSION_RULE)); + } + + // =================================================================================== + // Edit Execute + // ============ + // ----------------------------------------------------- + // Entry Page + // ---------- + @Token(save = true, validate = false) + @Execute + public HtmlResponse createpage(final SuggestBadWordEditForm form) { + form.initialize(); + form.crudMode = CommonConstants.CREATE_MODE; + return asHtml(path_AdminSuggestbadword_EditJsp); + } + + @Token(save = true, validate = false) + @Execute + public HtmlResponse editpage(final int crudMode, final String id, final SuggestBadWordEditForm form) { + form.crudMode = crudMode; + form.id = id; + verifyCrudMode(form, CommonConstants.EDIT_MODE); + loadSuggestBadWord(form); + return asHtml(path_AdminSuggestbadword_EditJsp); + } + + @Token(save = true, validate = false) + @Execute + public HtmlResponse editagain(final SuggestBadWordEditForm form) { + return asHtml(path_AdminSuggestbadword_EditJsp); + } + + @Token(save = true, validate = false) + @Execute + public HtmlResponse editfromconfirm(final SuggestBadWordEditForm form) { + form.crudMode = CommonConstants.EDIT_MODE; + loadSuggestBadWord(form); + return asHtml(path_AdminSuggestbadword_EditJsp); + } + + @Token(save = true, validate = false) + @Execute + public HtmlResponse deletepage(final int crudMode, final String id, final SuggestBadWordEditForm form) { + form.crudMode = crudMode; + form.id = id; + verifyCrudMode(form, CommonConstants.DELETE_MODE); + loadSuggestBadWord(form); + return asHtml(path_AdminSuggestbadword_ConfirmJsp); + } + + @Token(save = true, validate = false) + @Execute + public HtmlResponse deletefromconfirm(final SuggestBadWordEditForm form) { + form.crudMode = CommonConstants.DELETE_MODE; + loadSuggestBadWord(form); + return asHtml(path_AdminSuggestbadword_ConfirmJsp); + } + + // ----------------------------------------------------- + // Confirm + // ------- + @Execute + public HtmlResponse confirmpage(final int crudMode, final String id, final SuggestBadWordEditForm form) { + form.crudMode = crudMode; + form.id = id; + verifyCrudMode(form, CommonConstants.CONFIRM_MODE); + loadSuggestBadWord(form); + return asHtml(path_AdminSuggestbadword_ConfirmJsp); + } + + @Token(save = false, validate = true, keep = true) + @Execute + public HtmlResponse confirmfromcreate(final SuggestBadWordEditForm form) { + validate(form, messages -> {}, toEditHtml()); + return asHtml(path_AdminSuggestbadword_ConfirmJsp); + } + + @Token(save = false, validate = true, keep = true) + @Execute + public HtmlResponse confirmfromupdate(final SuggestBadWordEditForm form) { + validate(form, messages -> {}, toEditHtml()); + return asHtml(path_AdminSuggestbadword_ConfirmJsp); + } + + // ----------------------------------------------------- + // Download + // ------- + @Token(save = false, validate = true) + @Execute + public HtmlResponse downloadpage(final SuggestBadWordSearchForm form) { + return asHtml(path_AdminSuggestbadword_DownloadJsp); + } + + @Token(save = false, validate = true) + @Execute + public HtmlResponse download(final SuggestBadWordSearchForm form) { + final HttpServletResponse response = LaResponseUtil.getResponse(); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + "badword.csv" + "\""); + try (Writer writer = + new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), crawlerProperties.getProperty( + Constants.CSV_FILE_ENCODING_PROPERTY, Constants.UTF_8)))) { + suggestBadWordService.exportCsv(writer); + } catch (final Exception e) { + e.printStackTrace(); + } + return asHtml(path_AdminSuggestbadword_DownloadJsp); + } + + // ----------------------------------------------------- + // Upload + // ------- + @Token(save = false, validate = true) + @Execute + public HtmlResponse uploadpage(final SuggestBadWordUploadForm form) { + return asHtml(path_AdminSuggestbadword_UploadJsp); + } + + // ----------------------------------------------------- + // Actually Crud + // ------------- + @Token(save = false, validate = true) + @Execute + public HtmlResponse create(final SuggestBadWordEditForm form) { + validate(form, messages -> {}, toEditHtml()); + suggestBadWordService.store(createSuggestBadWord(form)); + saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL)); + return redirect(getClass()); + } + + @Token(save = false, validate = true) + @Execute + public HtmlResponse update(final SuggestBadWordEditForm form) { + validate(form, messages -> {}, toEditHtml()); + suggestBadWordService.store(createSuggestBadWord(form)); + saveInfo(messages -> messages.addSuccessCrudUpdateCrudTable(GLOBAL)); + return redirect(getClass()); + } + + @Execute + public HtmlResponse delete(final SuggestBadWordEditForm form) { + verifyCrudMode(form, CommonConstants.DELETE_MODE); + suggestBadWordService.delete(getSuggestBadWord(form)); + saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL)); + return redirect(getClass()); + } + + @Token(save = false, validate = true) + @Execute + public HtmlResponse upload(final SuggestBadWordUploadForm form) { + BufferedInputStream is = null; + File tempFile = null; + FileOutputStream fos = null; + final byte[] b = new byte[20]; + try { + tempFile = File.createTempFile("suggestbadword-import-", ".csv"); + is = new BufferedInputStream(form.suggestBadWordFile.getInputStream()); + is.mark(20); + if (is.read(b, 0, 20) <= 0) { + // TODO + } + is.reset(); + fos = new FileOutputStream(tempFile); + CopyUtil.copy(is, fos); + } catch (final Exception e) { + if (tempFile != null && !tempFile.delete()) { + // TODO + } + } finally { + IOUtils.closeQuietly(is); + IOUtils.closeQuietly(fos); + } + + final File oFile = tempFile; + try { + final String head = new String(b, Constants.UTF_8); + if (!(head.startsWith("\"SuggestWord\"") || head.startsWith("SuggestWord"))) { + // TODO + } + final String enc = crawlerProperties.getProperty(Constants.CSV_FILE_ENCODING_PROPERTY, Constants.UTF_8); + new Thread(() -> { + Reader reader = null; + try { + reader = new BufferedReader(new InputStreamReader(new FileInputStream(oFile), enc)); + suggestBadWordService.importCsv(reader); + } catch (final Exception e) { + throw new FessSystemException("Failed to import data.", e); + } finally { + if (!oFile.delete()) { + // TODO + } + IOUtils.closeQuietly(reader); + } + } ).start(); + } catch (final Exception e) { + if (!oFile.delete()) { + // TODO + } + } + saveInfo(messages -> messages.addSuccessUploadSuggestBadWord(GLOBAL)); + return redirect(getClass()); + } + + //=================================================================================== + // Assist Logic + // ============ + protected void loadSuggestBadWord(final SuggestBadWordEditForm form) { + copyBeanToBean(getSuggestBadWord(form), form, op -> op.exclude("crudMode")); + } + + protected SuggestBadWord getSuggestBadWord(final SuggestBadWordEditForm form) { + final SuggestBadWord suggestBadWord = suggestBadWordService.getSuggestBadWord(createKeyMap(form)); + if (suggestBadWord == null) { + throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.id), toEditHtml()); + } + return suggestBadWord; + } + + protected SuggestBadWord createSuggestBadWord(final SuggestBadWordEditForm form) { + SuggestBadWord suggestBadWord; + final String username = systemHelper.getUsername(); + final long currentTime = systemHelper.getCurrentTimeAsLong(); + if (form.crudMode == CommonConstants.EDIT_MODE) { + suggestBadWord = getSuggestBadWord(form); + } else { + suggestBadWord = new SuggestBadWord(); + suggestBadWord.setCreatedBy(username); + suggestBadWord.setCreatedTime(currentTime); + } + suggestBadWord.setUpdatedBy(username); + suggestBadWord.setUpdatedTime(currentTime); + copyBeanToBean(form, suggestBadWord, op -> op.exclude(CommonConstants.COMMON_CONVERSION_RULE)); + return suggestBadWord; + } + + protected Map createKeyMap(final SuggestBadWordEditForm form) { + final Map keys = new HashMap(); + keys.put("id", form.id); + return keys; + } + + protected Map createItem(final String label, final String value) { + final Map map = new HashMap(2); + map.put(Constants.ITEM_LABEL, label); + map.put(Constants.ITEM_VALUE, value); + return map; + } + + // =================================================================================== + // Small Helper + // ============ + protected void verifyCrudMode(final SuggestBadWordEditForm form, final int expectedMode) { + if (form.crudMode != expectedMode) { + throwValidationError(messages -> { + messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(form.crudMode)); + }, toEditHtml()); + } + } + + protected VaErrorHook toEditHtml() { + return () -> { + return asHtml(path_AdminSuggestbadword_EditJsp); + }; + } +} diff --git a/src/main/java/org/codelibs/fess/app/web/admin/SuggestBadWordForm.java b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordEditForm.java similarity index 84% rename from src/main/java/org/codelibs/fess/app/web/admin/SuggestBadWordForm.java rename to src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordEditForm.java index a6052d391..7d16aabff 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/SuggestBadWordForm.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordEditForm.java @@ -14,7 +14,7 @@ * governing permissions and limitations under the License. */ -package org.codelibs.fess.app.web.admin; +package org.codelibs.fess.app.web.admin.suggestbadword; import java.io.Serializable; import java.util.HashMap; @@ -22,7 +22,11 @@ import java.util.Map; import org.codelibs.fess.util.ComponentUtil; -public class SuggestBadWordForm implements Serializable { +/** + * @author codelibs + * @author Keiichi Watanabe + */ +public class SuggestBadWordEditForm implements Serializable { private static final long serialVersionUID = 1L; @@ -45,10 +49,16 @@ public class SuggestBadWordForm implements Serializable { //@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete") public String suggestWord; + public String reading; + public String targetRole; public String targetLabel; + //@Required(target = "confirmfromcreate,create,confirmfromupdate,update,delete") + //@FloatType + public String boost; + //@Required(target = "confirmfromupdate,update,delete") //@Maxbytelength(maxbytelength = 255) public String createdBy; @@ -67,18 +77,18 @@ public class SuggestBadWordForm implements Serializable { //@IntegerType public String versionNo; - //@Required(target = "upload") - //public FormFile suggestBadWordFile; - public void initialize() { id = null; suggestWord = null; + reading = null; targetRole = null; targetLabel = null; + boost = null; createdBy = "system"; createdTime = Long.toString(ComponentUtil.getSystemHelper().getCurrentTimeAsLong()); updatedBy = null; updatedTime = null; versionNo = null; + boost = "100"; } } diff --git a/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordSearchForm.java b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordSearchForm.java new file mode 100644 index 000000000..626ac1694 --- /dev/null +++ b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordSearchForm.java @@ -0,0 +1,32 @@ +/* + * Copyright 2009-2015 the 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.suggestbadword; + +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +/** + * @author codelibs + * @author Keiichi Watanabe + */ +public class SuggestBadWordSearchForm implements Serializable { + + private static final long serialVersionUID = 1L; + + public Map searchParams = new HashMap(); +} diff --git a/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordUploadForm.java b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordUploadForm.java new file mode 100644 index 000000000..88c16d0e3 --- /dev/null +++ b/src/main/java/org/codelibs/fess/app/web/admin/suggestbadword/SuggestBadWordUploadForm.java @@ -0,0 +1,33 @@ +/* + * Copyright 2009-2015 the 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.suggestbadword; + +import java.io.Serializable; + +import org.lastaflute.web.ruts.multipart.MultipartFormFile; + +/** + * @author codelibs + * @author Keiichi Watanabe + */ +public class SuggestBadWordUploadForm implements Serializable { + + private static final long serialVersionUID = 1L; + + public MultipartFormFile suggestBadWordFile; + +} diff --git a/src/main/webapp/WEB-INF/view/common/admin2/sidebar.jsp b/src/main/webapp/WEB-INF/view/common/admin2/sidebar.jsp index 0f869c9b2..2fc5dc465 100644 --- a/src/main/webapp/WEB-INF/view/common/admin2/sidebar.jsp +++ b/src/main/webapp/WEB-INF/view/common/admin2/sidebar.jsp @@ -180,12 +180,12 @@ -
  • class="active">class="active"> -
  • +