Suggest word use PermissionHelper (#525)

* Suggest word use PermissionHelper

* permission to targetRole

* #525
This commit is contained in:
Matsutani Kenji 2016-06-08 05:54:32 +09:00 committed by Shinsuke Sugaya
parent 1c22f7e54a
commit 8e16b72e63
7 changed files with 87 additions and 41 deletions

View file

@ -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);

View file

@ -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);

View file

@ -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<ElevateWord> 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) {

View file

@ -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();
}
}

View file

@ -112,4 +112,5 @@ public class ElevateWord extends BsElevateWord {
+ ", targetLabel=" + targetLabel + ", targetRole=" + targetRole + ", updatedBy=" + updatedBy + ", updatedTime="
+ updatedTime + ", docMeta=" + docMeta + "]";
}
}

View file

@ -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<String> 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(

View file

@ -96,14 +96,13 @@
property="suggestWord" /></td>
</tr>
<tr>
<th><la:message
key="labels.elevate_word_reading" /></th>
<th><la:message key="labels.elevate_word_reading" /></th>
<td>${f:h(reading)}<la:hidden property="reading" /></td>
</tr>
<tr>
<th><la:message
key="labels.elevate_word_target_role" /></th>
<td>${f:h(targetRole)}<la:hidden property="targetRole" /></td>
<th><la:message key="labels.elevate_word_target_role" /></th>
<td>${f:br(f:h(targetRole))}<la:hidden
property="targetRole" /></td>
</tr>
<tr>
<th><la:message key="labels.label_type" /></th>