Browse Source

Merge pull request #319 from kw-udon/lastaflute-dev

Lastaflute: suggestElevateWord (except upload)
Shinsuke Sugaya 9 years ago
parent
commit
2947c47007

+ 6 - 2
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);
+        });
 
     }
 

+ 6 - 2
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);
+        });
 
     }
 

+ 0 - 450
src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordAction.java

@@ -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<SuggestElevateWord> 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<String, String> createKeyMap() {
-        final Map<String, String> keys = new HashMap<String, String>();
-
-        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";
-    }
-}

+ 0 - 93
src/main/java/org/codelibs/fess/app/web/admin/SuggestElevateWordForm.java

@@ -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<String, String> searchParams = new HashMap<String, String>();
-
-    //@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";
-    }
-}

+ 113 - 1
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
     //                                                                        ============

+ 0 - 3
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;
 

+ 33 - 0
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;
+
+}

+ 9 - 0
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() {