1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.admin.searchlog;
17
18 import javax.annotation.Resource;
19
20 import org.codelibs.fess.Constants;
21 import org.codelibs.fess.annotation.Secured;
22 import org.codelibs.fess.app.pager.SearchLogPager;
23 import org.codelibs.fess.app.service.SearchLogService;
24 import org.codelibs.fess.app.web.CrudMode;
25 import org.codelibs.fess.app.web.base.FessAdminAction;
26 import org.codelibs.fess.util.RenderDataUtil;
27 import org.lastaflute.web.Execute;
28 import org.lastaflute.web.response.HtmlResponse;
29 import org.lastaflute.web.response.render.RenderData;
30 import org.lastaflute.web.ruts.process.ActionRuntime;
31
32
33
34
35 public class AdminSearchlogAction extends FessAdminAction {
36
37 public static final String ROLE = "admin-searchlog";
38
39 private static final String[] CONDITION_FIELDS =
40 new String[] { "logType", "queryId", "userSessionId", "accessType", "requestedTimeRange", "pageSize" };
41
42
43
44
45 @Resource
46 private SearchLogService searchLogService;
47 @Resource
48 private SearchLogPager searchLogPager;
49
50
51
52
53 @Override
54 protected void setupHtmlData(final ActionRuntime runtime) {
55 super.setupHtmlData(runtime);
56 runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameSearchlog()));
57 }
58
59 @Override
60 protected String getActionRole() {
61 return ROLE;
62 }
63
64
65
66
67 @Execute
68 @Secured({ ROLE, ROLE + VIEW })
69 public HtmlResponse index() {
70 saveToken();
71 return asListHtml();
72 }
73
74 @Execute
75 @Secured({ ROLE, ROLE + VIEW })
76 public HtmlResponse list(final Integer pageNumber, final SearchForm form) {
77 saveToken();
78 searchLogPager.setCurrentPageNumber(pageNumber);
79 return asHtml(path_AdminSearchlog_AdminSearchlogJsp).renderWith(data -> {
80 searchPaging(data, form);
81 });
82 }
83
84 @Execute
85 @Secured({ ROLE, ROLE + VIEW })
86 public HtmlResponse search(final SearchForm form) {
87 saveToken();
88 searchLogPager.clear();
89 copyBeanToBean(form, searchLogPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
90 searchLogPager.setPageSize(form.getPageSize());
91 return asHtml(path_AdminSearchlog_AdminSearchlogJsp).renderWith(data -> {
92 searchPaging(data, form);
93 });
94 }
95
96 @Execute
97 @Secured({ ROLE, ROLE + VIEW })
98 public HtmlResponse reset(final SearchForm form) {
99 saveToken();
100 searchLogPager.clear();
101 return asHtml(path_AdminSearchlog_AdminSearchlogJsp).renderWith(data -> {
102 searchPaging(data, form);
103 });
104 }
105
106 @Execute
107 @Secured({ ROLE, ROLE + VIEW })
108 public HtmlResponse back(final SearchForm form) {
109 saveToken();
110 return asHtml(path_AdminSearchlog_AdminSearchlogJsp).renderWith(data -> {
111 searchPaging(data, form);
112 });
113 }
114
115 protected void searchPaging(final RenderData data, final SearchForm form) {
116 RenderDataUtil.register(data, "searchLogItems", searchLogService.getSearchLogList(searchLogPager));
117
118
119 copyBeanToBean(searchLogPager, form, op -> op.include(CONDITION_FIELDS));
120 }
121
122
123
124
125
126
127
128
129 @Execute
130 @Secured({ ROLE, ROLE + VIEW })
131 public HtmlResponse details(final int crudMode, final String logType, final String id) {
132 verifyCrudMode(crudMode, CrudMode.DETAILS);
133 saveToken();
134 return asDetailsHtml().useForm(EditForm.class, op -> {
135 op.setup(form -> {
136 form.id = id;
137 form.logType = logType;
138 form.crudMode = crudMode;
139 });
140 }).renderWith(data -> {
141 RenderDataUtil.register(data, "logParamItems", searchLogService.getSearchLogMap(logType, id));
142 });
143 }
144
145
146
147
148 @Execute
149 @Secured({ ROLE })
150 public HtmlResponse delete(final EditForm form) {
151 verifyCrudMode(form.crudMode, CrudMode.DETAILS);
152 validate(form, messages -> {}, this::asDetailsHtml);
153 verifyToken(this::asDetailsHtml);
154 searchLogService.getSearchLog(form.logType, form.id).alwaysPresent(e -> {
155 searchLogService.deleteSearchLog(e);
156 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
157 });
158 return redirect(getClass());
159 }
160
161 @Execute
162 @Secured({ ROLE })
163 public HtmlResponse deleteall() {
164 verifyToken(this::asListHtml);
165 searchLogPager.clear();
166
167 saveInfo(messages -> messages.addSuccessCrawlingInfoDeleteAll(GLOBAL));
168 return redirect(getClass());
169 }
170
171
172
173
174
175
176
177
178 protected void verifyCrudMode(final int crudMode, final int expectedMode) {
179 if (crudMode != expectedMode) {
180 throwValidationError(messages -> {
181 messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(crudMode));
182 }, this::asListHtml);
183 }
184 }
185
186
187
188
189
190 private HtmlResponse asListHtml() {
191 return asHtml(path_AdminSearchlog_AdminSearchlogJsp).renderWith(data -> {
192 RenderDataUtil.register(data, "searchLogItems", searchLogService.getSearchLogList(searchLogPager));
193 }).useForm(SearchForm.class, setup -> {
194 setup.setup(form -> {
195 copyBeanToBean(searchLogPager, form, op -> op.include(CONDITION_FIELDS));
196 });
197 });
198 }
199
200 private HtmlResponse asDetailsHtml() {
201 return asHtml(path_AdminSearchlog_AdminSearchlogDetailsJsp);
202 }
203 }