diff --git a/src/main/java/jp/sf/fess/action/admin/SuggestBadWordAction.java b/src/main/java/jp/sf/fess/action/admin/SuggestBadWordAction.java index bf6041e17..6a2577ef8 100644 --- a/src/main/java/jp/sf/fess/action/admin/SuggestBadWordAction.java +++ b/src/main/java/jp/sf/fess/action/admin/SuggestBadWordAction.java @@ -25,11 +25,13 @@ import jp.sf.fess.crud.CrudMessageException; import jp.sf.fess.crud.action.admin.BsSuggestBadWordAction; import jp.sf.fess.crud.util.SAStrutsUtil; import jp.sf.fess.db.exentity.SuggestBadWord; +import jp.sf.fess.helper.SuggestHelper; import jp.sf.fess.helper.SystemHelper; import jp.sf.fess.util.FessBeans; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelibs.sastruts.core.annotation.Token; import org.codelibs.sastruts.core.exception.SSCActionMessagesException; import org.seasar.struts.annotation.Execute; import org.seasar.struts.exception.ActionMessagesException; @@ -44,6 +46,9 @@ public class SuggestBadWordAction extends BsSuggestBadWordAction { @Resource protected SystemHelper systemHelper; + @Resource + protected SuggestHelper suggestHelper; + public String getHelpLink() { return systemHelper.getHelpLink("suggestBadWord"); } @@ -61,8 +66,8 @@ public class SuggestBadWordAction extends BsSuggestBadWordAction { } FessBeans.copy(suggestBadWord, suggestBadWordForm) - .commonColumnDateConverter().excludes("searchParams", "mode") - .execute(); + .commonColumnDateConverter().excludes("searchParams", "mode") + .execute(); } @Override @@ -87,7 +92,7 @@ public class SuggestBadWordAction extends BsSuggestBadWordAction { suggestBadWord.setUpdatedBy(username); suggestBadWord.setUpdatedTime(timestamp); FessBeans.copy(suggestBadWordForm, suggestBadWord) - .excludesCommonColumns().execute(); + .excludesCommonColumns().execute(); return suggestBadWord; } @@ -98,7 +103,7 @@ public class SuggestBadWordAction extends BsSuggestBadWordAction { if (suggestBadWordForm.crudMode != CommonConstants.DELETE_MODE) { throw new SSCActionMessagesException("errors.crud_invalid_mode", new Object[] { CommonConstants.DELETE_MODE, - suggestBadWordForm.crudMode }); + suggestBadWordForm.crudMode }); } try { @@ -117,6 +122,8 @@ public class SuggestBadWordAction extends BsSuggestBadWordAction { suggestBadWord.setDeletedBy(username); suggestBadWord.setDeletedTime(timestamp); suggestBadWordService.store(suggestBadWord); + suggestHelper.deleteAllBadWord(); + suggestHelper.updateSolrBadwordFile(); SAStrutsUtil.addSessionMessage("success.crud_delete_crud_table"); return displayList(true); @@ -133,4 +140,55 @@ public class SuggestBadWordAction extends BsSuggestBadWordAction { "errors.crud_failed_to_delete_crud_table"); } } + + @Override + @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) { + log.error(e.getMessage(), e); + throw e; + } catch (final CrudMessageException e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException(e.getMessageId(), e.getArgs()); + } catch (final Exception e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException( + "errors.crud_failed_to_create_crud_table"); + } + } + + @Override + @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) { + log.error(e.getMessage(), e); + throw e; + } catch (final CrudMessageException e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException(e.getMessageId(), e.getArgs()); + } catch (final Exception e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException( + "errors.crud_failed_to_update_crud_table"); + } + } + } diff --git a/src/main/java/jp/sf/fess/action/admin/SuggestElevateWordAction.java b/src/main/java/jp/sf/fess/action/admin/SuggestElevateWordAction.java index b86fabecd..c9aa05439 100644 --- a/src/main/java/jp/sf/fess/action/admin/SuggestElevateWordAction.java +++ b/src/main/java/jp/sf/fess/action/admin/SuggestElevateWordAction.java @@ -25,11 +25,13 @@ import jp.sf.fess.crud.CrudMessageException; import jp.sf.fess.crud.action.admin.BsSuggestElevateWordAction; import jp.sf.fess.crud.util.SAStrutsUtil; import jp.sf.fess.db.exentity.SuggestElevateWord; +import jp.sf.fess.helper.SuggestHelper; import jp.sf.fess.helper.SystemHelper; import jp.sf.fess.util.FessBeans; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.codelibs.sastruts.core.annotation.Token; import org.codelibs.sastruts.core.exception.SSCActionMessagesException; import org.seasar.struts.annotation.Execute; import org.seasar.struts.exception.ActionMessagesException; @@ -44,6 +46,9 @@ public class SuggestElevateWordAction extends BsSuggestElevateWordAction { @Resource protected SystemHelper systemHelper; + @Resource + protected SuggestHelper suggestHelper; + public String getHelpLink() { return systemHelper.getHelpLink("suggestElevateWord"); } @@ -92,6 +97,54 @@ public class SuggestElevateWordAction extends BsSuggestElevateWordAction { return suggestElevateWord; } + @Override + @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) { + log.error(e.getMessage(), e); + throw e; + } catch (final CrudMessageException e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException(e.getMessageId(), e.getArgs()); + } catch (final Exception e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException( + "errors.crud_failed_to_create_crud_table"); + } + } + + @Override + @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) { + log.error(e.getMessage(), e); + throw e; + } catch (final CrudMessageException e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException(e.getMessageId(), e.getArgs()); + } catch (final Exception e) { + log.error(e.getMessage(), e); + throw new ActionMessagesException( + "errors.crud_failed_to_update_crud_table"); + } + } + @Override @Execute(validator = false, input = "error.jsp") public String delete() { @@ -117,6 +170,7 @@ public class SuggestElevateWordAction extends BsSuggestElevateWordAction { suggestElevateWord.setDeletedBy(username); suggestElevateWord.setDeletedTime(timestamp); suggestElevateWordService.store(suggestElevateWord); + suggestHelper.storeAllElevateWords(); SAStrutsUtil.addSessionMessage("success.crud_delete_crud_table"); return displayList(true); diff --git a/src/main/java/jp/sf/fess/helper/SuggestHelper.java b/src/main/java/jp/sf/fess/helper/SuggestHelper.java new file mode 100644 index 000000000..90d29af07 --- /dev/null +++ b/src/main/java/jp/sf/fess/helper/SuggestHelper.java @@ -0,0 +1,146 @@ +package jp.sf.fess.helper; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.annotation.Resource; + +import jp.sf.fess.db.cbean.SuggestBadWordCB; +import jp.sf.fess.db.cbean.SuggestElevateWordCB; +import jp.sf.fess.db.exbhv.SuggestBadWordBhv; +import jp.sf.fess.db.exbhv.SuggestElevateWordBhv; +import jp.sf.fess.db.exentity.SuggestBadWord; +import jp.sf.fess.db.exentity.SuggestElevateWord; +import jp.sf.fess.suggest.SuggestConstants; +import jp.sf.fess.suggest.service.SuggestService; + +import org.codelibs.core.util.StringUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class SuggestHelper { + private static final Logger logger = LoggerFactory + .getLogger(SuggestHelper.class); + + @Resource + protected SuggestService suggestService; + + @Resource + protected SuggestElevateWordBhv suggestElevateWordBhv; + + @Resource + protected SuggestBadWordBhv suggestBadWordBhv; + + public String badwordFileDir = "./solr/core1/conf/"; + + public void storeAllElevateWords() { + suggestService.deleteAllElevateWords(); + + final SuggestElevateWordCB cb = new SuggestElevateWordCB(); + cb.query().setDeletedBy_IsNull(); + final List list = suggestElevateWordBhv + .selectList(cb); + for (final SuggestElevateWord suggestElevateWord : list) { + final String word = suggestElevateWord.getSuggestWord(); + final String reading = suggestElevateWord.getReading(); + final String labelStr = suggestElevateWord.getTargetLabel(); + final String roleStr = suggestElevateWord.getTargetRole(); + final long boost = suggestElevateWord.getBoost().longValue(); + + addElevateWord(word, reading, labelStr, roleStr, boost, false); + } + suggestService.commit(); + } + + public void addElevateWord(final String word, final String reading, + final String labels, final String roles, final long boost) { + addElevateWord(word, reading, labels, roles, boost, true); + } + + public void addElevateWord(final String word, final String reading, + final String labels, final String roles, final long boost, + final boolean commit) { + final SuggestBadWordCB badWordCB = new SuggestBadWordCB(); + badWordCB.query().setSuggestWord_Equal(word); + final List badWordList = suggestBadWordBhv + .selectList(badWordCB); + if (badWordList.size() > 0) { + return; + } + + final List labelList = new ArrayList(); + if (StringUtil.isNotBlank(labels)) { + final String[] array = labels.trim().split(","); + for (final String label : array) { + labelList.add(label); + } + } + final List roleList = new ArrayList(); + if (StringUtil.isNotBlank(roles)) { + final String[] array = roles.trim().split(","); + for (final String role : array) { + roleList.add(role); + } + } + + suggestService + .addElevateWord(word, reading, labelList, roleList, boost); + + if (commit) { + suggestService.commit(); + } + } + + public void deleteAllBadWord() { + final SuggestBadWordCB cb = new SuggestBadWordCB(); + cb.query().setDeletedBy_IsNull(); + final List list = suggestBadWordBhv.selectList(cb); + for (final SuggestBadWord suggestBadWord : list) { + final String word = suggestBadWord.getSuggestWord(); + suggestService.deleteBadWord(word); + } + suggestService.commit(); + } + + public void updateSolrBadwordFile() { + final SuggestBadWordCB cb = new SuggestBadWordCB(); + cb.query().setDeletedBy_IsNull(); + final List list = suggestBadWordBhv.selectList(cb); + + final File dir = new File(System.getProperty("catalina.home").replace( + "¥", "/") + + "/" + badwordFileDir); + if (!dir.exists() || !dir.isDirectory()) { + logger.warn(dir.getAbsolutePath() + " does not exist."); + return; + } + + final File file = new File(dir, SuggestConstants.BADWORD_FILENAME); + BufferedWriter bw = null; + try { + if (!file.exists()) { + file.createNewFile(); + } + bw = new BufferedWriter(new FileWriter(file, false)); + for (final SuggestBadWord suggestBadWord : list) { + bw.write(suggestBadWord.getSuggestWord()); + bw.newLine(); + } + bw.close(); + } catch (final IOException e) { + logger.warn("Failed to update badword file.", e); + } finally { + if (bw != null) { + try { + bw.close(); + } catch (final Exception e2) { + //ignore + } + } + } + } +} diff --git a/src/main/resources/app.dicon b/src/main/resources/app.dicon index 93b6b09b6..cd8119dc8 100644 --- a/src/main/resources/app.dicon +++ b/src/main/resources/app.dicon @@ -293,4 +293,6 @@ + + diff --git a/src/main/resources/fess_suggest.dicon b/src/main/resources/fess_suggest.dicon index 1dfef98f0..adc0024dc 100644 --- a/src/main/resources/fess_suggest.dicon +++ b/src/main/resources/fess_suggest.dicon @@ -84,5 +84,4 @@ suggestSolrServer -