1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.admin.relatedquery;
17
18 import static org.codelibs.core.stream.StreamUtil.split;
19 import static org.codelibs.core.stream.StreamUtil.stream;
20
21 import java.util.stream.Collectors;
22 import java.util.stream.Stream;
23
24 import javax.annotation.Resource;
25
26 import org.codelibs.core.beans.util.BeanUtil;
27 import org.codelibs.core.lang.StringUtil;
28 import org.codelibs.fess.Constants;
29 import org.codelibs.fess.app.pager.RelatedQueryPager;
30 import org.codelibs.fess.app.service.RelatedQueryService;
31 import org.codelibs.fess.app.web.CrudMode;
32 import org.codelibs.fess.app.web.base.FessAdminAction;
33 import org.codelibs.fess.es.config.exentity.RelatedQuery;
34 import org.codelibs.fess.helper.SystemHelper;
35 import org.codelibs.fess.util.ComponentUtil;
36 import org.codelibs.fess.util.RenderDataUtil;
37 import org.dbflute.optional.OptionalEntity;
38 import org.dbflute.optional.OptionalThing;
39 import org.lastaflute.web.Execute;
40 import org.lastaflute.web.response.HtmlResponse;
41 import org.lastaflute.web.response.render.RenderData;
42 import org.lastaflute.web.ruts.process.ActionRuntime;
43
44
45
46
47 public class AdminRelatedqueryAction extends FessAdminAction {
48
49
50
51
52 @Resource
53 private RelatedQueryService relatedQueryService;
54 @Resource
55 private RelatedQueryPager relatedQueryPager;
56
57
58
59
60 @Override
61 protected void setupHtmlData(final ActionRuntime runtime) {
62 super.setupHtmlData(runtime);
63 runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameRelatedquery()));
64 }
65
66
67
68
69 @Execute
70 public HtmlResponse index() {
71 return asListHtml();
72 }
73
74 @Execute
75 public HtmlResponse list(final OptionalThing<Integer> pageNumber, final SearchForm form) {
76 pageNumber.ifPresent(num -> {
77 relatedQueryPager.setCurrentPageNumber(pageNumber.get());
78 }).orElse(() -> {
79 relatedQueryPager.setCurrentPageNumber(0);
80 });
81 return asHtml(path_AdminRelatedquery_AdminRelatedqueryJsp).renderWith(data -> {
82 searchPaging(data, form);
83 });
84 }
85
86 @Execute
87 public HtmlResponse search(final SearchForm form) {
88 copyBeanToBean(form, relatedQueryPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
89 return asHtml(path_AdminRelatedquery_AdminRelatedqueryJsp).renderWith(data -> {
90 searchPaging(data, form);
91 });
92 }
93
94 @Execute
95 public HtmlResponse reset(final SearchForm form) {
96 relatedQueryPager.clear();
97 return asHtml(path_AdminRelatedquery_AdminRelatedqueryJsp).renderWith(data -> {
98 searchPaging(data, form);
99 });
100 }
101
102 protected void searchPaging(final RenderData data, final SearchForm form) {
103 RenderDataUtil.register(data, "relatedQueryItems", relatedQueryService.getRelatedQueryList(relatedQueryPager));
104
105
106 copyBeanToBean(relatedQueryPager, form, op -> op.include("id"));
107 }
108
109
110
111
112
113
114
115 @Execute
116 public HtmlResponse createnew() {
117 saveToken();
118 return asEditHtml().useForm(CreateForm.class, op -> {
119 op.setup(form -> {
120 form.initialize();
121 form.crudMode = CrudMode.CREATE;
122 });
123 });
124 }
125
126 @Execute
127 public HtmlResponse edit(final EditForm form) {
128 validate(form, messages -> {}, () -> asListHtml());
129 final String id = form.id;
130 relatedQueryService
131 .getRelatedQuery(id)
132 .ifPresent(
133 entity -> {
134 copyBeanToBean(entity, form, copyOp -> {
135 copyOp.excludeNull();
136 copyOp.exclude(Constants.QUERIES);
137 });
138 form.queries =
139 stream(entity.getQueries()).get(
140 stream -> stream.filter(StringUtil::isNotBlank).collect(Collectors.joining("\n")));
141 }).orElse(() -> {
142 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
143 });
144 saveToken();
145 if (form.crudMode.intValue() == CrudMode.EDIT) {
146
147 form.crudMode = CrudMode.DETAILS;
148 return asDetailsHtml();
149 } else {
150 form.crudMode = CrudMode.EDIT;
151 return asEditHtml();
152 }
153 }
154
155
156
157
158 @Execute
159 public HtmlResponse details(final int crudMode, final String id) {
160 verifyCrudMode(crudMode, CrudMode.DETAILS);
161 saveToken();
162 return asDetailsHtml().useForm(
163 EditForm.class,
164 op -> {
165 op.setup(form -> {
166 relatedQueryService
167 .getRelatedQuery(id)
168 .ifPresent(
169 entity -> {
170 copyBeanToBean(entity, form, copyOp -> {
171 copyOp.excludeNull();
172 copyOp.exclude(Constants.QUERIES);
173 });
174 form.queries =
175 stream(entity.getQueries()).get(
176 stream -> stream.filter(StringUtil::isNotBlank).collect(
177 Collectors.joining("\n")));
178 form.crudMode = crudMode;
179 })
180 .orElse(() -> {
181 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id),
182 () -> asListHtml());
183 });
184 });
185 });
186 }
187
188
189
190
191 @Execute
192 public HtmlResponse create(final CreateForm form) {
193 verifyCrudMode(form.crudMode, CrudMode.CREATE);
194 validate(form, messages -> {}, () -> asEditHtml());
195 verifyToken(() -> asEditHtml());
196 getRelatedQuery(form).ifPresent(
197 entity -> {
198 try {
199 relatedQueryService.store(entity);
200 saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL));
201 } catch (final Exception e) {
202 throwValidationError(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)),
203 () -> asEditHtml());
204 }
205 }).orElse(() -> {
206 throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
207 });
208 return redirect(getClass());
209 }
210
211 @Execute
212 public HtmlResponse update(final EditForm form) {
213 verifyCrudMode(form.crudMode, CrudMode.EDIT);
214 validate(form, messages -> {}, () -> asEditHtml());
215 verifyToken(() -> asEditHtml());
216 getRelatedQuery(form).ifPresent(
217 entity -> {
218 try {
219 relatedQueryService.store(entity);
220 saveInfo(messages -> messages.addSuccessCrudUpdateCrudTable(GLOBAL));
221 } catch (final Exception e) {
222 throwValidationError(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)),
223 () -> asEditHtml());
224 }
225 }).orElse(() -> {
226 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.id), () -> asEditHtml());
227 });
228 return redirect(getClass());
229 }
230
231 @Execute
232 public HtmlResponse delete(final EditForm form) {
233 verifyCrudMode(form.crudMode, CrudMode.DETAILS);
234 validate(form, messages -> {}, () -> asDetailsHtml());
235 verifyToken(() -> asDetailsHtml());
236 final String id = form.id;
237 relatedQueryService
238 .getRelatedQuery(id)
239 .ifPresent(
240 entity -> {
241 try {
242 relatedQueryService.delete(entity);
243 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
244 } catch (final Exception e) {
245 throwValidationError(
246 messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)),
247 () -> asEditHtml());
248 }
249 }).orElse(() -> {
250 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asDetailsHtml());
251 });
252 return redirect(getClass());
253 }
254
255
256
257
258
259 private static OptionalEntity<RelatedQuery> getEntity(final CreateForm form, final String username, final long currentTime) {
260 switch (form.crudMode) {
261 case CrudMode.CREATE:
262 return OptionalEntity.of(new RelatedQuery()).map(entity -> {
263 entity.setCreatedBy(username);
264 entity.setCreatedTime(currentTime);
265 return entity;
266 });
267 case CrudMode.EDIT:
268 if (form instanceof EditForm) {
269 return ComponentUtil.getComponent(RelatedQueryService.class).getRelatedQuery(((EditForm) form).id);
270 }
271 break;
272 default:
273 break;
274 }
275 return OptionalEntity.empty();
276 }
277
278 public static OptionalEntity<RelatedQuery> getRelatedQuery(final CreateForm form) {
279 final SystemHelper systemHelper = ComponentUtil.getSystemHelper();
280 final String username = systemHelper.getUsername();
281 final long currentTime = systemHelper.getCurrentTimeAsLong();
282 return getEntity(form, username, currentTime).map(
283 entity -> {
284 entity.setUpdatedBy(username);
285 entity.setUpdatedTime(currentTime);
286 BeanUtil.copyBeanToBean(form, entity, op -> op.exclude(Stream.concat(Stream.of(Constants.COMMON_CONVERSION_RULE),
287 Stream.of(Constants.QUERIES)).toArray(n -> new String[n])));
288 entity.setQueries(split(form.queries, "\n").get(
289 stream -> stream.filter(StringUtil::isNotBlank).toArray(n -> new String[n])));
290 return entity;
291 });
292 }
293
294
295
296
297 protected void verifyCrudMode(final int crudMode, final int expectedMode) {
298 if (crudMode != expectedMode) {
299 throwValidationError(messages -> {
300 messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(crudMode));
301 }, () -> asListHtml());
302 }
303 }
304
305
306
307
308
309 private HtmlResponse asListHtml() {
310 return asHtml(path_AdminRelatedquery_AdminRelatedqueryJsp).renderWith(data -> {
311 RenderDataUtil.register(data, "relatedQueryItems", relatedQueryService.getRelatedQueryList(relatedQueryPager));
312 }).useForm(SearchForm.class, setup -> {
313 setup.setup(form -> {
314 copyBeanToBean(relatedQueryPager, form, op -> op.include("id"));
315 });
316 });
317 }
318
319 private HtmlResponse asEditHtml() {
320 return asHtml(path_AdminRelatedquery_AdminRelatedqueryEditJsp);
321 }
322
323 private HtmlResponse asDetailsHtml() {
324 return asHtml(path_AdminRelatedquery_AdminRelatedqueryDetailsJsp);
325 }
326
327 }