1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.webconfig;
17
18 import static org.codelibs.core.stream.StreamUtil.stream;
19 import static org.codelibs.fess.app.web.admin.webconfig.AdminWebconfigAction.getWebConfig;
20
21 import java.util.List;
22 import java.util.stream.Collectors;
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.WebConfigPager;
29 import org.codelibs.fess.app.service.WebConfigService;
30 import org.codelibs.fess.app.web.CrudMode;
31 import org.codelibs.fess.app.web.api.ApiResult;
32 import org.codelibs.fess.app.web.api.ApiResult.ApiConfigResponse;
33 import org.codelibs.fess.app.web.api.ApiResult.ApiResponse;
34 import org.codelibs.fess.app.web.api.ApiResult.ApiUpdateResponse;
35 import org.codelibs.fess.app.web.api.ApiResult.Status;
36 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
37 import org.codelibs.fess.es.config.exentity.WebConfig;
38 import org.codelibs.fess.helper.PermissionHelper;
39 import org.codelibs.fess.util.ComponentUtil;
40 import org.lastaflute.web.Execute;
41 import org.lastaflute.web.response.JsonResponse;
42
43
44
45
46 public class ApiAdminWebconfigAction extends FessApiAdminAction {
47
48
49
50
51 @Resource
52 private WebConfigService webConfigService;
53
54
55
56
57
58
59
60 @Execute
61 public JsonResponse<ApiResult> settings(final SearchBody body) {
62 validateApi(body, messages -> {});
63 final WebConfigPager pager = copyBeanToNewBean(body, WebConfigPager.class);
64 final List<WebConfig> list = webConfigService.getWebConfigList(pager);
65 return asJson(new ApiResult.ApiConfigsResponse<EditBody>()
66 .settings(list.stream().map(entity -> createEditBody(entity)).collect(Collectors.toList()))
67 .total(pager.getAllRecordCount()).status(ApiResult.Status.OK).result());
68 }
69
70
71 @Execute
72 public JsonResponse<ApiResult> get$setting(final String id) {
73 return asJson(new ApiConfigResponse()
74 .setting(webConfigService.getWebConfig(id).map(entity -> createEditBody(entity)).orElseGet(() -> {
75 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
76 return null;
77 })).status(Status.OK).result());
78 }
79
80
81 @Execute
82 public JsonResponse<ApiResult> put$setting(final CreateBody body) {
83 validateApi(body, messages -> {});
84 body.crudMode = CrudMode.CREATE;
85 final WebConfig webConfig = getWebConfig(body).map(entity -> {
86 try {
87 webConfigService.store(entity);
88 } catch (final Exception e) {
89 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)));
90 }
91 return entity;
92 }).orElseGet(() -> {
93 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL));
94 return null;
95 });
96
97 return asJson(new ApiUpdateResponse().id(webConfig.getId()).created(true).status(Status.OK).result());
98 }
99
100
101 @Execute
102 public JsonResponse<ApiResult> post$setting(final EditBody body) {
103 validateApi(body, messages -> {});
104 body.crudMode = CrudMode.EDIT;
105 final WebConfig webConfig = getWebConfig(body).map(entity -> {
106 try {
107 webConfigService.store(entity);
108 } catch (final Exception e) {
109 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)));
110 }
111 return entity;
112 }).orElseGet(() -> {
113 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id));
114 return null;
115 });
116 return asJson(new ApiUpdateResponse().id(webConfig.getId()).created(false).status(Status.OK).result());
117 }
118
119
120 @Execute
121 public JsonResponse<ApiResult> delete$setting(final String id) {
122 webConfigService.getWebConfig(id).ifPresent(entity -> {
123 try {
124 webConfigService.delete(entity);
125 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
126 } catch (final Exception e) {
127 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
128 }
129 }).orElse(() -> {
130 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
131 });
132 return asJson(new ApiResponse().status(Status.OK).result());
133 }
134
135 protected EditBody createEditBody(final WebConfig entity) {
136 final EditBody body = new EditBody();
137 copyBeanToBean(entity, body, copyOp -> {
138 copyOp.excludeNull();
139 copyOp.exclude(Constants.PERMISSIONS, Constants.VIRTUAL_HOSTS);
140 });
141 final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
142 body.permissions =
143 stream(entity.getPermissions()).get(
144 stream -> stream.map(s -> permissionHelper.decode(s)).filter(StringUtil::isNotBlank).distinct()
145 .collect(Collectors.joining("\n")));
146 body.virtualHosts =
147 stream(entity.getVirtualHosts()).get(
148 stream -> stream.filter(StringUtil::isNotBlank).distinct().collect(Collectors.joining("\n")));
149 return body;
150 }
151 }