View Javadoc
1   /*
2    * Copyright 2012-2021 CodeLibs Project and the Others.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
13   * either express or implied. See the License for the specific language
14   * governing permissions and limitations under the License.
15   */
16  package org.codelibs.fess.app.web.admin.failureurl;
17  
18  import javax.annotation.Resource;
19  
20  import org.codelibs.fess.Constants;
21  import org.codelibs.fess.annotation.Secured;
22  import org.codelibs.fess.app.pager.FailureUrlPager;
23  import org.codelibs.fess.app.service.FailureUrlService;
24  import org.codelibs.fess.app.web.CrudMode;
25  import org.codelibs.fess.app.web.base.FessAdminAction;
26  import org.codelibs.fess.util.RenderDataUtil;
27  import org.lastaflute.web.Execute;
28  import org.lastaflute.web.response.HtmlResponse;
29  import org.lastaflute.web.response.render.RenderData;
30  import org.lastaflute.web.ruts.process.ActionRuntime;
31  
32  /**
33   * @author shinsuke
34   * @author Keiichi Watanabe
35   */
36  public class AdminFailureurlAction extends FessAdminAction {
37  
38      public static final String ROLE = "admin-failureurl";
39  
40      // ===================================================================================
41      //                                                                           Attribute
42      //                                                                           =========
43      @Resource
44      private FailureUrlService failureUrlService;
45      @Resource
46      private FailureUrlPager failureUrlPager;
47  
48      // ===================================================================================
49      //                                                                               Hook
50      //                                                                              ======
51      @Override
52      protected void setupHtmlData(final ActionRuntime runtime) {
53          super.setupHtmlData(runtime);
54          runtime.registerData("helpLink", systemHelper.getHelpLink(fessConfig.getOnlineHelpNameFailureurl()));
55      }
56  
57      @Override
58      protected String getActionRole() {
59          return ROLE;
60      }
61  
62      // ===================================================================================
63      //                                                                      Search Execute
64      //                                                                      ==============
65      @Execute
66      @Secured({ ROLE, ROLE + VIEW })
67      public HtmlResponse index() {
68          saveToken();
69          return asListHtml();
70      }
71  
72      @Execute
73      @Secured({ ROLE, ROLE + VIEW })
74      public HtmlResponse list(final Integer pageNumber, final SearchForm form) {
75          failureUrlPager.setCurrentPageNumber(pageNumber);
76          return asHtml(path_AdminFailureurl_AdminFailureurlJsp).renderWith(data -> {
77              searchPaging(data, form);
78          });
79      }
80  
81      @Execute
82      @Secured({ ROLE, ROLE + VIEW })
83      public HtmlResponse search(final SearchForm form) {
84          copyBeanToBean(form, failureUrlPager, op -> op.exclude(Constants.PAGER_CONVERSION_RULE));
85          return asHtml(path_AdminFailureurl_AdminFailureurlJsp).renderWith(data -> {
86              searchPaging(data, form);
87          });
88      }
89  
90      @Execute
91      @Secured({ ROLE, ROLE + VIEW })
92      public HtmlResponse reset(final SearchForm form) {
93          failureUrlPager.clear();
94          return asHtml(path_AdminFailureurl_AdminFailureurlJsp).renderWith(data -> {
95              searchPaging(data, form);
96          });
97      }
98  
99      @Execute
100     @Secured({ ROLE, ROLE + VIEW })
101     public HtmlResponse back(final SearchForm form) {
102         return asHtml(path_AdminFailureurl_AdminFailureurlJsp).renderWith(data -> {
103             searchPaging(data, form);
104         });
105     }
106 
107     protected void searchPaging(final RenderData data, final SearchForm form) {
108         RenderDataUtil.register(data, "failureUrlItems", failureUrlService.getFailureUrlList(failureUrlPager)); // page navi
109 
110         // restore from pager
111         copyBeanToBean(failureUrlPager, form, op -> op.include("url", "errorCountMin", "errorCountMax", "errorName"));
112     }
113 
114     // -----------------------------------------------------
115     //                                               Details
116     //                                               -------
117     @Execute
118     @Secured({ ROLE, ROLE + VIEW })
119     public HtmlResponse details(final int crudMode, final String id) {
120         verifyCrudMode(crudMode, CrudMode.DETAILS);
121         return asHtml(path_AdminFailureurl_AdminFailureurlDetailsJsp).useForm(EditForm.class, op -> {
122             op.setup(form -> {
123                 failureUrlService.getFailureUrl(id).ifPresent(entity -> {
124                     copyBeanToBean(entity, form, copyOp -> {
125                         copyOp.excludeNull();
126                     });
127                     form.crudMode = crudMode;
128                 }).orElse(() -> {
129                     throwValidationError(messages -> messages.addErrorsCrudCouldNotFindCrudTable(GLOBAL, id), this::asListHtml);
130                 });
131             });
132         });
133     }
134 
135     // -----------------------------------------------------
136     //                            Actually Crud (only Delete)
137     //                                         -------------
138 
139     @Execute
140     @Secured({ ROLE })
141     public HtmlResponse delete(final EditForm form) {
142         verifyCrudMode(form.crudMode, CrudMode.DETAILS);
143         validate(form, messages -> {}, this::asDetailsHtml);
144         verifyToken(this::asDetailsHtml);
145         final String id = form.id;
146         failureUrlService.getFailureUrl(id).alwaysPresent(entity -> {
147             failureUrlService.delete(entity);
148             saveInfo(messages -> messages.addSuccessCrudDeleteCrudTable(GLOBAL));
149         });
150         return redirect(getClass());
151     }
152 
153     @Execute
154     @Secured({ ROLE })
155     public HtmlResponse deleteall() {
156         verifyToken(this::asListHtml);
157         failureUrlService.deleteAll(failureUrlPager);
158         failureUrlPager.clear();
159         saveInfo(messages -> messages.addSuccessFailureUrlDeleteAll(GLOBAL));
160         return redirect(getClass());
161     }
162 
163     // ===================================================================================
164     //                                                                        Small Helper
165     //                                                                        ============
166     protected void verifyCrudMode(final int crudMode, final int expectedMode) {
167         if (crudMode != expectedMode) {
168             throwValidationError(messages -> {
169                 messages.addErrorsCrudInvalidMode(GLOBAL, String.valueOf(expectedMode), String.valueOf(crudMode));
170             }, this::asListHtml);
171         }
172     }
173 
174     // ===================================================================================
175     //                                                                              JSP
176     //                                                                           =========
177 
178     private HtmlResponse asListHtml() {
179         return asHtml(path_AdminFailureurl_AdminFailureurlJsp).renderWith(data -> {
180             RenderDataUtil.register(data, "failureUrlItems", failureUrlService.getFailureUrlList(failureUrlPager)); // page navi
181         }).useForm(SearchForm.class, setup -> {
182             setup.setup(form -> {
183                 copyBeanToBean(failureUrlPager, form, op -> op.include("url", "errorCountMin", "errorCountMax", "errorName"));
184             });
185         });
186     }
187 
188     private HtmlResponse asDetailsHtml() {
189         return asHtml(path_AdminFailureurl_AdminFailureurlDetailsJsp);
190     }
191 }