##### 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.0;0

GroupMemberListPage$1

0% | 0/5

0% | 0/2

0.0;0

GroupMemberListPage$2

0% | 0/12

0% | 0/4

0.0;0

GroupMemberListPage$3

0% | 0/48

0% | 0/22

0.0;0

GroupMemberListPage$4

0% | 0/14

N/A | N/A

0.0;0

GroupMemberListPage$4$1

0% | 0/3

N/A | N/A

0.0;0

GroupMemberListPage$4$2

0% | 0/11

0% | 0/6

0.0;0

GroupMemberListPage$4$3

0% | 0/13

0% | 0/8

0.0;0

GroupMemberListPage$4$4

0% | 0/14

0% | 0/10

0.0;0

GroupMemberListPage$4$5

0% | 0/14

0% | 0/10

0.0;0

GroupMemberListPage$5

0% | 0/2

N/A | N/A

0.0;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

     }