diff --git a/src/main/java/org/codelibs/fess/app/service/ElevateWordService.java b/src/main/java/org/codelibs/fess/app/service/ElevateWordService.java index ef8d749b3..062451280 100644 --- a/src/main/java/org/codelibs/fess/app/service/ElevateWordService.java +++ b/src/main/java/org/codelibs/fess/app/service/ElevateWordService.java @@ -210,15 +210,21 @@ public class ElevateWordService implements Serializable { elevateWord.setBoost(StringUtil.isBlank(boost) ? 1.0f : Float.parseFloat(boost)); elevateWord.setCreatedBy("system"); elevateWord.setCreatedTime(now); - elevateWordBhv.insert(elevateWord); + elevateWordBhv.insert(elevateWord, op -> { + op.setRefresh(true); + }); } else if (StringUtil.isBlank(reading) && StringUtil.isBlank(boost)) { - elevateWordBhv.delete(elevateWord); + elevateWordBhv.delete(elevateWord, op -> { + op.setRefresh(true); + }); } else { elevateWord.setReading(reading); elevateWord.setBoost(StringUtil.isBlank(boost) ? 1.0f : Float.parseFloat(boost)); elevateWord.setUpdatedBy("system"); elevateWord.setUpdatedTime(now); - elevateWordBhv.update(elevateWord); + elevateWordBhv.update(elevateWord, op -> { + op.setRefresh(true); + }); } } catch (final Exception e) { logger.warn("Failed to read a sugget elevate word: " + list, e); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/badword/AdminBadwordAction.java b/src/main/java/org/codelibs/fess/app/web/admin/badword/AdminBadwordAction.java index 3a496266a..f4871b526 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/badword/AdminBadwordAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/badword/AdminBadwordAction.java @@ -285,6 +285,7 @@ public class AdminBadwordAction extends FessAdminAction { new Thread(() -> { try (Reader reader = new BufferedReader(new InputStreamReader(form.badWordFile.getInputStream(), getCsvEncoding()))) { badWordService.importCsv(reader); + suggestHelper.deleteAllBadWords(); suggestHelper.storeAllBadWords(); } catch (final Exception e) { throw new FessSystemException("Failed to import data.", e); diff --git a/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java b/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java index 387742edd..0cb2e980a 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/elevateword/AdminElevatewordAction.java @@ -15,6 +15,8 @@ */ package org.codelibs.fess.app.web.admin.elevateword; +import static org.codelibs.core.stream.StreamUtil.stream; + import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStream; @@ -24,9 +26,12 @@ import java.io.Reader; import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.annotation.Resource; +import org.codelibs.core.lang.StringUtil; import org.codelibs.fess.Constants; import org.codelibs.fess.app.pager.ElevateWordPager; import org.codelibs.fess.app.service.ElevateWordService; @@ -35,7 +40,9 @@ import org.codelibs.fess.app.web.CrudMode; import org.codelibs.fess.app.web.base.FessAdminAction; import org.codelibs.fess.es.config.exentity.ElevateWord; import org.codelibs.fess.exception.FessSystemException; +import org.codelibs.fess.helper.PermissionHelper; import org.codelibs.fess.helper.SuggestHelper; +import org.codelibs.fess.util.ComponentUtil; import org.codelibs.fess.util.RenderDataUtil; import org.dbflute.optional.OptionalEntity; import org.dbflute.optional.OptionalThing; @@ -137,11 +144,22 @@ public class AdminElevatewordAction extends FessAdminAction { public HtmlResponse edit(final EditForm form) { validate(form, messages -> {}, () -> asListHtml()); final String id = form.id; - elevateWordService.getElevateWord(id).ifPresent(entity -> { - copyBeanToBean(entity, form, op -> {}); - }).orElse(() -> { - throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml()); - }); + elevateWordService + .getElevateWord(id) + .ifPresent( + entity -> { + copyBeanToBean(entity, form, copyOp -> { + copyOp.excludeNull(); + copyOp.exclude("permissions"); + }); + final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper(); + form.targetRole = + stream(entity.getTargetRole()).get( + stream -> stream.map(s -> permissionHelper.decode(s)).filter(StringUtil::isNotBlank).distinct() + .collect(Collectors.joining("\n"))); + }).orElse(() -> { + throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml()); + }); saveToken(); if (form.crudMode.intValue() == CrudMode.EDIT) { // back @@ -160,18 +178,32 @@ public class AdminElevatewordAction extends FessAdminAction { public HtmlResponse details(final int crudMode, final String id) { verifyCrudMode(crudMode, CrudMode.DETAILS); saveToken(); - return asHtml(path_AdminElevateword_AdminElevatewordDetailsJsp).useForm(EditForm.class, op -> { - op.setup(form -> { - elevateWordService.getElevateWord(id).ifPresent(entity -> { - copyBeanToBean(entity, form, copyOp -> { - copyOp.excludeNull(); + return asHtml(path_AdminElevateword_AdminElevatewordDetailsJsp).useForm( + EditForm.class, + op -> { + op.setup(form -> { + elevateWordService + .getElevateWord(id) + .ifPresent( + entity -> { + copyBeanToBean(entity, form, copyOp -> { + copyOp.excludeNull(); + copyOp.exclude("permissions"); + }); + final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper(); + form.targetRole = + stream(entity.getTargetRole()).get( + stream -> stream.map(s -> permissionHelper.decode(s)) + .filter(StringUtil::isNotBlank).distinct() + .collect(Collectors.joining("\n"))); + form.crudMode = crudMode; + }) + .orElse(() -> { + throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), + () -> asListHtml()); + }); }); - form.crudMode = crudMode; - }).orElse(() -> { - throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml()); - }); - }); - }).renderWith(data -> { + }).renderWith(data -> { registerLabels(data); }); } @@ -292,10 +324,10 @@ public class AdminElevatewordAction extends FessAdminAction { validate(form, messages -> {}, () -> asUploadHtml()); verifyToken(() -> asUploadHtml()); new Thread(() -> { - Reader reader = null; - try { - reader = new BufferedReader(new InputStreamReader(form.elevateWordFile.getInputStream(), getCsvEncoding())); + try (Reader reader = new BufferedReader(new InputStreamReader(form.elevateWordFile.getInputStream(), getCsvEncoding()))) { elevateWordService.importCsv(reader); + suggestHelper.deleteAllElevateWord(); + suggestHelper.storeAllElevateWords(); } catch (final Exception e) { throw new FessSystemException("Failed to import data.", e); } @@ -329,12 +361,20 @@ public class AdminElevatewordAction extends FessAdminAction { protected OptionalEntity getElevateWord(final CreateForm form) { final String username = systemHelper.getUsername(); final long currentTime = systemHelper.getCurrentTimeAsLong(); - return getEntity(form, username, currentTime).map(entity -> { - entity.setUpdatedBy(username); - entity.setUpdatedTime(currentTime); - copyBeanToBean(form, entity, op -> op.exclude(Constants.COMMON_CONVERSION_RULE)); - return entity; - }); + + return getEntity(form, username, currentTime).map( + entity -> { + entity.setUpdatedBy(username); + entity.setUpdatedTime(currentTime); + copyBeanToBean( + form, + entity, + op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE), Stream.of("permissions")).toArray( + n -> new String[n]))); + final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper(); + entity.setTargetRole(permissionHelper.encode(form.targetRole)); + return entity; + }); } protected void registerLabels(final RenderData data) { diff --git a/src/main/java/org/codelibs/fess/app/web/admin/elevateword/CreateForm.java b/src/main/java/org/codelibs/fess/app/web/admin/elevateword/CreateForm.java index 5c06a386c..dbf9e554d 100644 --- a/src/main/java/org/codelibs/fess/app/web/admin/elevateword/CreateForm.java +++ b/src/main/java/org/codelibs/fess/app/web/admin/elevateword/CreateForm.java @@ -41,10 +41,11 @@ public class CreateForm implements Serializable { public String reading; - public String targetRole; - public String targetLabel; + @Size(max = 4000) + public String targetRole; + @Required @ValidateTypeFailure public Float boost; @@ -61,5 +62,6 @@ public class CreateForm implements Serializable { boost = 100.0f; createdBy = ComponentUtil.getSystemHelper().getUsername(); createdTime = ComponentUtil.getSystemHelper().getCurrentTimeAsLong(); + targetRole = ComponentUtil.getFessConfig().getSearchDefaultDisplayPermission(); } } diff --git a/src/main/java/org/codelibs/fess/es/config/exentity/ElevateWord.java b/src/main/java/org/codelibs/fess/es/config/exentity/ElevateWord.java index 2ab04d950..bc7213723 100644 --- a/src/main/java/org/codelibs/fess/es/config/exentity/ElevateWord.java +++ b/src/main/java/org/codelibs/fess/es/config/exentity/ElevateWord.java @@ -112,4 +112,5 @@ public class ElevateWord extends BsElevateWord { + ", targetLabel=" + targetLabel + ", targetRole=" + targetRole + ", updatedBy=" + updatedBy + ", updatedTime=" + updatedTime + ", docMeta=" + docMeta + "]"; } + } diff --git a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java index b10ba1088..f15cad986 100644 --- a/src/main/java/org/codelibs/fess/helper/SuggestHelper.java +++ b/src/main/java/org/codelibs/fess/helper/SuggestHelper.java @@ -217,8 +217,8 @@ public class SuggestHelper { suggester.refresh(); } - public void addElevateWord(final String word, final String reading, final String[] tags, final String roles, final float boost) { - addElevateWord(word, reading, tags, roles, boost, true); + public void addElevateWord(final String word, final String reading, final String[] tags, final String permissions, final Float boost) { + addElevateWord(word, reading, tags, permissions, boost, true); } public void addElevateWord(final String word, final String reading, final String[] tags, final String roles, final float boost, @@ -229,10 +229,7 @@ public class SuggestHelper { } final List roleList = new ArrayList<>(); if (StringUtil.isNotBlank(roles)) { - final String[] array = roles.trim().split(","); - for (final String role : array) { - roleList.add(role); - } + roleList.add(roles); } suggester.indexer().addElevateWord( diff --git a/src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_details.jsp b/src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_details.jsp index 50a160215..197507a1f 100644 --- a/src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_details.jsp +++ b/src/main/webapp/WEB-INF/view/admin/elevateword/admin_elevateword_details.jsp @@ -96,14 +96,13 @@ property="suggestWord" /> - + ${f:h(reading)} - - ${f:h(targetRole)} + + ${f:br(f:h(targetRole))}