1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.admin.group;
17
18 import java.util.Base64;
19
20 import javax.annotation.Resource;
21
22 import org.codelibs.fess.Constants;
23 import org.codelibs.fess.app.pager.GroupPager;
24 import org.codelibs.fess.app.service.GroupService;
25 import org.codelibs.fess.app.web.CrudMode;
26 import org.codelibs.fess.app.web.base.FessAdminAction;
27 import org.codelibs.fess.es.user.exentity.Group;
28 import org.codelibs.fess.util.ComponentUtil;
29 import org.codelibs.fess.util.RenderDataUtil;
30 import org.dbflute.optional.OptionalEntity;
31 import org.dbflute.optional.OptionalThing;
32 import org.lastaflute.web.Execute;
33 import org.lastaflute.web.response.HtmlResponse;
34 import org.lastaflute.web.response.render.RenderData;
35 import org.lastaflute.web.ruts.process.ActionRuntime;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39
40
41
42
43 public class AdminGroupAction extends FessAdminAction {
44
45 private static final Logger logger = LoggerFactory.getLogger(AdminGroupAction.class);
46
47
48
49
50 @Resource
51 private GroupService groupService;
52 @Resource
53 private GroupPager groupPager;
54
55
56
57
58 @Override
59 protected void setupHtmlData(final ActionRuntime runtime) {
60 super.setupHtmlData(runtime);
61 runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameGroup()));
62 }
63
64
65
66
67 @Execute
68 public HtmlResponse index() {
69 return asListHtml();
70 }
71
72 @Execute
73 public HtmlResponse list(final OptionalThing<Integer> pageNumber, final SearchForm form) {
74 pageNumber.ifPresent(num -> {
75 groupPager.setCurrentPageNumber(pageNumber.get());
76 }).orElse(() -> {
77 groupPager.setCurrentPageNumber(0);
78 });
79 return asHtml(path_AdminGroup_AdminGroupJsp).renderWith(data -> {
80 searchPaging(data, form);
81 });
82 }
83
84 @Execute
85 public HtmlResponse search(final SearchForm form) {
86 copyBeanToBean(form, groupPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
87 return asHtml(path_AdminGroup_AdminGroupJsp).renderWith(data -> {
88 searchPaging(data, form);
89 });
90 }
91
92 @Execute
93 public HtmlResponse reset(final SearchForm form) {
94 groupPager.clear();
95 return asHtml(path_AdminGroup_AdminGroupJsp).renderWith(data -> {
96 searchPaging(data, form);
97 });
98 }
99
100 protected void searchPaging(final RenderData data, final SearchForm form) {
101 RenderDataUtil.register(data, "groupItems", groupService.getGroupList(groupPager));
102
103
104 copyBeanToBean(groupPager, form, op -> op.include("id"));
105 }
106
107
108
109
110
111
112
113 @Execute
114 public HtmlResponse createnew() {
115 saveToken();
116 return asHtml(path_AdminGroup_AdminGroupEditJsp).useForm(CreateForm.class, op -> {
117 op.setup(form -> {
118 form.initialize();
119 form.crudMode = CrudMode.CREATE;
120 });
121 });
122 }
123
124 @Execute
125 public HtmlResponse edit(final EditForm form) {
126 validate(form, messages -> {}, () -> asListHtml());
127 final String id = form.id;
128 groupService.getGroup(id).ifPresent(entity -> {
129 copyBeanToBean(entity, form, op -> {});
130 }).orElse(() -> {
131 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
132 });
133 saveToken();
134 if (form.crudMode.intValue() == CrudMode.EDIT) {
135
136 form.crudMode = CrudMode.DETAILS;
137 return asDetailsHtml();
138 } else {
139 form.crudMode = CrudMode.EDIT;
140 return asEditHtml();
141 }
142 }
143
144
145
146
147 @Execute
148 public HtmlResponse details(final int crudMode, final String id) {
149 verifyCrudMode(crudMode, CrudMode.DETAILS);
150 saveToken();
151 return asHtml(path_AdminGroup_AdminGroupDetailsJsp).useForm(EditForm.class, op -> {
152 op.setup(form -> {
153 groupService.getGroup(id).ifPresent(entity -> {
154 copyBeanToBean(entity, form, copyOp -> {
155 copyOp.excludeNull();
156 });
157 form.crudMode = crudMode;
158 }).orElse(() -> {
159 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asListHtml());
160 });
161 });
162 });
163 }
164
165
166
167
168 @Execute
169 public HtmlResponse create(final CreateForm form) {
170 verifyCrudMode(form.crudMode, CrudMode.CREATE);
171 validate(form, messages -> {}, () -> asEditHtml());
172 verifyToken(() -> asEditHtml());
173 getGroup(form).ifPresent(
174 entity -> {
175 try {
176 groupService.store(entity);
177 saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL));
178 } catch (final Exception e) {
179 logger.error("Failed to add " + entity, e);
180 throwValidationError(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)),
181 () -> asEditHtml());
182 }
183 }).orElse(() -> {
184 throwValidationError(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL), () -> asEditHtml());
185 });
186 return redirect(getClass());
187 }
188
189 @Execute
190 public HtmlResponse update(final EditForm form) {
191 verifyCrudMode(form.crudMode, CrudMode.EDIT);
192 validate(form, messages -> {}, () -> asEditHtml());
193 verifyToken(() -> asEditHtml());
194 getGroup(form).ifPresent(
195 entity -> {
196 try {
197 groupService.store(entity);
198 saveInfo(messages -> messages.addSuccessCrudUpdateCrudTable(GLOBAL));
199 } catch (final Exception e) {
200 logger.error("Failed to update " + entity, e);
201 throwValidationError(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)),
202 () -> asEditHtml());
203 }
204 }).orElse(() -> {
205 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, form.id), () -> asEditHtml());
206 });
207 return redirect(getClass());
208 }
209
210 @Execute
211 public HtmlResponse delete(final EditForm form) {
212 verifyCrudMode(form.crudMode, CrudMode.DETAILS);
213 validate(form, messages -> {}, () -> asDetailsHtml());
214 verifyToken(() -> asDetailsHtml());
215 final String id = form.id;
216 groupService
217 .getGroup(id)
218 .ifPresent(
219 entity -> {
220 try {
221 groupService.delete(entity);
222 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
223 } catch (final Exception e) {
224 logger.error("Failed to delete " + entity, e);
225 throwValidationError(
226 messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)),
227 () -> asDetailsHtml());
228 }
229 }).orElse(() -> {
230 throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), () -> asDetailsHtml());
231 });
232 return redirect(getClass());
233 }
234
235
236
237
238 private static OptionalEntity<Group> getEntity(final CreateForm form) {
239 switch (form.crudMode) {
240 case CrudMode.CREATE:
241 return OptionalEntity.of(new Group()).map(entity -> {
242 entity.setId(Base64.getUrlEncoder().encodeToString(form.name.getBytes(Constants.CHARSET_UTF_8)));
243 return entity;
244 });
245 case CrudMode.EDIT:
246 if (form instanceof EditForm) {
247 return ComponentUtil.getComponent(GroupService.class).getGroup(((EditForm) form).id);
248 }
249 break;
250 default:
251 break;
252 }
253 return OptionalEntity.empty();
254 }
255
256 public static OptionalEntity<Group> getGroup(final CreateForm form) {
257 return getEntity(form).map(entity -> {
258 copyBeanToBean(form, entity, op -> op.exclude(Constants.COMMON_CONVERSION_RULE));
259 return entity;
260 });
261 }
262
263
264
265
266 protected void verifyCrudMode(final int crudMode, final int expectedMode) {
267 if (crudMode != expectedMode) {
268 throwValidationError(messages -> {
269 messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(crudMode));
270 }, () -> asListHtml());
271 }
272 }
273
274
275
276
277
278 private HtmlResponse asListHtml() {
279 return asHtml(path_AdminGroup_AdminGroupJsp).renderWith(data -> {
280 RenderDataUtil.register(data, "groupItems", groupService.getGroupList(groupPager));
281 }).useForm(SearchForm.class, setup -> {
282 setup.setup(form -> {
283 copyBeanToBean(groupPager, form, op -> op.include("id"));
284 });
285 });
286 }
287
288 private HtmlResponse asEditHtml() {
289 return asHtml(path_AdminGroup_AdminGroupEditJsp);
290 }
291
292 private HtmlResponse asDetailsHtml() {
293 return asHtml(path_AdminGroup_AdminGroupDetailsJsp);
294 }
295 }