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