Coverage Report - jp.co.y_net.amm.page.GroupMemberListPage
 
Classes in this File Line Coverage Branch Coverage Complexity
GroupMemberListPage
0%
0/58
0%
0/14
0
GroupMemberListPage$1
0%
0/5
0%
0/2
0
GroupMemberListPage$2
0%
0/12
0%
0/4
0
GroupMemberListPage$3
0%
0/48
0%
0/22
0
GroupMemberListPage$4
0%
0/14
N/A
0
GroupMemberListPage$4$1
0%
0/3
N/A
0
GroupMemberListPage$4$2
0%
0/11
0%
0/6
0
GroupMemberListPage$4$3
0%
0/13
0%
0/8
0
GroupMemberListPage$4$4
0%
0/14
0%
0/10
0
GroupMemberListPage$4$5
0%
0/14
0%
0/10
0
GroupMemberListPage$5
0%
0/2
N/A
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  
 
 7  
 import jp.co.y_net.amm.AppSession;
 8  
 import jp.co.y_net.amm.AppSession.LoginUser;
 9  
 import jp.co.y_net.amm.common.AppStringUtils;
 10  
 import jp.co.y_net.amm.common.AppUtils;
 11  
 import jp.co.y_net.amm.dao.Grp;
 12  
 import jp.co.y_net.amm.dao.Grpusr;
 13  
 import jp.co.y_net.amm.dao.Usr;
 14  
 
 15  
 import org.apache.wicket.ajax.AjaxRequestTarget;
 16  
 import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;
 17  
 import org.apache.wicket.markup.html.WebMarkupContainer;
 18  
 import org.apache.wicket.markup.html.basic.Label;
 19  
 import org.apache.wicket.markup.html.form.Button;
 20  
 import org.apache.wicket.markup.html.form.Form;
 21  
 import org.apache.wicket.markup.html.form.TextField;
 22  
 import org.apache.wicket.markup.html.list.ListItem;
 23  
 import org.apache.wicket.markup.html.list.PageableListView;
 24  
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 25  
 import org.apache.wicket.model.IModel;
 26  
 import org.apache.wicket.model.LoadableDetachableModel;
 27  
 import org.apache.wicket.model.Model;
 28  
 import org.apache.wicket.model.PropertyModel;
 29  
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 30  
 
 31  
 public class GroupMemberListPage extends CommonFrameA {
 32  
     private static final long serialVersionUID = 1L;
 33  
     // TODO 運営管理者向け制御
 34  
     
 35  
     /*
 36  
      * 画面入力値
 37  
      */
 38  
     public String usrmailValue;
 39  
     public String usrmail2Value;
 40  
     
 41  
     /*
 42  
      * 画面の状態
 43  
      */
 44  0
     private boolean complete = true;
 45  
     
 46  
     /**
 47  
      * ログインチェック定義
 48  
      * @see jp.co.y_net.amm.page.AppPage#validateLogin()
 49  
      */
 50  
     @Override
 51  
     public boolean validateLogin() {
 52  0
         if(AppSession.get().isLogin()) {
 53  0
             return true;
 54  
         }
 55  0
         return false;
 56  
     }
 57  
     
 58  0
     public GroupMemberListPage(PageParameters pageParams) {
 59  
         
 60  
         /* 共通戻るリンクの設置 */
 61  0
         createCommonBackLinks();
 62  
         
 63  
         /* フィードバックメッセージ */
 64  0
         final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
 65  0
         feedbackPanel.setOutputMarkupId(true);
 66  0
         add(feedbackPanel);
 67  
         
 68  
         /* 入力フォーム */
 69  0
         Form<Void> form  = new Form<Void>("form");
 70  0
         add(form);
 71  
         
 72  
         /* 初期表示エラーチェック・共通変数設定 --------------------------------------------------------------------- */
 73  0
         form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。
 74  
         
 75  
 //        final Usr loginUser = AppSession.get().getLoginUser();
 76  
         
 77  
         final Integer paramGrpid;
 78  0
         String paramGrpidStr = pageParams.get("grpid").toString();
 79  0
         if(paramGrpidStr == null) {
 80  0
             error("パラメータ grpid が指定されていません。");
 81  0
             return;
 82  
         } else {
 83  
             try {
 84  0
                 paramGrpid = Integer.parseInt(paramGrpidStr);
 85  0
             } catch (NumberFormatException e) {
 86  0
                 error("パラメータ grpid が不正です。");
 87  0
                 return;
 88  
             }
 89  
         }
 90  0
         final Grp targetGroup = grpDao.getByGrpid(paramGrpid);
 91  0
         if(targetGroup == null) {
 92  0
             error("パラメータ grpid に該当するデータがありません。");
 93  0
             return;
 94  
         }
 95  0
         final Integer targetGroupAdminid = targetGroup.getAdminusrid();
 96  
         
 97  0
         final LoginUser loginUser  = AppSession.get().getLoginUser();
 98  0
         if(loginUser == null) {
 99  0
             error("ログイン情報が取得できません。");
 100  0
             return;
 101  
         }
 102  0
         final Integer loginUserId = loginUser.getUsrid();
 103  
         
 104  0
         if(Usr.KIND_運営管理者 == loginUser.getKind()) {
 105  
             // 運営管理者は全てのグループを表示できる
 106  
         } else {
 107  0
             if(loginUserId.equals(targetGroup.getAdminusrid()) == false) {
 108  0
                 error("このグループの管理者ではありません。");
 109  0
                 return;
 110  
             }
 111  
         }
 112  
 
 113  
         
 114  0
         if(hasInputError()) return; // ----------エラーがあれば中止
 115  0
         form.setVisible(true);
 116  
         
 117  
         /* Form内の設定 ----------------------------------------------------------------------------------------------*/
 118  
         /* 完了メッセージ */
 119  0
         Model<String> resultMessageModel = new Model<String>() {
 120  
             @Override
 121  
             public String getObject() {
 122  0
                 if(complete) {
 123  0
                     return "";
 124  
                 }
 125  0
                 return "";
 126  
             }
 127  
         };
 128  0
         final Label resutlMessage = new Label("resutlMessage", resultMessageModel);
 129  0
         resutlMessage.setOutputMarkupId(true);
 130  0
         form.add(resutlMessage);
 131  
         /* ----------------------------------------------------------------------------------------------------------*/
 132  
         /* 一覧のモデルの設定 */
 133  
         
 134  0
         final IModel<List<Grpusr>> listModel = new LoadableDetachableModel<List<Grpusr>>() {
 135  
             /* LoadableDetachableModel#load は リクエストごと、最初に実行される */
 136  
             @Override
 137  
             protected List<Grpusr> load() {
 138  
                 
 139  0
                 Grpusr cnd = new Grpusr();
 140  0
                 cnd.setGrpid(paramGrpid);
 141  0
                 List<Grpusr> list = grpusrDao.get(cnd);
 142  
                 /* 
 143  
                  *・脱退者は除外する
 144  
                  */
 145  0
                 List<Grpusr> tmp = new ArrayList<Grpusr>();
 146  0
                 for(Grpusr gu: list) {
 147  0
                     if(Grpusr.STATUS_脱退.equals(gu.getStatus())) {
 148  
                      // 追加しない
 149  
                     } else {
 150  0
                         tmp.add(gu);
 151  
                     }
 152  
                 }
 153  0
                 list = tmp;
 154  
                 /* 参加日の新しい順でソート*/
 155  0
                 Collections.sort(list, new Grpusr.JoindateComparator(true));
 156  0
                 return list;
 157  
             }
 158  
         };
 159  
         
 160  
         /*グループ名*/
 161  0
         Label groupname = new Label("groupname", targetGroup.getName());
 162  0
         form.add(groupname);
 163  
         
 164  
         /* コンテナの設定 ------ -------------------------------------------------------------------------------------*/
 165  
         /* 
 166  
          * 画面の部分更新の対象となるコンテナ
 167  
          */
 168  
         
 169  
         /* メンバー一覧 */
 170  0
         final WebMarkupContainer listContainer = new WebMarkupContainer("listContainer");
 171  0
         listContainer.setOutputMarkupId(true);
 172  0
         listContainer.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする
 173  0
         form.add(listContainer);
 174  
         
 175  
         /* 招待欄の設定 ---------------------------------------------------------------------------------------------*/
 176  
         
 177  0
         TextField<String> usrmail = new TextField<String>("usrmail", new PropertyModel<String>(this, "usrmailValue"));
 178  0
         form.add(usrmail);
 179  0
         TextField<String> usrmail2 = new TextField<String>("usrmail2", new PropertyModel<String>(this, "usrmail2Value"));
 180  0
         form.add(usrmail2);
 181  
         
 182  
         
 183  0
         Button btnSubmit = new ConfirmAjaxButton("btnSubmit"){
 184  
             @Override
 185  
             boolean executeBefore() {
 186  
                 /* 入力値変換 */
 187  0
                 usrmailValue = AppStringUtils.trimHalf(usrmailValue);
 188  0
                 usrmail2Value = AppStringUtils.trimHalf(usrmail2Value);
 189  
                 
 190  
                 /* 入力値検査 */
 191  0
                 if(usrmailValue.equals(usrmail2Value) == false) {
 192  0
                     error("メールアドレスが一致しません。");
 193  
                 }
 194  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 195  
                 
 196  0
                 Usr usr = usrDao.getByLoginid(usrmailValue);
 197  0
                 if(usr == null) {
 198  0
                     error("メールアドレスが登録されていません。");
 199  0
                 } else {
 200  0
                     if(usr.getStatus() == Usr.STATUS_退会) {
 201  0
                         error("メールアドレスが無効です。");
 202  
                     }
 203  
                 }
 204  0
                 if(hasInputError()) return false; // ここまででエラーチェック
 205  
                 
 206  
                 
 207  0
                 Grpusr newMember = new Grpusr();
 208  0
                 newMember.setGrpid(paramGrpid);
 209  0
                 newMember.setUsrid(usr.getUsrid());
 210  0
                 List<Grpusr> exists = grpusrDao.get(newMember);
 211  0
                 if(exists.isEmpty() == false) {
 212  0
                     for(Grpusr gu: exists) {
 213  0
                         if(Grpusr.STATUS_参加中.equals(gu.getStatus())) {
 214  0
                             error("すでに参加しています。");
 215  0
                             return false;
 216  
                         }
 217  0
                         if(Grpusr.STATUS_招待中.equals(gu.getStatus())) {
 218  0
                             error("すでに招待中です。");
 219  0
                             return false;
 220  
                         }
 221  
                     }
 222  
                 }
 223  
                 
 224  0
                 return true;
 225  
             }
 226  
             @Override
 227  
             protected String getConfirmMessage() {
 228  0
                 return "ユーザを招待します。";
 229  
             }
 230  
             @Override
 231  
             void executableWork() {
 232  
                 /* データアクセス メンバー招待
 233  
                  *   過去に参加してればUpdateとする
 234  
                  */
 235  0
                 Usr usr = usrDao.getByLoginid(usrmailValue);
 236  0
                 Grpusr newMember = new Grpusr();
 237  0
                 newMember.setGrpid(paramGrpid);
 238  0
                 newMember.setUsrid(usr.getUsrid());
 239  0
                 List<Grpusr> exists = grpusrDao.get(newMember);
 240  0
                 if(exists.isEmpty() == false) {
 241  0
                     newMember = exists.get(0);
 242  
                 }
 243  0
                 newMember.setInvitationdate(AppUtils.createNowLong());
 244  0
                 newMember.setStatus(Grpusr.STATUS_招待中);
 245  0
                 if(exists.isEmpty()) {
 246  0
                     grpusrDao.add(newMember, loginUserId); // 更新処理
 247  0
                 } else {
 248  0
                     grpusrDao.update(newMember, loginUserId); // 更新処理
 249  
                 }
 250  0
             }
 251  
             @Override
 252  
             void executeAfter(AjaxRequestTarget target) {
 253  0
                 Usr usr = usrDao.getByLoginid(usrmailValue);
 254  0
                 feedbackPanel.info(usr.getName() + "さんを招待しました。");
 255  
                 
 256  
                 /* 入力項目初期化 */
 257  0
                 usrmailValue = "";
 258  0
                 usrmail2Value = "";
 259  
               
 260  
                 /* 画面部品の更新 */
 261  0
                 target.add(listContainer); // 一覧領域
 262  0
             }
 263  
         };
 264  0
         form.add(btnSubmit);
 265  
         
 266  
         /* 一覧の繰り返し処理   --------------------------------------------------------------------------------------*/
 267  0
         final PageableListView<Grpusr> list = new PageableListView<Grpusr>("list", listModel, 20) {
 268  
             private static final long serialVersionUID = 1L;
 269  
             @Override
 270  
             protected void populateItem(ListItem<Grpusr> item) {
 271  
                 
 272  0
                 final Grpusr grpusr = item.getModelObject();
 273  0
                 final Usr member = usrDao.getByUsrid(grpusr.getUsrid());
 274  
                 
 275  0
                 final String memberName = member.getName();
 276  
                 
 277  0
                 item.add(new Label("name", memberName)); // メンバーの名前
 278  
                 
 279  0
                 item.add(new Label("joindate" , AppUtils.toStrYyyyMMdd(grpusr.getJoindate()))); // 参加日
 280  
                 
 281  0
                 item.add(new Label("status" , grpusr.getStatus合算())); // 状態
 282  
                 
 283  0
                 item.add(new Label("isAdmin", "このグループの管理者です。"){
 284  
                     @Override
 285  
                     public boolean isVisible() {
 286  0
                         return member.getUsrid().equals(targetGroup.getAdminusrid());
 287  
                     }
 288  
                     
 289  
                 });
 290  
                 
 291  
                 /* 招待取消 ボタン */
 292  0
                 item.add(new ConfirmAjaxButton("buttonReject"){
 293  
                     @Override
 294  
                     protected String getConfirmMessage() {
 295  0
                         return memberName + "さんへの招待を取消します。";
 296  
                     }
 297  
                     @Override
 298  
                     void executableWork() {
 299  
                         /* データ操作 */
 300  0
                         grpusrDao.removeLogical(grpusr, loginUserId); // 【論理削除】
 301  0
                     }
 302  
                     @Override
 303  
                     void executeAfter(AjaxRequestTarget target) {
 304  
                         /* メッセージ表示 */
 305  0
                         feedbackPanel.info(memberName + "さんへの招待を取消しました。");
 306  
                         /* 画面部品の更新 */
 307  0
                         target.add(listContainer); // 一覧領域
 308  0
                     }
 309  
                     @Override
 310  
                     public boolean isVisible() {
 311  
                         /* グループ管理者か、運営管理者でなければ非表示 */
 312  0
                         if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false;
 313  
                         /* 招待状態でなければ非表示 */
 314  0
                         if(Grpusr.STATUS_招待中.equals(grpusr.getStatus()) == false) return false;
 315  0
                         return true;
 316  
                     }
 317  
                 });
 318  
                 
 319  
                 /* 脱退させる ボタン */
 320  0
                 item.add(new ConfirmAjaxButton("buttonLeave"){
 321  
                     @Override
 322  
                     protected String getConfirmMessage() {
 323  0
                         return memberName + "さんを脱退させます。";
 324  
                     }
 325  
                     @Override
 326  
                     void executableWork() {
 327  
                         /* データ操作 */
 328  0
                         grpusr.set脱退設定();
 329  0
                         grpusrDao.update(grpusr, loginUserId); // 【データ更新】
 330  0
                     }
 331  
                     @Override
 332  
                     void executeAfter(AjaxRequestTarget target) {
 333  
                         /* メッセージ表示 */
 334  0
                         feedbackPanel.info(memberName + "さんを脱退させました。");
 335  
                         /* 画面部品の更新 */
 336  0
                         target.add(listContainer); // 一覧領域
 337  0
                     }
 338  
                     @Override
 339  
                     public boolean isVisible() {
 340  
                         /* グループ管理者か、運営管理者でなければ非表示 */
 341  0
                         if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false;
 342  
                         /* 自分自身のデータの場合は非表示 */
 343  0
                         if(member.getUsrid().equals(loginUser.getUsrid())) return false;
 344  
                         /* 参加状態でなければ非表示 */
 345  0
                         if(Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false;
 346  0
                         return true;
 347  
                     }
 348  
                 });
 349  
                 /* 管理者依頼 ボタン */
 350  0
                 item.add(new ConfirmAjaxButton("buttonAdmin"){
 351  
                     @Override
 352  
                     protected String getConfirmMessage() {
 353  0
                         return memberName + "さんに管理者を依頼します。";
 354  
                     }
 355  
                     @Override
 356  
                     void executableWork() {
 357  
                         /* データ操作 */
 358  0
                         grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_移管依頼中);
 359  0
                         grpusrDao.update(grpusr, loginUserId); // 【データ更新】
 360  0
                     }
 361  
                     @Override
 362  
                     void executeAfter(AjaxRequestTarget target) {
 363  
                         /* メッセージ表示 */
 364  0
                         feedbackPanel.info(memberName + "さんに管理者を依頼しました。");
 365  
                         /* 画面部品の更新 */
 366  0
                         target.add(listContainer); // 一覧領域
 367  0
                     }
 368  
                     @Override
 369  
                     public boolean isVisible() {
 370  
                         /* グループ管理者か、運営管理者でなければ非表示 */
 371  0
                         if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false;
 372  
                         /* 自分自身のデータの場合は非表示 */
 373  0
                         if(member.getUsrid().equals(loginUser.getUsrid())) return false;
 374  
                         /* 参加状態でなければ非表示 */
 375  0
                         if(Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false;
 376  
                         /* 移管依頼中の場合は非表示 */
 377  0
                         if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin())) return false;
 378  0
                         return true;
 379  
                     }
 380  
                 });
 381  
                 /* 管理者依頼取消 ボタン */
 382  0
                 item.add(new ConfirmAjaxButton("buttonAdminReject"){
 383  
                     @Override
 384  
                     protected String getConfirmMessage() {
 385  0
                         return memberName + "さんへの管理者依頼を取消します。";
 386  
                     }
 387  
                     @Override
 388  
                     void executableWork() {
 389  
                         /* データ操作 */
 390  0
                         grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_未設定);
 391  0
                         grpusrDao.update(grpusr, loginUserId); // 【データ更新】
 392  0
                     }
 393  
                     @Override
 394  
                     void executeAfter(AjaxRequestTarget target) {
 395  
                         /* メッセージ表示 */
 396  0
                         feedbackPanel.info(memberName + "さんへの管理者依頼を取消しました。");
 397  
                         /* 画面部品の更新 */
 398  0
                         target.add(listContainer); // 一覧領域
 399  0
                     }
 400  
                     @Override
 401  
                     public boolean isVisible() {
 402  
                         /* グループ管理者か運営管理者でなければ非表示 */
 403  0
                         if(loginUserId.equals(targetGroupAdminid) == false && isSystemAdmin() == false) return false;
 404  
                         /* 自分自身のデータの場合は非表示 */
 405  0
                         if(member.getUsrid().equals(loginUser.getUsrid())) return false;
 406  
                         /* 参加状態でなければ非表示 */
 407  0
                         if(Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false;
 408  
                         /* 移管依頼中でなければ非表示 */
 409  0
                         if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin()) == false) return false;
 410  0
                         return true;
 411  
                     }
 412  
                 });
 413  0
             }
 414  
         };
 415  0
         listContainer.add(list);
 416  
         
 417  
         /* ページングの部品 */
 418  0
         final AjaxPagingNavigator pagingList = new AjaxPagingNavigator("pagingList", list){};
 419  0
         listContainer.add(pagingList);
 420  0
     }
 421  
 }