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