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