1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.app.web.api.admin.relatedquery;
17
18 import static org.codelibs.core.stream.StreamUtil.stream;
19 import static org.codelibs.fess.app.web.admin.relatedquery.AdminRelatedqueryAction.getRelatedQuery;
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.RelatedQueryPager;
29 import org.codelibs.fess.app.service.RelatedQueryService;
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.RelatedQuery;
38 import org.lastaflute.web.Execute;
39 import org.lastaflute.web.response.JsonResponse;
40
41 public class ApiAdminRelatedqueryAction extends FessApiAdminAction {
42
43
44
45
46 @Resource
47 private RelatedQueryService relatedQueryService;
48
49
50
51
52
53
54
55 @Execute
56 public JsonResponse<ApiResult> settings(final SearchBody body) {
57 validateApi(body, messages -> {});
58 final RelatedQueryPager pager = copyBeanToNewBean(body, RelatedQueryPager.class);
59 final List<RelatedQuery> list = relatedQueryService.getRelatedQueryList(pager);
60 return asJson(
61 new ApiResult.ApiConfigsResponse<EditBody>().settings(list.stream().map(this::createEditBody).collect(Collectors.toList()))
62 .total(pager.getAllRecordCount()).status(ApiResult.Status.OK).result());
63 }
64
65
66 @Execute
67 public JsonResponse<ApiResult> get$setting(final String id) {
68 return asJson(new ApiConfigResponse().setting(relatedQueryService.getRelatedQuery(id).map(this::createEditBody).orElseGet(() -> {
69 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
70 return null;
71 })).status(Status.OK).result());
72 }
73
74
75 @Execute
76 public JsonResponse<ApiResult> put$setting(final CreateBody body) {
77 validateApi(body, messages -> {});
78 body.crudMode = CrudMode.CREATE;
79 final RelatedQuery relatedQuery = getRelatedQuery(body).map(entity -> {
80 try {
81 relatedQueryService.store(entity);
82 } catch (final Exception e) {
83 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateCrudTable(GLOBAL, buildThrowableMessage(e)));
84 }
85 return entity;
86 }).orElseGet(() -> {
87 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToCreateInstance(GLOBAL));
88 return null;
89 });
90
91 return asJson(new ApiUpdateResponse().id(relatedQuery.getId()).created(true).status(Status.OK).result());
92 }
93
94
95 @Execute
96 public JsonResponse<ApiResult> post$setting(final EditBody body) {
97 validateApi(body, messages -> {});
98 body.crudMode = CrudMode.EDIT;
99 final RelatedQuery relatedQuery = getRelatedQuery(body).map(entity -> {
100 try {
101 relatedQueryService.store(entity);
102 } catch (final Exception e) {
103 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToUpdateCrudTable(GLOBAL, buildThrowableMessage(e)));
104 }
105 return entity;
106 }).orElseGet(() -> {
107 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, body.id));
108 return null;
109 });
110 return asJson(new ApiUpdateResponse().id(relatedQuery.getId()).created(false).status(Status.OK).result());
111 }
112
113
114 @Execute
115 public JsonResponse<ApiResult> delete$setting(final String id) {
116 relatedQueryService.getRelatedQuery(id).ifPresent(entity -> {
117 try {
118 relatedQueryService.delete(entity);
119 saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
120 } catch (final Exception e) {
121 throwValidationErrorApi(messages -> messages.addErrorsCrudFailedToDeleteCrudTable(GLOBAL, buildThrowableMessage(e)));
122 }
123 }).orElse(() -> {
124 throwValidationErrorApi(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id));
125 });
126 return asJson(new ApiResponse().status(Status.OK).result());
127 }
128
129 protected EditBody createEditBody(final RelatedQuery entity) {
130 final EditBody body = new EditBody();
131 copyBeanToBean(entity, body, copyOp -> {
132 copyOp.excludeNull();
133 copyOp.exclude(Constants.QUERIES);
134 });
135 body.queries = stream(entity.getQueries()).get(stream -> stream.filter(StringUtil::isNotBlank).collect(Collectors.joining("\n")));
136 return body;
137 }
138 }