Coverage Report - jp.co.y_net.amm.page.OrgMemberListPage
 
Classes in this File Line Coverage Branch Coverage Complexity
OrgMemberListPage
0%
0/56
0%
0/10
0
OrgMemberListPage$1
0%
0/5
0%
0/2
0
OrgMemberListPage$2
0%
0/2
N/A
0
OrgMemberListPage$3
0%
0/7
0%
0/4
0
OrgMemberListPage$4
0%
0/4
N/A
0
OrgMemberListPage$5
0%
0/18
0%
0/10
0
OrgMemberListPage$6
0%
0/27
0%
0/6
0
OrgMemberListPage$6$1
0%
0/7
0%
0/2
0
OrgMemberListPage$6$2
0%
0/6
N/A
0
OrgMemberListPage$7
0%
0/2
N/A
0
OrgMemberListPage$8
0%
0/15
0%
0/4
0
 
 1  0
 package jp.co.y_net.amm.page;
 2  
 
 3  
 import java.util.ArrayList;
 4  
 import java.util.Collections;
 5  
 import java.util.List;
 6  
 import java.util.Map;
 7  
 import java.util.Map.Entry;
 8  
 
 9  
 import jp.co.y_net.amm.AppSession;
 10  
 import jp.co.y_net.amm.common.ChoiceElement;
 11  
 import jp.co.y_net.amm.common.ResourceReader;
 12  
 import jp.co.y_net.amm.dao.Org;
 13  
 import jp.co.y_net.amm.dao.Usr;
 14  
 
 15  
 import org.apache.commons.lang.StringUtils;
 16  
 import org.apache.wicket.ajax.AjaxRequestTarget;
 17  
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 18  
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 19  
 import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
 20  
 import org.apache.wicket.markup.html.WebMarkupContainer;
 21  
 import org.apache.wicket.markup.html.basic.Label;
 22  
 import org.apache.wicket.markup.html.form.DropDownChoice;
 23  
 import org.apache.wicket.markup.html.form.Form;
 24  
 import org.apache.wicket.markup.html.form.TextField;
 25  
 import org.apache.wicket.markup.html.link.ExternalLink;
 26  
 import org.apache.wicket.markup.html.link.Link;
 27  
 import org.apache.wicket.markup.html.list.ListItem;
 28  
 import org.apache.wicket.markup.html.list.PageableListView;
 29  
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 30  
 import org.apache.wicket.model.IModel;
 31  
 import org.apache.wicket.model.LoadableDetachableModel;
 32  
 import org.apache.wicket.model.Model;
 33  
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 34  
 
 35  
 public class OrgMemberListPage extends CommonFrameA {
 36  
         private static final long serialVersionUID = 1L;
 37  
         
 38  
     /*
 39  
      * 画面入力値
 40  
      */
 41  
     // 無し
 42  
     
 43  
     /*
 44  
      * 画面の状態
 45  
      */
 46  0
         private boolean complete = true;
 47  
         
 48  
     /**
 49  
      * ログインチェック定義
 50  
      * @see jp.co.y_net.amm.page.AppPage#validateLogin()
 51  
      */
 52  
     @Override
 53  
     public boolean validateLogin() {
 54  0
         if(AppSession.get().isLogin()) {
 55  0
             if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) {
 56  0
                 return true;
 57  
             }
 58  
         }
 59  0
         return false;
 60  
     }
 61  
         
 62  0
     public OrgMemberListPage(PageParameters pageParams) {
 63  
         
 64  
         /* 戻るリンク */
 65  0
         add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin")));
 66  
         
 67  
         /* フィードバックメッセージ */
 68  0
         final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
 69  0
         feedbackPanel.setOutputMarkupId(true);
 70  0
         add(feedbackPanel);
 71  
         
 72  
         /* 入力フォーム */
 73  0
         Form<Void> form  = new Form<Void>("form");
 74  0
         add(form);
 75  
         
 76  
         /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */
 77  0
         form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。
 78  
         // なし
 79  
         
 80  0
         if(hasInputError()) return; // ----------エラーがあれば中止
 81  0
         form.setVisible(true);
 82  
         
 83  
         /* Form内の設定 ----------------------------------------------------------------------------------------------*/
 84  
         /* 完了メッセージ */
 85  0
         Model<String> resultMessageModel = new Model<String>() {
 86  
             @Override
 87  
             public String getObject() {
 88  0
                 if(complete) {
 89  0
                     return "";
 90  
                 }
 91  0
                 return "";
 92  
             }
 93  
         };
 94  0
         final Label resutlMessage = new Label("resutlMessage", resultMessageModel);
 95  0
         resutlMessage.setOutputMarkupId(true);
 96  0
         form.add(resutlMessage);
 97  
         
 98  
         /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/
 99  
         
 100  
         /* 絞り込み */
 101  
         // 会員の種類
 102  0
         List<ChoiceElement> choiceKind = new ArrayList<ChoiceElement>();
 103  0
         choiceKind.add(new ChoiceElement(" ","(選択してください)"));
 104  0
         Map<String, String> map = Org.getOrgkindMap();
 105  0
         for(Entry<String, String> e: map.entrySet()) {
 106  0
             choiceKind.add(new ChoiceElement(e.getKey(), e.getValue()));
 107  
         }
 108  0
         final Model<ChoiceElement> kindModel = new Model<ChoiceElement>();
 109  0
         ChoiceElement.setDropDownList(kindModel, choiceKind, " "); // 初期値設定
 110  0
         final DropDownChoice<ChoiceElement> filterKind = new DropDownChoice<ChoiceElement>(
 111  0
                 "filterKind", kindModel, choiceKind, new ChoiceElement.Renderer());
 112  0
         form.add(filterKind);
 113  
         // 名称|氏名での絞り込み
 114  0
         final TextField<String> filterName = new TextField<String>("filterName", Model.of("")){
 115  
         };
 116  0
         form.add(filterName);
 117  
         // 名称|氏名のラベル
 118  0
         final Label labelFilterName = new Label("labelFilterName", new Model<String>(){
 119  
             @Override
 120  
             public String getObject() {
 121  0
                 if(kindModel.getObject().getId().equals(" ")) {
 122  0
                     return "名称か氏名";
 123  
                 } else {
 124  0
                     if(kindModel.getObject().getId().equals(Org.KIND_PERSONAL_STR)) {
 125  0
                         return "会員の氏名";
 126  
                     } else {
 127  0
                         return "会員の名称";
 128  
                     }
 129  
                 }
 130  
             }
 131  
         });
 132  0
         labelFilterName.setOutputMarkupId(true);
 133  0
         form.add(labelFilterName);
 134  
         // 会員の種類で表示するラベルを変更する。
 135  0
         filterKind.add(new AjaxFormComponentUpdatingBehavior("onchange") {
 136  
             @Override
 137  
             protected void onUpdate(AjaxRequestTarget target) {
 138  0
                 target.add(labelFilterName);
 139  0
             }
 140  
         });
 141  
         
 142  
 //        /* 所属機関 */
 143  
 //        List<ChoiceElement> choiceOrg = new ArrayList<ChoiceElement>();
 144  
 //        choiceOrg.add(new ChoiceElement(" ",""));
 145  
 //        choiceOrg.add(new ChoiceElement("personal","(個人)")); // 個人
 146  
 //        for(Org o: orgDao.get()) {
 147  
 //            choiceOrg.add(new ChoiceElement(String.valueOf(o.getOrgid()), o.getName()));
 148  
 //        }
 149  
 //        final Model<ChoiceElement> orgModel = new Model<ChoiceElement>();
 150  
 //        ChoiceElement.setDropDownList(orgModel, choiceOrg, " "); // 初期値設定
 151  
 //        
 152  
 //        final DropDownChoice<ChoiceElement> selectOrg = new DropDownChoice<ChoiceElement>(
 153  
 //                "selectOrg", orgModel, choiceOrg, new ChoiceElement.Renderer());
 154  
 //        form.add(selectOrg);
 155  
         
 156  
         /* コンテナの設定 ------------------------------------------------------------------------------------------------*/
 157  
         /* 
 158  
          * 画面の部分更新の対象となるコンテナ
 159  
          *  ページをインスタンス化するときに初期非表示としてはいけない。
 160  
          */
 161  0
         final WebMarkupContainer orglistContainer = new WebMarkupContainer("orglistContainer");
 162  0
         orglistContainer.setOutputMarkupId(true);
 163  0
         form.add(orglistContainer);
 164  
         
 165  0
         final WebMarkupContainer orglistContainerData = new WebMarkupContainer("orglistContainerData");
 166  0
         orglistContainer.add(orglistContainerData);
 167  
         
 168  0
         final WebMarkupContainer orglistContainerNoData = new WebMarkupContainer("orglistContainerNoData");
 169  0
         orglistContainer.add(orglistContainerNoData);
 170  
         
 171  
         /* 一覧の設定 ------------------------------------------------------------------------------------------------*/
 172  
         
 173  
         // LoadableDetachableModel は リクエストの最初に load にてデータを取得するモデル
 174  0
         final IModel<List<Org>> orgModel = new LoadableDetachableModel<List<Org>>() {
 175  
             @Override
 176  
             protected List<Org> load() {
 177  
                 
 178  0
                 List<Org> list = new ArrayList<Org>();
 179  
 
 180  0
                 if(kindModel.getObject().getId().equals(" ")) {
 181  
                     /* 「(選択してください)」のままなので、検索しない*/
 182  
 
 183  
                 } else {
 184  0
                     String targetName = filterName.getValue();
 185  0
                     if(targetName != null) targetName = targetName.trim();
 186  
                     
 187  0
                     Org cnd = new Org();
 188  0
                     Integer kind = Integer.parseInt(kindModel.getObject().getId());
 189  0
                     cnd.setKind(kind);
 190  0
                     List<Org> results = orgDao.get(cnd);
 191  
                     
 192  0
                     if(StringUtils.isEmpty(targetName)) {
 193  0
                         list.addAll(results);
 194  0
                     } else {
 195  0
                         for(Org result: results) {
 196  0
                             if(result.getNameOrAdminname().contains(targetName)) {
 197  0
                                 list.add(result);
 198  
                             }
 199  
                         }
 200  
                     }
 201  
                 }
 202  
 
 203  
                 /* 申請日付の新しい順でソート*/
 204  0
                 Collections.sort(list, new Org.EntryDateComparator(true));
 205  
                 
 206  0
                 return list;
 207  
             }
 208  
         };
 209  0
         final PageableListView<Org> orglist = new PageableListView<Org>("orglist", orgModel, 20) {
 210  
             private static final long serialVersionUID = 1L;
 211  
 
 212  
             @Override
 213  
             protected void populateItem(ListItem<Org> item) {
 214  0
                 final Org org = item.getModelObject();
 215  
 
 216  
                 /* 会員種別 */
 217  0
                 item.add(new Label("kind", org.getKind_Disp()));
 218  
                 
 219  
                 /* 名称とリンク */
 220  0
                 final PageParameters param = new PageParameters();
 221  0
                 param.add("orgid", org.getOrgid());
 222  
                 //BookmarkablePageLink<Void> lnkName = new BookmarkablePageLink<Void>("lnkName", OrgDetailPage.class, param); 
 223  0
                 Link<Void> lnkName = new Link<Void>("lnkName") {
 224  
                     @Override
 225  
                     public void onClick() {
 226  0
                         OrgDetailPage nextPage = new OrgDetailPage(param);
 227  0
                         nextPage.setReturnPage(getPage());
 228  0
                         setResponsePage(nextPage);
 229  0
                     }
 230  
 
 231  
                     @Override
 232  
                     protected boolean isLinkEnabled() {
 233  0
                         return Org.STATUS_本登録済み == org.getStatus();
 234  
                     }
 235  
                     
 236  
                 };
 237  
                 
 238  0
                 String name = org.getNameOrAdminname();
 239  0
                 if(StringUtils.isEmpty(name)) {
 240  0
                     name = "※"; // 仮に値が取得できない場合でも、リンクに使用されるため、疑似値を設定した。
 241  
                 }
 242  0
                 Label lnklblName = new Label("lnklblName", name);
 243  0
                 lnkName.add(lnklblName);
 244  0
                 item.add(lnkName);
 245  
                 
 246  
                 /* ステータス */
 247  0
                 item.add(new Label("status", org.getStatus_Disp()));
 248  
 
 249  
                 /* 申請日時 */
 250  0
                 item.add(new Label("entrydate" , org.getEntrydate_Disp()));
 251  
                 
 252  
                 /* 会員一覧へのリンク */
 253  0
                 Link<Void> lnkMemberlist = new Link<Void>("lnkMemberlist"){
 254  
                     @Override
 255  
                     public void onClick() {
 256  0
                         MemberListPage nextPage = new MemberListPage(param);
 257  0
                         nextPage.setReturnPage(getPage());
 258  0
                         setResponsePage(nextPage);
 259  0
                     }
 260  
                 };
 261  0
                 item.add(lnkMemberlist);
 262  
                 
 263  
                 /* 会員数(登録可能会員数)*/
 264  
                 String limitnum;
 265  0
                 Usr usrCnd = new Usr();
 266  0
                 usrCnd.setOrgid(org.getOrgid());
 267  0
                 Usr usrCndNot = new Usr();
 268  0
                 usrCndNot.setStatus(Usr.STATUS_退会);
 269  0
                 List<Usr> usrs = usrDao.get(usrCnd, usrCndNot); // 該当組織で退会していないデータのリスト
 270  0
                 limitnum = String.valueOf(usrs.size());
 271  0
                 if(org.getLimitnum() != null && org.getLimitnum() >= 0) {
 272  0
                     limitnum += "(" + org.getLimitnum() + ")";
 273  
                 }
 274  0
                 lnkMemberlist.add(new Label("limitnum" , limitnum));
 275  0
             }
 276  
         };
 277  0
         orglistContainerData.add(orglist);
 278  
         
 279  
         /* ページングの部品 */
 280  0
         final AjaxPagingNavigator pagingOrglist = new AjaxPagingNavigator("pagingOrglist", orglist){};
 281  0
         orglistContainerData.add(pagingOrglist);
 282  
 
 283  
         
 284  
         
 285  
         /* コンテナ制御 */
 286  0
         if(orgModel.getObject().isEmpty()) {
 287  0
             orglistContainerData.setVisible(false);
 288  0
             orglistContainerNoData.setVisible(true);
 289  0
         } else {
 290  0
             orglistContainerData.setVisible(true);
 291  0
             orglistContainerNoData.setVisible(false);
 292  
         }
 293  
         
 294  
         
 295  
         
 296  
 //        final PageableListView<Usr> listview = new PageableListView<Usr>("listView", usrModel, 20) {
 297  
 //            private static final long serialVersionUID = 1L;
 298  
 //            @Override
 299  
 //            protected void populateItem(ListItem<Usr> item) {
 300  
 //                Usr member = item.getModelObject();
 301  
 //                
 302  
 //                /* 所属機関リンク */
 303  
 //                Org org = orgDao.getByOrgid(member.getOrgid());
 304  
 //                PageParameters paramOrg = new PageParameters();
 305  
 //                paramOrg.add("orgid", org.getOrgid());
 306  
 //                BookmarkablePageLink<Void> lnkOrg = new BookmarkablePageLink<Void>("lnkOrg", OrgDetailPage.class, paramOrg);
 307  
 //                String orgnameStr = org.getName();
 308  
 //                if(org.isParsonal()) {
 309  
 //                    orgnameStr += "(個人)";
 310  
 //                }
 311  
 //                Label orgname = new Label("orgname", orgnameStr);
 312  
 //                lnkOrg.add(orgname);
 313  
 //                item.add(lnkOrg);
 314  
 //                
 315  
 //                /* 氏名リンク */
 316  
 //                PageParameters param = new PageParameters();
 317  
 //                param.add("usrid", member.getUsrid());
 318  
 //                BookmarkablePageLink<Void> lnkUsr = new BookmarkablePageLink<Void>("lnkUsr", MemberDetailPage.class, param);
 319  
 //                Label usrname = new Label("usrname", member.getName());
 320  
 //                lnkUsr.add(usrname);
 321  
 //                item.add(lnkUsr);
 322  
 //                
 323  
 //                /* 会員種別 */
 324  
 //                item.add(new Label("usrkind", member.getKind_Disp()));
 325  
 //                
 326  
 //                /* 状態 */
 327  
 //                item.add(new Label("usrstatus", member.getStatus_Disp()));
 328  
 //                
 329  
 //                /* 最終ログイン日時 */
 330  
 //                item.add(new Label("usrlastlogin" , member.getLastlogindate_Disp()));
 331  
 //            }
 332  
 //        };
 333  
 //        listViewContainer.add(listview);
 334  
 //        AjaxPagingNavigator navigator = new AjaxPagingNavigator("paging", listview);
 335  
 //        form.add(navigator);
 336  
         
 337  
 
 338  
         
 339  
         
 340  
         /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/
 341  0
         AjaxButton btnSubmit = new AjaxButton("submitSelect") {
 342  
             private static final long serialVersionUID = 1L;
 343  
             @Override
 344  
             protected void onSubmit(AjaxRequestTarget target, Form<?> form){
 345  0
                 if(kindModel.getObject().getId().equals(" ")) {
 346  
                     /* 「(選択してください)」のままなので、検索しない*/
 347  0
                     error("会員の種別を選択してください。");
 348  0
                     target.add(feedbackPanel);
 349  0
                     return;
 350  
                 }
 351  
                 /* コンテナ制御 */
 352  0
                 if(orgModel.getObject().isEmpty()) {
 353  0
                     orglistContainerData.setVisible(false);
 354  0
                     orglistContainerNoData.setVisible(true);
 355  0
                 } else {
 356  0
                     orglistContainerData.setVisible(true);
 357  0
                     orglistContainerNoData.setVisible(false);
 358  
                 }
 359  
                 
 360  0
                 target.add(orglistContainer); // 一覧再描画
 361  0
             }
 362  
             @Override
 363  
             protected void onError(AjaxRequestTarget target, Form<?> form) {
 364  
                 /* エラーハンドリングなし */
 365  0
             }
 366  
         };
 367  0
         form.add(btnSubmit);
 368  
         
 369  0
     }
 370  
         
 371  
 }