1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.user;
17
18 import static org.codelibs.fess.app.web.admin.user.AdminUserAction.getUser;
19 import static org.codelibs.fess.app.web.admin.user.AdminUserAction.validateAttributes;
20
21 import java.util.List;
22 import java.util.stream.Collectors;
23
24 import javax.annotation.Resource;
25
26 import org.codelibs.fess.app.pager.UserPager;
27 import org.codelibs.fess.app.service.UserService;
28 import org.codelibs.fess.app.web.CrudMode;
29 import org.codelibs.fess.app.web.api.ApiResult;
30 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
31 import org.codelibs.fess.es.user.exentity.User;
32 import org.lastaflute.web.Execute;
33 import org.lastaflute.web.response.JsonResponse;
34
35 public class ApiAdminUserAction extends FessApiAdminAction {
36
37 @Resource
38 private UserService userService;
39
40
41
42 @Execute
43 public JsonResponse<ApiResult> settings(final SearchBody body) {
44 validateApi(body, messages -> {});
45 final UserPager pager = copyBeanToNewBean(body, UserPager.class);
46 final List<User> list = userService.getUserList(pager);
47 return asJson(
48 new ApiResult.ApiConfigsResponse<EditBody>().settings(list.stream().map(this::createEditBody).collect(Collectors.toList()))
49 .total(pager.getAllRecordCount()).status(ApiResult.Status.OK).result());
50 }
51
52
53 @Execute
54 public JsonResponse<ApiResult> get$setting(final String id) {
55 return asJson(new ApiResult.ApiConfigResponse().setting(userService.getUser(id).map(this::createEditBody).orElseGet(() -> {
56 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
57 return null;
58 })).status(ApiResult.Status.OK).result());
59 }
60
61
62 @Execute
63 public JsonResponse<ApiResult> put$setting(final CreateBody body) {
64 validateApi(body, messages -> {});
65 body.crudMode = CrudMode.CREATE;
66 final User entity = getUser(body).orElseGet(() -> {
67 throwValidationErrorApi(messages -> {
68 messages.addErrorsCrudFailedToCreateInstance(GLOBAL);
69 });
70 return null;
71 });
72 try {
73 userService.store(entity);
74 saveInfo(messages -> messages.addSuccessCrudCreateCrudTable(GLOBAL));
75 } catch (final Exception e) {
76 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)));
77 }
78 return asJson(new ApiResult.ApiUpdateResponse().id(entity.getId()).created(true).status(ApiResult.Status.OK).result());
79 }
80
81
82 @Execute
83 public JsonResponse<ApiResult> post$setting(final EditBody body) {
84 validateApi(body, messages -> {});
85 validateAttributes(body.attributes, this::throwValidationErrorApi);
86 body.crudMode = CrudMode.EDIT;
87 final User entity = getUser(body).orElseGet(() -> {
88 throwValidationErrorApi(messages -> {
89 messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id);
90 });
91 return null;
92 });
93 try {
94 userService.store(entity);
95 } catch (final Exception e) {
96 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)));
97 }
98 return asJson(new ApiResult.ApiUpdateResponse().id(entity.getId()).created(false).status(ApiResult.Status.OK).result());
99 }
100
101
102 @Execute
103 public JsonResponse<ApiResult> delete$setting(final String id) {
104 final User entity = userService.getUser(id).orElseGet(() -> {
105 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
106 return null;
107 });
108 getUserBean().ifPresent(u -> {
109 if (u.getFessUser() instanceof User && entity.getName().equals(u.getUserId())) {
110 throwValidationErrorApi(messages -> messages.addErrorsCouldNotDeleteLoggedInUser(GLOBAL));
111 }
112 });
113 try {
114 userService.delete(entity);
115 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
116 } catch (final Exception e) {
117 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
118 }
119 return asJson(new ApiResult.ApiUpdateResponse().id(id).created(false).status(ApiResult.Status.OK).result());
120 }
121
122 protected EditBody createEditBody(final User entity) {
123 final EditBody body = new EditBody();
124 copyBeanToBean(entity, body, copyOp -> {
125 copyOp.excludeNull();
126 });
127 body.password = null;
128 body.confirmPassword = null;
129 return body;
130 }
131 }