1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.dict.synonym;
17
18 import static org.codelibs.fess.app.web.admin.dict.synonym.AdminDictSynonymAction.createSynonymItem;
19
20 import java.io.File;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.util.stream.Collectors;
24
25 import org.apache.logging.log4j.LogManager;
26 import org.apache.logging.log4j.Logger;
27 import org.codelibs.fess.app.pager.SynonymPager;
28 import org.codelibs.fess.app.service.SynonymService;
29 import org.codelibs.fess.app.web.CrudMode;
30 import org.codelibs.fess.app.web.admin.dict.synonym.UploadForm;
31 import org.codelibs.fess.app.web.api.ApiResult;
32 import org.codelibs.fess.app.web.api.admin.FessApiAdminAction;
33 import org.codelibs.fess.dict.synonym.SynonymFile;
34 import org.codelibs.fess.dict.synonym.SynonymItem;
35 import org.lastaflute.web.Execute;
36 import org.lastaflute.web.response.JsonResponse;
37 import org.lastaflute.web.response.StreamResponse;
38
39 import jakarta.annotation.Resource;
40
41
42
43
44
45 public class ApiAdminDictSynonymAction extends FessApiAdminAction {
46
47
48
49
50 public ApiAdminDictSynonymAction() {
51 super();
52 }
53
54 private static final Logger logger = LogManager.getLogger(ApiAdminDictSynonymAction.class);
55
56 @Resource
57 private SynonymService synonymService;
58
59
60
61
62
63
64
65
66
67 @Execute
68 public JsonResponse<ApiResult> get$settings(final String dictId, final SearchBody body) {
69 body.dictId = dictId;
70 validateApi(body, messages -> {});
71 final SynonymPager pager = copyBeanToNewBean(body, SynonymPager.class);
72 return asJson(new ApiResult.ApiConfigsResponse<EditBody>().settings(synonymService.getSynonymList(body.dictId, pager)
73 .stream()
74 .map(protwordsItem -> createEditBody(protwordsItem, dictId))
75 .collect(Collectors.toList())).status(ApiResult.Status.OK).result());
76 }
77
78
79
80
81
82
83
84
85
86 @Execute
87 public JsonResponse<ApiResult> get$setting(final String dictId, final long id) {
88 return asJson(new ApiResult.ApiConfigResponse()
89 .setting(synonymService.getSynonymItem(dictId, id).map(entity -> createEditBody(entity, dictId)).orElseGet(() -> {
90 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, String.valueOf(id)));
91 return null;
92 }))
93 .status(ApiResult.Status.OK)
94 .result());
95 }
96
97
98
99
100
101
102
103
104
105 @Execute
106 public JsonResponse<ApiResult> post$setting(final String dictId, final CreateBody body) {
107 body.dictId = dictId;
108 validateApi(body, messages -> {});
109 body.crudMode = CrudMode.CREATE;
110 final SynonymItem entity = createSynonymItem(this, body, () -> {
111 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL));
112 return null;
113 }).orElseGet(() -> {
114 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL));
115 return null;
116 });
117 synonymService.store(body.dictId, entity);
118 return asJson(
119 new ApiResult.ApiUpdateResponse().id(String.valueOf(entity.getId())).created(true).status(ApiResult.Status.OK).result());
120 }
121
122
123
124
125
126
127
128
129
130 @Execute
131 public JsonResponse<ApiResult> put$setting(final String dictId, final EditBody body) {
132 body.dictId = dictId;
133 validateApi(body, messages -> {});
134 body.crudMode = CrudMode.EDIT;
135 final SynonymItem entity = createSynonymItem(this, body, () -> {
136 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, String.valueOf(body.id)));
137 return null;
138 }).orElseGet(() -> {
139 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, String.valueOf(body.id)));
140 return null;
141 });
142 synonymService.store(body.dictId, entity);
143 return asJson(
144 new ApiResult.ApiUpdateResponse().id(String.valueOf(entity.getId())).created(false).status(ApiResult.Status.OK).result());
145 }
146
147
148
149
150
151
152
153
154
155 @Execute
156 public JsonResponse<ApiResult> delete$setting(final String dictId, final long id) {
157 synonymService.getSynonymItem(dictId, id).ifPresent(entity -> {
158 synonymService.delete(dictId, entity);
159 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
160 }).orElse(() -> {
161 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, String.valueOf(id)));
162 });
163 return asJson(new ApiResult.ApiUpdateResponse().id(String.valueOf(id)).created(false).status(ApiResult.Status.OK).result());
164 }
165
166
167
168
169
170
171
172
173
174 @Execute
175 public JsonResponse<ApiResult> put$upload(final String dictId, final UploadForm form) {
176 form.dictId = dictId;
177 validateApi(form, messages -> {});
178 final SynonymFile file = synonymService.getSynonymFile(form.dictId).orElseGet(() -> {
179 throwValidationErrorApi(messages -> messages.addErrorsFailedToUploadProtwordsFile(GLOBAL));
180 return null;
181 });
182 try (InputStream inputStream = form.synonymFile.getInputStream()) {
183 file.update(inputStream);
184 } catch (final IOException e) {
185 logger.warn("Failed to process a request.", e);
186 throwValidationErrorApi(messages -> messages.addErrorsFailedToUploadProtwordsFile(GLOBAL));
187 }
188 return asJson(new ApiResult.ApiResponse().status(ApiResult.Status.OK).result());
189 }
190
191
192
193
194
195
196
197
198
199 @Execute
200 public StreamResponse get$download(final String dictId, final DownloadBody body) {
201 body.dictId = dictId;
202 validateApi(body, messages -> {});
203 return synonymService.getSynonymFile(body.dictId)
204 .map(file -> asStream(new File(file.getPath()).getName()).contentTypeOctetStream().stream(out -> {
205 file.writeOut(out);
206 }))
207 .orElseGet(() -> {
208 throwValidationErrorApi(messages -> messages.addErrorsFailedToDownloadProtwordsFile(GLOBAL));
209 return null;
210 });
211 }
212
213
214
215
216
217
218
219
220 protected EditBody createEditBody(final SynonymItem entity, final String dictId) {
221 final EditBody body = new EditBody();
222 body.id = entity.getId();
223 body.dictId = dictId;
224 body.inputs = entity.getInputsValue();
225 body.outputs = entity.getOutputsValue();
226 return body;
227 }
228 }