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