1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.dataconfig;
17
18 import static org.codelibs.core.stream.StreamUtil.stream;
19 import static org.codelibs.fess.app.web.admin.dataconfig.AdminDataconfigAction.getDataConfig;
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.DataConfigPager;
29 import org.codelibs.fess.app.service.DataConfigService;
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.DataConfig;
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 ApiAdminDataconfigAction extends FessApiAdminAction {
47
48
49
50
51 @Resource
52 private DataConfigService dataConfigService;
53
54
55
56
57
58
59
60 @Execute
61 public JsonResponse<ApiResult> settings(final SearchBody body) {
62 validateApi(body, messages -> {});
63 final DataConfigPager pager = copyBeanToNewBean(body, DataConfigPager.class);
64 final List<DataConfig> list = dataConfigService.getDataConfigList(pager);
65 return asJson(
66 new ApiResult.ApiConfigsResponse<EditBody>().settings(list.stream().map(this::createEditBody).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().setting(dataConfigService.getDataConfig(id).map(this::createEditBody).orElseGet(() -> {
74 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
75 return null;
76 })).status(Status.OK).result());
77 }
78
79
80 @Execute
81 public JsonResponse<ApiResult> put$setting(final CreateBody body) {
82 validateApi(body, messages -> {});
83 body.crudMode = CrudMode.CREATE;
84 final DataConfig dataConfig = getDataConfig(body).map(entity -> {
85 try {
86 dataConfigService.store(entity);
87 } catch (final Exception e) {
88 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)));
89 }
90 return entity;
91 }).orElseGet(() -> {
92 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL));
93 return null;
94 });
95
96 return asJson(new ApiUpdateResponse().id(dataConfig.getId()).created(true).status(Status.OK).result());
97 }
98
99
100 @Execute
101 public JsonResponse<ApiResult> post$setting(final EditBody body) {
102 validateApi(body, messages -> {});
103 body.crudMode = CrudMode.EDIT;
104 final DataConfig dataConfig = getDataConfig(body).map(entity -> {
105 try {
106 dataConfigService.store(entity);
107 } catch (final Exception e) {
108 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)));
109 }
110 return entity;
111 }).orElseGet(() -> {
112 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id));
113 return null;
114 });
115 return asJson(new ApiUpdateResponse().id(dataConfig.getId()).created(false).status(Status.OK).result());
116 }
117
118
119 @Execute
120 public JsonResponse<ApiResult> delete$setting(final String id) {
121 dataConfigService.getDataConfig(id).ifPresent(entity -> {
122 try {
123 dataConfigService.delete(entity);
124 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
125 } catch (final Exception e) {
126 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
127 }
128 }).orElse(() -> {
129 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
130 });
131 return asJson(new ApiResponse().status(Status.OK).result());
132 }
133
134 protected EditBody createEditBody(final DataConfig entity) {
135 final EditBody body = new EditBody();
136 copyBeanToBean(entity, body, copyOp -> {
137 copyOp.excludeNull();
138 copyOp.exclude(Constants.PERMISSIONS, Constants.VIRTUAL_HOSTS);
139 });
140 final PermissionHelper permissionHelper = ComponentUtil.getPermissionHelper();
141 body.permissions = stream(entity.getPermissions()).get(stream -> stream.map(s -> permissionHelper.decode(s))
142 .filter(StringUtil::isNotBlank).distinct().collect(Collectors.joining("\n")));
143 body.virtualHosts = stream(entity.getVirtualHosts())
144 .get(stream -> stream.filter(StringUtil::isNotBlank).distinct().map(String::trim).collect(Collectors.joining("\n")));
145 return body;
146 }
147 }