1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.service;
17
18 import java.util.List;
19
20 import javax.annotation.Resource;
21
22 import org.apache.logging.log4j.LogManager;
23 import org.apache.logging.log4j.Logger;
24 import org.codelibs.core.beans.util.BeanUtil;
25 import org.codelibs.fess.Constants;
26 import org.codelibs.fess.app.pager.SchedulerPager;
27 import org.codelibs.fess.es.config.cbean.ScheduledJobCB;
28 import org.codelibs.fess.es.config.exbhv.ScheduledJobBhv;
29 import org.codelibs.fess.es.config.exentity.ScheduledJob;
30 import org.codelibs.fess.mylasta.direction.FessConfig;
31 import org.codelibs.fess.util.ComponentUtil;
32 import org.dbflute.cbean.result.PagingResultBean;
33 import org.dbflute.optional.OptionalEntity;
34 import org.lastaflute.job.LaCron;
35
36 public class ScheduledJobService {
37
38 private static final Logger logger = LogManager.getLogger(ScheduledJobService.class);
39
40 @Resource
41 protected ScheduledJobBhv scheduledJobBhv;
42
43 @Resource
44 protected FessConfig fessConfig;
45
46 public List<ScheduledJob> getScheduledJobList(final SchedulerPager scheduledJobPager) {
47
48 final PagingResultBean<ScheduledJob> scheduledJobList = scheduledJobBhv.selectPage(cb -> {
49 cb.paging(scheduledJobPager.getPageSize(), scheduledJobPager.getCurrentPageNumber());
50 setupListCondition(cb, scheduledJobPager);
51 });
52
53
54 BeanUtil.copyBeanToBean(scheduledJobList, scheduledJobPager, option -> option.include(Constants.PAGER_CONVERSION_RULE));
55 scheduledJobPager.setPageNumberList(scheduledJobList.pageRange(op -> {
56 op.rangeSize(fessConfig.getPagingPageRangeSizeAsInteger());
57 }).createPageNumberList());
58
59 return scheduledJobList;
60 }
61
62 public List<ScheduledJob> getScheduledJobListAfter(final long updateTime) {
63 return scheduledJobBhv.selectPage(cb -> {
64 cb.fetchFirst(fessConfig.getPageScheduledJobMaxFetchSizeAsInteger());
65 cb.query().setAvailable_Equal(Boolean.TRUE);
66 cb.query().setUpdatedTime_GreaterThan(updateTime);
67 });
68 }
69
70 public OptionalEntity<ScheduledJob> getScheduledJob(final String id) {
71 return scheduledJobBhv.selectByPK(id);
72 }
73
74 public void delete(final ScheduledJob scheduledJob) {
75 scheduledJobBhv.delete(scheduledJob, op -> {
76 op.setRefreshPolicy(Constants.TRUE);
77 });
78 ComponentUtil.getJobHelper().remove(scheduledJob);
79 }
80
81 protected void setupListCondition(final ScheduledJobCB cb, final SchedulerPager scheduledJobPager) {
82 if (scheduledJobPager.id != null) {
83 cb.query().docMeta().setId_Equal(scheduledJobPager.id);
84 }
85
86
87
88 cb.query().addOrderBy_SortOrder_Asc();
89 cb.query().addOrderBy_Name_Asc();
90
91
92
93 }
94
95 public List<ScheduledJob> getScheduledJobList() {
96 return scheduledJobBhv.selectList(cb -> {
97 cb.query().addOrderBy_SortOrder_Asc();
98 cb.query().addOrderBy_Name_Asc();
99 cb.fetchFirst(fessConfig.getPageScheduledJobMaxFetchSizeAsInteger());
100 });
101 }
102
103 public void store(final ScheduledJob scheduledJob) {
104 scheduledJobBhv.insertOrUpdate(scheduledJob, op -> {
105 op.setRefreshPolicy(Constants.TRUE);
106 });
107 }
108
109 public List<ScheduledJob> getCrawlerJobList() {
110 return scheduledJobBhv.selectList(cb -> {
111 cb.query().setCrawler_Equal(Constants.T);
112 cb.query().addOrderBy_SortOrder_Asc();
113 cb.query().addOrderBy_Name_Asc();
114 cb.fetchFirst(fessConfig.getPageScheduledJobMaxFetchSizeAsInteger());
115 });
116 }
117
118 public void start(final LaCron cron) {
119 scheduledJobBhv.selectCursor(cb -> {
120 cb.query().setAvailable_Equal(Constants.T);
121 cb.query().addOrderBy_SortOrder_Asc();
122 cb.query().addOrderBy_Name_Asc();
123 }, scheduledJob -> {
124 try {
125 ComponentUtil.getJobHelper().register(cron, scheduledJob);
126 } catch (final Exception e) {
127 logger.error("Failed to start Job {}", scheduledJob.getId(), e);
128 }
129 });
130 }
131 }