1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.relatedcontent;
17
18 import static org.codelibs.fess.app.web.admin.relatedcontent.AdminRelatedcontentAction.getRelatedContent;
19
20 import java.util.List;
21 import java.util.stream.Collectors;
22
23 import org.apache.logging.log4j.LogManager;
24 import org.apache.logging.log4j.Logger;
25 import org.codelibs.fess.app.pager.RelatedContentPager;
26 import org.codelibs.fess.app.service.RelatedContentService;
27 import org.codelibs.fess.app.web.CrudMode;
28 import org.codelibs.fess.app.web.api.ApiResult;
29 import org.codelibs.fess.app.web.api.ApiResult.ApiConfigResponse;
30 import org.codelibs.fess.app.web.api.ApiResult.ApiResponse;
31 import org.codelibs.fess.app.web.api.ApiResult.ApiUpdateResponse;
32 import org.codelibs.fess.app.web.api.ApiResult.Status;
33 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
34 import org.codelibs.fess.opensearch.config.exentity.RelatedContent;
35 import org.lastaflute.web.Execute;
36 import org.lastaflute.web.response.JsonResponse;
37
38 import jakarta.annotation.Resource;
39
40
41
42
43
44
45 public class ApiAdminRelatedcontentAction extends FessApiAdminAction {
46
47 private static final Logger logger = LogManager.getLogger(ApiAdminRelatedcontentAction.class);
48
49
50
51
52
53
54
55 public ApiAdminRelatedcontentAction() {
56 super();
57 }
58
59
60
61
62
63 @Resource
64 private RelatedContentService relatedContentService;
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79 @Execute
80 public JsonResponse<ApiResult> settings(final SearchBody body) {
81 validateApi(body, messages -> {});
82 final RelatedContentPager pager = copyBeanToNewBean(body, RelatedContentPager.class);
83 final List<RelatedContent> list = relatedContentService.getRelatedContentList(pager);
84 return asJson(
85 new ApiResult.ApiConfigsResponse<EditBody>().settings(list.stream().map(this::createEditBody).collect(Collectors.toList()))
86 .total(pager.getAllRecordCount())
87 .status(ApiResult.Status.OK)
88 .result());
89 }
90
91
92
93
94
95
96
97
98 @Execute
99 public JsonResponse<ApiResult> get$setting(final String id) {
100 return asJson(
101 new ApiConfigResponse().setting(relatedContentService.getRelatedContent(id).map(this::createEditBody).orElseGet(() -> {
102 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
103 return null;
104 })).status(Status.OK).result());
105 }
106
107
108
109
110
111
112
113
114 @Execute
115 public JsonResponse<ApiResult> post$setting(final CreateBody body) {
116 validateApi(body, messages -> {});
117 body.crudMode = CrudMode.CREATE;
118 final RelatedContent relatedContent = getRelatedContent(body).map(entity -> {
119 try {
120 relatedContentService.store(entity);
121 } catch (final Exception e) {
122 logger.warn("Failed to process a request.", e);
123 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)));
124 }
125 return entity;
126 }).orElseGet(() -> {
127 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL));
128 return null;
129 });
130
131 return asJson(new ApiUpdateResponse().id(relatedContent.getId()).created(true).status(Status.OK).result());
132 }
133
134
135
136
137
138
139
140
141 @Execute
142 public JsonResponse<ApiResult> put$setting(final EditBody body) {
143 validateApi(body, messages -> {});
144 body.crudMode = CrudMode.EDIT;
145 final RelatedContent relatedContent = getRelatedContent(body).map(entity -> {
146 try {
147 relatedContentService.store(entity);
148 } catch (final Exception e) {
149 logger.warn("Failed to process a request.", e);
150 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)));
151 }
152 return entity;
153 }).orElseGet(() -> {
154 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id));
155 return null;
156 });
157 return asJson(new ApiUpdateResponse().id(relatedContent.getId()).created(false).status(Status.OK).result());
158 }
159
160
161
162
163
164
165
166
167 @Execute
168 public JsonResponse<ApiResult> delete$setting(final String id) {
169 relatedContentService.getRelatedContent(id).ifPresent(entity -> {
170 try {
171 relatedContentService.delete(entity);
172 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
173 } catch (final Exception e) {
174 logger.warn("Failed to process a request.", e);
175 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
176 }
177 }).orElse(() -> {
178 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
179 });
180 return asJson(new ApiResponse().status(Status.OK).result());
181 }
182
183
184
185
186
187
188
189 protected EditBody createEditBody(final RelatedContent entity) {
190 final EditBody body = new EditBody();
191 copyBeanToBean(entity, body, copyOp -> {
192 copyOp.excludeNull();
193 });
194 return body;
195 }
196 }