diff --git a/src/main/java/org/codelibs/fess/app/service/SuggestBadWordService.java b/src/main/java/org/codelibs/fess/app/service/SuggestBadWordService.java index 3e667bc07..20335705c 100644 --- a/src/main/java/org/codelibs/fess/app/service/SuggestBadWordService.java +++ b/src/main/java/org/codelibs/fess/app/service/SuggestBadWordService.java @@ -91,14 +91,18 @@ public class SuggestBadWordService implements Serializable { public void store(final SuggestBadWord suggestBadWord) throws CrudMessageException { setupStoreCondition(suggestBadWord); - suggestBadWordBhv.insertOrUpdate(suggestBadWord); + suggestBadWordBhv.insertOrUpdate(suggestBadWord, op -> { + op.setRefresh(true); + }); } public void delete(final SuggestBadWord suggestBadWord) throws CrudMessageException { setupDeleteCondition(suggestBadWord); - suggestBadWordBhv.delete(suggestBadWord); + suggestBadWordBhv.delete(suggestBadWord, op -> { + op.setRefresh(true); + }); } diff --git a/src/main/java/org/codelibs/fess/app/service/SuggestElevateWordService.java b/src/main/java/org/codelibs/fess/app/service/SuggestElevateWordService.java index e7e5513e5..4751b890f 100644 --- a/src/main/java/org/codelibs/fess/app/service/SuggestElevateWordService.java +++ b/src/main/java/org/codelibs/fess/app/service/SuggestElevateWordService.java @@ -90,14 +90,18 @@ public class SuggestElevateWordService implements Serializable { public void store(final SuggestElevateWord suggestElevateWord) throws CrudMessageException { setupStoreCondition(suggestElevateWord); - suggestElevateWordBhv.insertOrUpdate(suggestElevateWord); + suggestElevateWordBhv.insertOrUpdate(suggestElevateWord, op -> { + op.setRefresh(true); + }); } public void delete(final SuggestElevateWord suggestElevateWord) throws CrudMessageException { setupDeleteCondition(suggestElevateWord); - suggestElevateWordBhv.delete(suggestElevateWord); + suggestElevateWordBhv.delete(suggestElevateWord, op -> { + op.setRefresh(true); + }); } diff --git a/src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordAction.java b/src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordAction.java deleted file mode 100644 index 5542fcaa3..000000000 --- a/src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordAction.java +++ /dev/null @@ -1,450 +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.SuggestElevateWord; -import org.codelibs.fess.exception.SSCActionMessagesException; -import org.codelibs.fess.helper.SuggestHelper; -import org.codelibs.fess.helper.SystemHelper; -import org.codelibs.fess.app.pager.SuggestElevateWordPager; -import org.codelibs.fess.app.service.SuggestElevateWordService; -import org.lastaflute.web.util.LaResponseUtil; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class SuggestElevateWordAction extends FessAdminAction { - - private static final Logger logger = LoggerFactory.getLogger(SuggestElevateWordAction.class); - - @Resource - protected SystemHelper systemHelper; - - @Resource - protected SuggestHelper suggestHelper; - - @Resource - protected DynamicProperties crawlerProperties; - - // for list - - public List suggestElevateWordItems; - - // for edit/confirm/delete - - //@ActionForm - @Resource - protected SuggestElevateWordForm suggestElevateWordForm; - - @Resource - protected SuggestElevateWordService suggestElevateWordService; - - @Resource - protected SuggestElevateWordPager suggestElevateWordPager; - - protected String displayList(final boolean redirect) { - // page navi - suggestElevateWordItems = suggestElevateWordService.getSuggestElevateWordList(suggestElevateWordPager); - - // restore from pager - BeanUtil.copyBeanToBean(suggestElevateWordPager, suggestElevateWordForm.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(suggestElevateWordForm.pageNumber)) { - try { - suggestElevateWordPager.setCurrentPageNumber(Integer.parseInt(suggestElevateWordForm.pageNumber)); - } catch (final NumberFormatException e) { - if (logger.isDebugEnabled()) { - logger.debug("Invalid value: " + suggestElevateWordForm.pageNumber, e); - } - } - } - - return displayList(false); - } - - //@Execute(validator = false, input = "error.jsp") - public String search() { - BeanUtil.copyBeanToBean(suggestElevateWordForm.searchParams, suggestElevateWordPager, - option -> option.exclude(CommonConstants.PAGER_CONVERSION_RULE)); - - return displayList(false); - } - - //@Execute(validator = false, input = "error.jsp") - public String reset() { - suggestElevateWordPager.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 (suggestElevateWordForm.crudMode != CommonConstants.CONFIRM_MODE) { - throw new ActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.CONFIRM_MODE, - suggestElevateWordForm.crudMode }); - } - - loadSuggestElevateWord(); - - return "confirm.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp") - public String createpage() { - // page navi - suggestElevateWordForm.initialize(); - suggestElevateWordForm.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 (suggestElevateWordForm.crudMode != CommonConstants.EDIT_MODE) { - throw new ActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.EDIT_MODE, - suggestElevateWordForm.crudMode }); - } - - loadSuggestElevateWord(); - - return "edit.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp") - public String editfromconfirm() { - suggestElevateWordForm.crudMode = CommonConstants.EDIT_MODE; - - loadSuggestElevateWord(); - - 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 (suggestElevateWordForm.crudMode != CommonConstants.DELETE_MODE) { - throw new ActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.DELETE_MODE, - suggestElevateWordForm.crudMode }); - } - - loadSuggestElevateWord(); - - return "confirm.jsp"; - } - - @Token(save = true, validate = false) - //@Execute(validator = false, input = "error.jsp") - public String deletefromconfirm() { - suggestElevateWordForm.crudMode = CommonConstants.DELETE_MODE; - - loadSuggestElevateWord(); - - return "confirm.jsp"; - } - - protected Map createKeyMap() { - final Map keys = new HashMap(); - - keys.put("id", suggestElevateWordForm.id); - - return keys; - } - - public String getHelpLink() { - return systemHelper.getHelpLink("suggestElevateWord"); - } - - protected void loadSuggestElevateWord() { - - final SuggestElevateWord suggestElevateWord = suggestElevateWordService.getSuggestElevateWord(createKeyMap()); - if (suggestElevateWord == null) { - // throw an exception - throw new SSCActionMessagesException("errors.crud_could_not_find_crud_table", new Object[] { suggestElevateWordForm.id }); - } - - BeanUtil.copyBeanToBean(suggestElevateWord, suggestElevateWordForm, option -> option.excludes("searchParams", "mode")); - } - - protected SuggestElevateWord createSuggestElevateWord() { - SuggestElevateWord suggestElevateWord; - final String username = systemHelper.getUsername(); - final long currentTime = systemHelper.getCurrentTimeAsLong(); - if (suggestElevateWordForm.crudMode == CommonConstants.EDIT_MODE) { - suggestElevateWord = suggestElevateWordService.getSuggestElevateWord(createKeyMap()); - if (suggestElevateWord == null) { - // throw an exception - throw new SSCActionMessagesException("errors.crud_could_not_find_crud_table", new Object[] { suggestElevateWordForm.id }); - } - } else { - suggestElevateWord = new SuggestElevateWord(); - suggestElevateWord.setCreatedBy(username); - suggestElevateWord.setCreatedTime(currentTime); - } - suggestElevateWord.setUpdatedBy(username); - suggestElevateWord.setUpdatedTime(currentTime); - BeanUtil.copyBeanToBean(suggestElevateWordForm, suggestElevateWord, - option -> option.exclude(CommonConstants.COMMON_CONVERSION_RULE)); - - return suggestElevateWord; - } - - @Token(save = false, validate = true) - //@Execute(validator = true, input = "edit.jsp") - public String create() { - try { - final SuggestElevateWord suggestElevateWord = createSuggestElevateWord(); - suggestElevateWordService.store(suggestElevateWord); - suggestHelper.storeAllElevateWords(); - 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 SuggestElevateWord suggestElevateWord = createSuggestElevateWord(); - suggestElevateWordService.store(suggestElevateWord); - suggestHelper.storeAllElevateWords(); - 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"); - } - } - - //@Execute(validator = false, input = "error.jsp") - public String delete() { - if (suggestElevateWordForm.crudMode != CommonConstants.DELETE_MODE) { - throw new SSCActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.DELETE_MODE, - suggestElevateWordForm.crudMode }); - } - - try { - final SuggestElevateWord suggestElevateWord = suggestElevateWordService.getSuggestElevateWord(createKeyMap()); - if (suggestElevateWord == null) { - // throw an exception - throw new SSCActionMessagesException("errors.crud_could_not_find_crud_table", new Object[] { suggestElevateWordForm.id }); - } - - suggestElevateWordService.delete(suggestElevateWord); - suggestHelper.storeAllElevateWords(); - 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 = 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=\"" + "elevateword.csv" + "\""); - - try (Writer writer = - new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), crawlerProperties.getProperty( - Constants.CSV_FILE_ENCODING_PROPERTY, Constants.UTF_8)))) { - suggestElevateWordService.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("suggestelevateword-import-", ".csv"); - is = new BufferedInputStream(suggestElevateWordForm.suggestElevateWordFile.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("\"SuggestWord\"") || head.startsWith("SuggestWord"))) { - logger.error("Unknown file: " + suggestElevateWordForm.suggestElevateWordFile); - 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)); - suggestElevateWordService.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.storeAllElevateWords(); - } - }).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_elevate_word"); - - return "uploadpage?redirect=true"; - } -} diff --git a/src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordForm.java b/src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordForm.java deleted file mode 100644 index 333d44bf1..000000000 --- a/src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordForm.java +++ /dev/null @@ -1,93 +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.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -import org.codelibs.fess.util.ComponentUtil; - -public class SuggestElevateWordForm implements Serializable { - - private static final long serialVersionUID = 1L; - - //@Required(target = "upload") - //public FormFile suggestElevateWordFile; - - //@IntegerType - public String pageNumber; - - public Map searchParams = new HashMap(); - - //@IntegerType - public int crudMode; - - public String getCurrentPageNumber() { - return pageNumber; - } - - //@Required(target = "confirmfromupdate,update,delete") - //@Maxbytelength(maxbytelength = 1000) - public String id; - - //@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; - - //@Required(target = "confirmfromupdate,update,delete") - //@LongType - public String createdTime; - - //@Maxbytelength(maxbytelength = 255) - public String updatedBy; - - //@LongType - public String updatedTime; - - //@Required(target = "confirmfromupdate,update,delete") - //@IntegerType - public String versionNo; - - 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/suggestelevateword/AdminSuggestelevatewordAction.java b/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/AdminSuggestelevatewordAction.java index 74e209feb..1a122f369 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/AdminSuggestelevatewordAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/AdminSuggestelevatewordAction.java @@ -16,23 +16,41 @@ package org.codelibs.fess.app.web.admin.suggestelevateword; +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.SuggestElevateWordPager; import org.codelibs.fess.app.service.SuggestElevateWordService; import org.codelibs.fess.app.web.base.FessAdminAction; import org.codelibs.fess.crud.CommonConstants; import org.codelibs.fess.es.exentity.SuggestElevateWord; +import org.codelibs.fess.helper.SuggestHelper; import org.codelibs.fess.helper.SystemHelper; +import org.codelibs.fess.util.ComponentUtil; 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; /** @@ -49,6 +67,10 @@ public class AdminSuggestelevatewordAction extends FessAdminAction { private SuggestElevateWordPager suggestElevateWordPager; @Resource private SystemHelper systemHelper; + @Resource + protected SuggestHelper suggestHelper; + @Resource + protected DynamicProperties crawlerProperties; // =================================================================================== // Hook @@ -101,7 +123,6 @@ public class AdminSuggestelevatewordAction extends FessAdminAction { } protected void searchPaging(final RenderData data, final SuggestElevateWordSearchForm form) { - // TODO data.register("suggestElevateWordItems", suggestElevateWordService.getSuggestElevateWordList(suggestElevateWordPager)); // page navi // restore from pager copyBeanToBean(suggestElevateWordPager, form.searchParams, op -> op.exclude(CommonConstants.PAGER_CONVERSION_RULE)); @@ -207,6 +228,40 @@ public class AdminSuggestelevatewordAction extends FessAdminAction { }); } + // ----------------------------------------------------- + // Download + // ------- + @Token(save = false, validate = true) + @Execute + public HtmlResponse downloadpage(final SuggestElevateWordSearchForm form) { + return asHtml(path_AdminSuggestelevateword_DownloadJsp); + } + + @Token(save = false, validate = true) + @Execute + public HtmlResponse download(final SuggestElevateWordSearchForm form) { + final HttpServletResponse response = LaResponseUtil.getResponse(); + response.setContentType("application/octet-stream"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + "elevateword.csv" + "\""); + try (Writer writer = + new BufferedWriter(new OutputStreamWriter(response.getOutputStream(), crawlerProperties.getProperty( + Constants.CSV_FILE_ENCODING_PROPERTY, Constants.UTF_8)))) { + suggestElevateWordService.exportCsv(writer); + } catch (final Exception e) { + e.printStackTrace(); + } + return asHtml(path_AdminSuggestelevateword_DownloadJsp); + } + + // ----------------------------------------------------- + // Upload + // ------- + @Token(save = false, validate = true) + @Execute + public HtmlResponse uploadpage(final SuggestElevateWordUploadForm form) { + return asHtml(path_AdminSuggestelevateword_UploadJsp); + } + // ----------------------------------------------------- // Actually Crud // ------------- @@ -236,6 +291,63 @@ public class AdminSuggestelevatewordAction extends FessAdminAction { return redirect(getClass()); } + @Token(save = false, validate = true) + @Execute + public HtmlResponse upload(final SuggestElevateWordUploadForm form) { + BufferedInputStream is = null; + File tempFile = null; + FileOutputStream fos = null; + final byte[] b = new byte[20]; + try { + tempFile = File.createTempFile("suggestelevateword-import-", ".csv"); + is = new BufferedInputStream(form.suggestElevateWordFile.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)); + suggestElevateWordService.importCsv(reader); + } catch (final Exception e) { + throw new FessSystemException("Failed to import data.", e); + } finally { + if (!oFile.delete()) { + // TODO + } + IOUtils.closeQuietly(reader); + suggestHelper.storeAllElevateWords(); + } + } ).start(); + } catch (final Exception e) { + if (!oFile.delete()) { + // TODO + } + } + saveInfo(messages -> messages.addSuccessUploadSuggestElevateWord(GLOBAL)); + return redirect(getClass()); + } + //=================================================================================== // Assist Logic // ============ diff --git a/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/SuggestElevateWordEditForm.java b/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/SuggestElevateWordEditForm.java index 321cd49b5..872fc2cf2 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/SuggestElevateWordEditForm.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/SuggestElevateWordEditForm.java @@ -30,9 +30,6 @@ public class SuggestElevateWordEditForm implements Serializable { private static final long serialVersionUID = 1L; - //@Required(target = "upload") - //public FormFile suggestElevateWordFile; - //@IntegerType public String pageNumber; diff --git a/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/SuggestElevateWordUploadForm.java b/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/SuggestElevateWordUploadForm.java new file mode 100644 index 000000000..e0b305d7b --- /dev/null +++ b/src/main/java/org/codelibs/fess/app/web/admin/suggestelevateword/SuggestElevateWordUploadForm.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.suggestelevateword; + +import java.io.Serializable; + +import org.lastaflute.web.ruts.multipart.MultipartFormFile; + +/** + * @author codelibs + * @author Keiichi Watanabe + */ +public class SuggestElevateWordUploadForm implements Serializable { + + private static final long serialVersionUID = 1L; + + public MultipartFormFile suggestElevateWordFile; + +} diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessFwAssistantDirector.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessFwAssistantDirector.java index 65c7f20a6..ceb25e0b1 100644 --- a/src/main/java/org/codelibs/fess/mylasta/direction/FessFwAssistantDirector.java +++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessFwAssistantDirector.java @@ -24,6 +24,7 @@ import org.codelibs.fess.mylasta.direction.sponsor.FessCurtainBeforeHook; import org.codelibs.fess.mylasta.direction.sponsor.FessCurtainFinallyHook; import org.codelibs.fess.mylasta.direction.sponsor.FessListedClassificationProvider; import org.codelibs.fess.mylasta.direction.sponsor.FessMailDeliveryDepartmentCreator; +import org.codelibs.fess.mylasta.direction.sponsor.FessMultipartRequestHandler; import org.codelibs.fess.mylasta.direction.sponsor.FessSecurityResourceProvider; import org.codelibs.fess.mylasta.direction.sponsor.FessTimeResourceProvider; import org.codelibs.fess.mylasta.direction.sponsor.FessUserLocaleProcessProvider; @@ -36,6 +37,8 @@ import org.lastaflute.core.security.OneWayCryptographer; import org.lastaflute.db.dbflute.classification.ListedClassificationProvider; import org.lastaflute.db.direction.FwDbDirection; import org.lastaflute.web.direction.FwWebDirection; +import org.lastaflute.web.ruts.multipart.MultipartRequestHandler; +import org.lastaflute.web.ruts.multipart.MultipartResourceProvider; /** * @author jflute @@ -124,6 +127,12 @@ public class FessFwAssistantDirector extends CachedFwAssistantDirector { direction.directAdjustment(createActionAdjustmentProvider()); direction.directMessage(nameList -> nameList.add("fess_message"), "fess_label"); direction.directApiCall(createApiFailureHook()); + direction.directMultipart(new MultipartResourceProvider() { + @Override + public MultipartRequestHandler createHandler() { + return new FessMultipartRequestHandler(); + } + }); } protected FessUserLocaleProcessProvider createUserLocaleProcessProvider() {