diff --git a/src/main/config/es/fess_config.json b/src/main/config/es/fess_config.json index dd87101d5..f7339ec08 100644 --- a/src/main/config/es/fess_config.json +++ b/src/main/config/es/fess_config.json @@ -975,6 +975,10 @@ "createdTime" : { "type" : "long" }, + "target" : { + "type" : "string", + "index" : "not_analyzed" + }, "generator" : { "type" : "string", "index" : "not_analyzed" diff --git a/src/main/java/org/codelibs/fess/Constants.java b/src/main/java/org/codelibs/fess/Constants.java index b5b7abc1f..9643c6e0e 100644 --- a/src/main/java/org/codelibs/fess/Constants.java +++ b/src/main/java/org/codelibs/fess/Constants.java @@ -404,4 +404,6 @@ public class Constants extends CoreLibConstants { public static final String PERMISSIONS = "permissions"; public static final String CIPHER_PREFIX = "{cipher}"; + + public static final String SYSTEM_USER = "system"; } diff --git a/src/main/java/org/codelibs/fess/app/service/BadWordService.java b/src/main/java/org/codelibs/fess/app/service/BadWordService.java index c6f891c25..847159b0a 100644 --- a/src/main/java/org/codelibs/fess/app/service/BadWordService.java +++ b/src/main/java/org/codelibs/fess/app/service/BadWordService.java @@ -123,11 +123,11 @@ public class BadWordService { } else if (badWord == null) { badWord = new BadWord(); badWord.setSuggestWord(targetWord); - badWord.setCreatedBy("system"); + badWord.setCreatedBy(Constants.SYSTEM_USER); badWord.setCreatedTime(now); badWordBhv.insert(badWord); } else { - badWord.setUpdatedBy("system"); + badWord.setUpdatedBy(Constants.SYSTEM_USER); badWord.setUpdatedTime(now); badWordBhv.update(badWord); } 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 db64be5f3..52c4a7111 100644 --- a/src/main/java/org/codelibs/fess/app/service/ElevateWordService.java +++ b/src/main/java/org/codelibs/fess/app/service/ElevateWordService.java @@ -221,7 +221,7 @@ public class ElevateWordService { elevateWord.setPermissions(permissions); elevateWord.setTargetLabel(label); elevateWord.setBoost(StringUtil.isBlank(boost) ? 1.0f : Float.parseFloat(boost)); - elevateWord.setCreatedBy("system"); + elevateWord.setCreatedBy(Constants.SYSTEM_USER); elevateWord.setCreatedTime(now); elevateWordBhv.insert(elevateWord); } else if (StringUtil.isBlank(reading) && StringUtil.isBlank(boost)) { @@ -230,7 +230,7 @@ public class ElevateWordService { elevateWord.setReading(reading); elevateWord.setPermissions(permissions); elevateWord.setBoost(StringUtil.isBlank(boost) ? 1.0f : Float.parseFloat(boost)); - elevateWord.setUpdatedBy("system"); + elevateWord.setUpdatedBy(Constants.SYSTEM_USER); elevateWord.setUpdatedTime(now); elevateWordBhv.update(elevateWord); } diff --git a/src/main/java/org/codelibs/fess/es/config/bsbhv/BsThumbnailQueueBhv.java b/src/main/java/org/codelibs/fess/es/config/bsbhv/BsThumbnailQueueBhv.java index ff12bb127..db44bf458 100644 --- a/src/main/java/org/codelibs/fess/es/config/bsbhv/BsThumbnailQueueBhv.java +++ b/src/main/java/org/codelibs/fess/es/config/bsbhv/BsThumbnailQueueBhv.java @@ -75,6 +75,7 @@ public abstract class BsThumbnailQueueBhv extends EsAbstractBehavior ((ThumbnailQueue) et).setCreatedBy(DfTypeUtil.toString(vl)), "createdBy"); setupEpg(_epgMap, et -> ((ThumbnailQueue) et).getCreatedTime(), (et, vl) -> ((ThumbnailQueue) et).setCreatedTime(DfTypeUtil.toLong(vl)), "createdTime"); + setupEpg(_epgMap, et -> ((ThumbnailQueue) et).getTarget(), (et, vl) -> ((ThumbnailQueue) et).setTarget(DfTypeUtil.toString(vl)), + "target"); setupEpg(_epgMap, et -> ((ThumbnailQueue) et).getGenerator(), (et, vl) -> ((ThumbnailQueue) et).setGenerator(DfTypeUtil.toString(vl)), "generator"); setupEpg(_epgMap, et -> ((ThumbnailQueue) et).getPath(), (et, vl) -> ((ThumbnailQueue) et).setPath(DfTypeUtil.toString(vl)), "path"); @@ -127,6 +129,8 @@ public class ThumbnailQueueDbm extends AbstractDBMeta { false, "String", 0, 0, null, false, null, null, null, null, null, false); protected final ColumnInfo _columnCreatedTime = cci("createdTime", "createdTime", null, null, Long.class, "createdTime", null, false, false, false, "Long", 0, 0, null, false, null, null, null, null, null, false); + protected final ColumnInfo _columnTarget = cci("target", "target", null, null, String.class, "target", null, false, false, false, + "String", 0, 0, null, false, null, null, null, null, null, false); protected final ColumnInfo _columnGenerator = cci("generator", "generator", null, null, String.class, "generator", null, false, false, false, "String", 0, 0, null, false, null, null, null, null, null, false); protected final ColumnInfo _columnPath = cci("path", "path", null, null, String.class, "path", null, false, false, false, "String", 0, @@ -142,6 +146,10 @@ public class ThumbnailQueueDbm extends AbstractDBMeta { return _columnCreatedTime; } + public ColumnInfo columnTarget() { + return _columnTarget; + } + public ColumnInfo columnGenerator() { return _columnGenerator; } @@ -158,6 +166,7 @@ public class ThumbnailQueueDbm extends AbstractDBMeta { List ls = newArrayList(); ls.add(columnCreatedBy()); ls.add(columnCreatedTime()); + ls.add(columnTarget()); ls.add(columnGenerator()); ls.add(columnPath()); ls.add(columnUrl()); diff --git a/src/main/java/org/codelibs/fess/es/config/cbean/bs/BsThumbnailQueueCB.java b/src/main/java/org/codelibs/fess/es/config/cbean/bs/BsThumbnailQueueCB.java index 6eda159c9..30e51dd69 100644 --- a/src/main/java/org/codelibs/fess/es/config/cbean/bs/BsThumbnailQueueCB.java +++ b/src/main/java/org/codelibs/fess/es/config/cbean/bs/BsThumbnailQueueCB.java @@ -155,6 +155,10 @@ public class BsThumbnailQueueCB extends EsAbstractConditionBean { doColumn("createdTime"); } + public void columnTarget() { + doColumn("target"); + } + public void columnGenerator() { doColumn("generator"); } diff --git a/src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsThumbnailQueueCQ.java b/src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsThumbnailQueueCQ.java index f038381b5..16988e66c 100644 --- a/src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsThumbnailQueueCQ.java +++ b/src/main/java/org/codelibs/fess/es/config/cbean/cq/bs/BsThumbnailQueueCQ.java @@ -543,6 +543,213 @@ public abstract class BsThumbnailQueueCQ extends EsAbstractConditionQuery { return this; } + public void setTarget_Equal(String target) { + setTarget_Term(target, null); + } + + public void setTarget_Equal(String target, ConditionOptionCall opLambda) { + setTarget_Term(target, opLambda); + } + + public void setTarget_Term(String target) { + setTarget_Term(target, null); + } + + public void setTarget_Term(String target, ConditionOptionCall opLambda) { + TermQueryBuilder builder = regTermQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_NotEqual(String target) { + setTarget_NotTerm(target, null); + } + + public void setTarget_NotTerm(String target) { + setTarget_NotTerm(target, null); + } + + public void setTarget_NotEqual(String target, ConditionOptionCall opLambda) { + setTarget_NotTerm(target, opLambda); + } + + public void setTarget_NotTerm(String target, ConditionOptionCall opLambda) { + not(not -> not.setTarget_Term(target), opLambda); + } + + public void setTarget_Terms(Collection targetList) { + setTarget_Terms(targetList, null); + } + + public void setTarget_Terms(Collection targetList, ConditionOptionCall opLambda) { + TermsQueryBuilder builder = regTermsQ("target", targetList); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_InScope(Collection targetList) { + setTarget_Terms(targetList, null); + } + + public void setTarget_InScope(Collection targetList, ConditionOptionCall opLambda) { + setTarget_Terms(targetList, opLambda); + } + + public void setTarget_Match(String target) { + setTarget_Match(target, null); + } + + public void setTarget_Match(String target, ConditionOptionCall opLambda) { + MatchQueryBuilder builder = regMatchQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_MatchPhrase(String target) { + setTarget_MatchPhrase(target, null); + } + + public void setTarget_MatchPhrase(String target, ConditionOptionCall opLambda) { + MatchQueryBuilder builder = regMatchPhraseQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_MatchPhrasePrefix(String target) { + setTarget_MatchPhrasePrefix(target, null); + } + + public void setTarget_MatchPhrasePrefix(String target, ConditionOptionCall opLambda) { + MatchQueryBuilder builder = regMatchPhrasePrefixQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_Fuzzy(String target) { + setTarget_Fuzzy(target, null); + } + + public void setTarget_Fuzzy(String target, ConditionOptionCall opLambda) { + FuzzyQueryBuilder builder = regFuzzyQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_Prefix(String target) { + setTarget_Prefix(target, null); + } + + public void setTarget_Prefix(String target, ConditionOptionCall opLambda) { + PrefixQueryBuilder builder = regPrefixQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_Wildcard(String target) { + setTarget_Wildcard(target, null); + } + + public void setTarget_Wildcard(String target, ConditionOptionCall opLambda) { + WildcardQueryBuilder builder = regWildcardQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_Regexp(String target) { + setTarget_Regexp(target, null); + } + + public void setTarget_Regexp(String target, ConditionOptionCall opLambda) { + RegexpQueryBuilder builder = regRegexpQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_GreaterThan(String target) { + setTarget_GreaterThan(target, null); + } + + public void setTarget_GreaterThan(String target, ConditionOptionCall opLambda) { + RangeQueryBuilder builder = regRangeQ("target", ConditionKey.CK_GREATER_THAN, target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_LessThan(String target) { + setTarget_LessThan(target, null); + } + + public void setTarget_LessThan(String target, ConditionOptionCall opLambda) { + RangeQueryBuilder builder = regRangeQ("target", ConditionKey.CK_LESS_THAN, target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_GreaterEqual(String target) { + setTarget_GreaterEqual(target, null); + } + + public void setTarget_GreaterEqual(String target, ConditionOptionCall opLambda) { + RangeQueryBuilder builder = regRangeQ("target", ConditionKey.CK_GREATER_EQUAL, target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_LessEqual(String target) { + setTarget_LessEqual(target, null); + } + + public void setTarget_LessEqual(String target, ConditionOptionCall opLambda) { + RangeQueryBuilder builder = regRangeQ("target", ConditionKey.CK_LESS_EQUAL, target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_Exists() { + setTarget_Exists(null); + } + + public void setTarget_Exists(ConditionOptionCall opLambda) { + ExistsQueryBuilder builder = regExistsQ("target"); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public void setTarget_CommonTerms(String target) { + setTarget_CommonTerms(target, null); + } + + public void setTarget_CommonTerms(String target, ConditionOptionCall opLambda) { + CommonTermsQueryBuilder builder = regCommonTermsQ("target", target); + if (opLambda != null) { + opLambda.callback(builder); + } + } + + public BsThumbnailQueueCQ addOrderBy_Target_Asc() { + regOBA("target"); + return this; + } + + public BsThumbnailQueueCQ addOrderBy_Target_Desc() { + regOBD("target"); + return this; + } + public void setGenerator_Equal(String generator) { setGenerator_Term(generator, null); } diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java index 142d3fc9c..d4e94f1f0 100644 --- a/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java +++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessConfig.java @@ -652,6 +652,9 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction /** The key of the configuration. e.g. true */ String THUMBNAIL_HTML_PHANTOMJS_ENABLED = "thumbnail.html.phantomjs.enabled"; + /** The key of the configuration. e.g. all */ + String THUMBNAIL_GENERATOR_TARGETS = "thumbnail.generator.targets"; + /** The key of the configuration. e.g. Administrator */ String MAIL_FROM_NAME = "mail.from.name"; @@ -3163,6 +3166,13 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction */ boolean isThumbnailHtmlPhantomjsEnabled(); + /** + * Get the value for the key 'thumbnail.generator.targets'.
+ * The value is, e.g. all
+ * @return The value of found property. (NotNull: if not found, exception but basically no way) + */ + String getThumbnailGeneratorTargets(); + /** * Get the value for the key 'mail.from.name'.
* The value is, e.g. Administrator
@@ -5398,6 +5408,10 @@ public interface FessConfig extends FessEnv, org.codelibs.fess.mylasta.direction return is(FessConfig.THUMBNAIL_HTML_PHANTOMJS_ENABLED); } + public String getThumbnailGeneratorTargets() { + return get(FessConfig.THUMBNAIL_GENERATOR_TARGETS); + } + public String getMailFromName() { return get(FessConfig.MAIL_FROM_NAME); } diff --git a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java index 5dcdb6fe1..7da3e4177 100644 --- a/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java +++ b/src/main/java/org/codelibs/fess/mylasta/direction/FessProp.java @@ -1438,4 +1438,12 @@ public interface FessProp { stream -> stream.filter(StringUtil::isNotBlank).map(s -> s.trim()).forEach(list::add)); return list.toArray(new String[list.size()]); } + + String getThumbnailGeneratorTargets(); + + public default String[] getThumbnailGeneratorTargetsAsArray() { + return getThumbnailGeneratorTargets().split(","); + + } + } diff --git a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java index 3aaa19a57..4438f4864 100644 --- a/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java +++ b/src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java @@ -29,7 +29,6 @@ import java.util.Map; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.TimeUnit; -import java.util.stream.Collectors; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; @@ -45,6 +44,7 @@ import org.codelibs.fess.es.config.exbhv.ThumbnailQueueBhv; import org.codelibs.fess.es.config.exentity.ThumbnailQueue; import org.codelibs.fess.exception.FessSystemException; import org.codelibs.fess.exception.JobProcessingException; +import org.codelibs.fess.helper.SystemHelper; import org.codelibs.fess.mylasta.direction.FessConfig; import org.codelibs.fess.util.ComponentUtil; import org.codelibs.fess.util.DocumentUtil; @@ -52,6 +52,8 @@ import org.lastaflute.web.util.LaRequestUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.Lists; + public class ThumbnailManager { private static final String DEFAULT_SCREENSHOT_DIR = "/WEB-INF/thumbnails"; @@ -121,7 +123,7 @@ public class ThumbnailManager { if (!taskList.isEmpty()) { storeQueue(taskList); } - } else { + } else if (!taskList.contains(task)) { taskList.add(task); if (taskList.size() > thumbnailTaskBulkSize) { storeQueue(taskList); @@ -158,13 +160,22 @@ public class ThumbnailManager { } protected void storeQueue(final List> taskList) { - List list = taskList.stream().filter(entity -> entity != null).map(task -> { - ThumbnailQueue entity = new ThumbnailQueue(); - entity.setGenerator(task.getValue1()); - entity.setUrl(task.getValue2()); - entity.setPath(task.getValue3()); - return entity; - }).collect(Collectors.toList()); + final FessConfig fessConfig = ComponentUtil.getFessConfig(); + final SystemHelper systemHelper = ComponentUtil.getSystemHelper(); + final String[] targets = fessConfig.getThumbnailGeneratorTargetsAsArray(); + final List list = new ArrayList<>(); + taskList.stream().filter(entity -> entity != null).forEach(task -> { + for (final String target : targets) { + ThumbnailQueue entity = new ThumbnailQueue(); + entity.setGenerator(task.getValue1()); + entity.setUrl(task.getValue2()); + entity.setPath(task.getValue3()); + entity.setTarget(target); + entity.setCreatedBy(Constants.SYSTEM_USER); + entity.setCreatedTime(systemHelper.getCurrentTimeAsLong()); + list.add(entity); + } + }); taskList.clear(); final ThumbnailQueueBhv thumbnailQueueBhv = ComponentUtil.getComponent(ThumbnailQueueBhv.class); thumbnailQueueBhv.batchInsert(list); @@ -175,6 +186,11 @@ public class ThumbnailManager { final List idList = new ArrayList<>(); final ThumbnailQueueBhv thumbnailQueueBhv = ComponentUtil.getComponent(ThumbnailQueueBhv.class); thumbnailQueueBhv.selectList(cb -> { + if (StringUtil.isBlank(fessConfig.getSchedulerTargetName())) { + cb.query().setTarget_Equal(Constants.DEFAULT_JOB_TARGET); + } else { + cb.query().setTarget_InScope(Lists.newArrayList(Constants.DEFAULT_JOB_TARGET, fessConfig.getSchedulerTargetName())); + } cb.query().addOrderBy_CreatedTime_Asc(); cb.fetchFirst(fessConfig.getPageThumbnailQueueMaxFetchSizeAsInteger()); }).forEach(entity -> { diff --git a/src/main/resources/fess_config.properties b/src/main/resources/fess_config.properties index 1f465e316..a2fbe499e 100644 --- a/src/main/resources/fess_config.properties +++ b/src/main/resources/fess_config.properties @@ -349,6 +349,7 @@ paging.search.page.size=20 paging.search.page.max.size=100 thumbnail.html.phantomjs.enabled=true +thumbnail.generator.targets=all # ---------------------------------------------------------- # Mail diff --git a/src/main/resources/fess_indices/.fess_config/thumbnail_queue.json b/src/main/resources/fess_indices/.fess_config/thumbnail_queue.json index 39534599e..4457e2b41 100644 --- a/src/main/resources/fess_indices/.fess_config/thumbnail_queue.json +++ b/src/main/resources/fess_indices/.fess_config/thumbnail_queue.json @@ -19,6 +19,10 @@ "type": "string", "index": "not_analyzed" }, + "target": { + "type": "string", + "index": "not_analyzed" + }, "createdTime": { "type": "long" },