##### Coverage Report - jp.co.y_net.amm.page.GroupListPage

Classes in this File | Line Coverage | Branch Coverage | Complexity

GroupListPage

0% | 0/55

0% | 0/6

0.0;0

GroupListPage$1

0% | 0/2

N/A | N/A

0.0;0

GroupListPage$10

0% | 0/24

0% | 0/2

0.0;0

GroupListPage$11

0% | 0/21

0% | 0/2

0.0;0

GroupListPage$11$1

0% | 0/12

0% | 0/2

0.0;0

GroupListPage$11$2

0% | 0/10

0% | 0/2

0.0;0

GroupListPage$11$3

0% | 0/11

0% | 0/2

0.0;0

GroupListPage$11$4

0% | 0/15

0% | 0/2

0.0;0

GroupListPage$11$5

0% | 0/11

0% | 0/2

0.0;0

GroupListPage$12

0% | 0/2

N/A | N/A

0.0;0

GroupListPage$2

0% | 0/8

0% | 0/2

0.0;0

GroupListPage$3

0% | 0/15

0% | 0/8

0.0;0

GroupListPage$4

0% | 0/3

0% | 0/2

0.0;0

GroupListPage$5

0% | 0/3

N/A | N/A

0.0;0

GroupListPage$6

0% | 0/3

0% | 0/2

0.0;0

GroupListPage$7

0% | 0/3

N/A | N/A

0.0;0

GroupListPage$8

0% | 0/13

N/A | N/A

0.0;0

GroupListPage$8$1

0% | 0/13

0% | 0/2

0.0;0

GroupListPage$9

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.Date;

6

     import java.util.List;

7

8

     import jp.co.y_net.amm.AppSession;

9

     import jp.co.y_net.amm.AppSession.LoginUser;

10

     import jp.co.y_net.amm.common.AppStringUtils;

11

     import jp.co.y_net.amm.common.AppUtils;

12

     import jp.co.y_net.amm.dao.Grp;

13

     import jp.co.y_net.amm.dao.Grpusr;

14

     import jp.co.y_net.amm.dao.Usr;

15

16

     import org.apache.wicket.ajax.AjaxRequestTarget;

17

     import org.apache.wicket.ajax.markup.html.navigation.paging.AjaxPagingNavigator;

18

     import org.apache.wicket.markup.html.WebMarkupContainer;

19

     import org.apache.wicket.markup.html.basic.Label;

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.link.BookmarkablePageLink;

23

     import org.apache.wicket.markup.html.list.ListItem;

24

     import org.apache.wicket.markup.html.list.PageableListView;

25

     import org.apache.wicket.markup.html.panel.FeedbackPanel;

26

     import org.apache.wicket.model.IModel;

27

     import org.apache.wicket.model.LoadableDetachableModel;

28

     import org.apache.wicket.model.Model;

29

     import org.apache.wicket.model.PropertyModel;

30

     import org.apache.wicket.request.mapper.parameter.PageParameters;

31

32

     public class GroupListPage extends CommonFrameA {

33

         private static final long serialVersionUID = 1L;

34

35

         /*

36

          * 画面入力値

37

          */

38

         /* グループ作成.名称 */

39

0

         private String groupnameValue = "";

40

41

         /**

42

          * ログインチェック定義

43

          * @see jp.co.y_net.amm.page.AppPage#validateLogin()

44

          */

45

         @Override

46

         public boolean validateLogin() {

47

0

             if(AppSession.get().isLogin()) {

48

0

                 return true;

49

             }

50

0

             return false;

51

         }

52

53

0

         public GroupListPage(PageParameters pageParams) {

54

55

             /* 共通戻るリンクの設置 */

56

0

             createCommonBackLinks();

57

58

             /* フィードバックメッセージ */

59

0

             final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");

60

0

             feedbackPanel.setOutputMarkupId(true);

61

0

             add(feedbackPanel);

62

63

             /* 入力フォーム */

64

0

             Form<Void> form  = new Form<Void>("form");

65

0

             add(form);

66

67

             /* 初期表示エラーチェック・共通変数設定 --------------------------------------------------------------------- */

68

0

             form.setVisible(false); // Formはエラーチェックが完了するまで非表示とする。

69

70

0

             final LoginUser loginUser  = AppSession.get().getLoginUser();

71

0

             if(loginUser == null) {

72

0

                 error("ログイン情報が取得できません。");

73

0

                 return;

74

             }

75

0

             final Integer loginUserId = loginUser.getUsrid();

76

77

0

             if(hasInputError()) return; // ----------エラーがあれば中止

78

0

             form.setVisible(true);

79

80

             /* Form内の設定 ----------------------------------------------------------------------------------------------*/

81

             /* 完了メッセージ */

82

0

             Model<String> resultMessageModel = new Model<String>() {

83

     //            @Override

84

     //            public String getObject() {

85

     //                if(complete) {

86

     //                    return "";

87

     //                }

88

     //                return "";

89

     //            }

90

             };

91

0

             final Label resutlMessage = new Label("resutlMessage", resultMessageModel);

92

0

             resutlMessage.setOutputMarkupId(true);

93

0

             form.add(resutlMessage);

94

95

             /* -----------------------------------------------------------------------------------------------------------*/

96

97

             /*

98

              * listA = 管理グループ一覧のモデル

99

              *  リクエストごとにloadが実行される

100

              */

101

0

             final IModel<List<Grp>> listAModel = new LoadableDetachableModel<List<Grp>>() {

102

                 /*  */

103

                 @Override

104

                 protected List<Grp> load() {

105

106

0

                     Grp cndGrp = new Grp();

107

108

0

                     if(Usr.KIND_運営管理者 == loginUser.getKind()) {

109

                         // 運営管理者は全て表示

110

                     } else {

111

0

                         cndGrp.setAdminusrid(loginUserId); // 自分の管理しているグループに絞り込む

112

                     }

113

114

0

                     List<Grp> list = grpDao.get(cndGrp);

115

116

                     /* 作成日の新しい順でソート*/

117

0

                     Collections.sort(list, new Grp.CreatedateComparator(true));

118

0

                     return list;

119

                 }

120

121

             };

122

             /*

123

              * listB = 参加グループ一覧のモデル

124

              *  リクエストごとにloadが実行される

125

              */

126

0

             final IModel<List<Grpusr>> listBModel = new LoadableDetachableModel<List<Grpusr>>() {

127

                 @Override

128

                 protected List<Grpusr> load() {

129

0

                     Grpusr cndGrpusr = new Grpusr();

130

0

                     cndGrpusr.setUsrid(loginUserId);

131

0

                     List<Grpusr> list = grpusrDao.get(cndGrpusr);

132

133

                     /*

134

                      *・自分が管理者のグループは除外する

135

                      *・脱退者は除外する

136

                      */

137

0

                     List<Grpusr> tmp = new ArrayList<Grpusr>();

138

0

                     for(Grpusr gu: list) {

139

0

                         Grp g = grpDao.getByGrpid(gu.getGrpid());

140

0

                         if(g == null) {

141

                             // 追加しない

142

0

                         } else if(g.getAdminusrid().equals(loginUserId)) {

143

                             // 追加しない

144

0

                         } else if(Grpusr.STATUS_脱退.equals(gu.getStatus())) {

145

                             // 追加しない

146

                         } else {

147

0

                             tmp.add(gu);

148

                         }

149

150

                     }

151

0

                     list = tmp;

152

153

                     /* 参加日の新しい順でソート*/

154

0

                     Collections.sort(list, new Grpusr.JoindateComparator(true));

155

0

                     return list;

156

                 }

157

             };

158

159

160

             /* コンテナの設定 ------------------------------------------------------------------------------------------------*/

161

             /*

162

              * 画面の部分更新の対象となるコンテナ

163

              * 　ページをインスタンス化するときに初期非表示としてはいけない。

164

              */

165

166

             /* 管理グループ一覧 */

167

0

             final WebMarkupContainer listAContainer = new WebMarkupContainer("listAContainer");

168

0

             listAContainer.setOutputMarkupId(true);

169

0

             form.add(listAContainer);

170

171

0

             final WebMarkupContainer listAContainerData = new WebMarkupContainer("listAContainerData"){

172

                 @Override

173

                 public boolean isVisible() {

174

0

                     return listAModel.getObject().isEmpty() == false;

175

                 }

176

             };

177

0

             listAContainerData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする

178

0

             listAContainer.add(listAContainerData);

179

180

0

             final WebMarkupContainer listAContainerNoData = new WebMarkupContainer("listAContainerNoData"){

181

                 @Override

182

                 public boolean isVisible() {

183

0

                     return listAModel.getObject().isEmpty();

184

                 }

185

             };

186

0

             listAContainerNoData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする

187

0

             listAContainer.add(listAContainerNoData);

188

189

             /* 参加グループ一覧 */

190

0

             final WebMarkupContainer listBContainer = new WebMarkupContainer("listBContainer");

191

0

             listBContainer.setOutputMarkupId(true);

192

0

             form.add(listBContainer);

193

194

0

             final WebMarkupContainer listBContainerData = new WebMarkupContainer("listBContainerData"){

195

                 @Override

196

                 public boolean isVisible() {

197

0

                     return listBModel.getObject().isEmpty() == false;

198

                 }

199

             };

200

0

             listBContainerData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする

201

0

             listBContainer.add(listBContainerData);

202

203

0

             final WebMarkupContainer listBContainerNoData = new WebMarkupContainer("listBContainerNoData"){

204

                 @Override

205

                 public boolean isVisible() {

206

0

                     return listBModel.getObject().isEmpty();

207

                 }

208

             };

209

0

             listBContainerNoData.setOutputMarkupPlaceholderTag(true);// 初期非表示の場合に、後から表示できるようにする

210

0

             listBContainer.add(listBContainerNoData);

211

212

             /* 一覧の設定 ------------------------------------------------------------------------------------------------*/

213

214

215

             /*listA = 管理グループ一覧 ------------------------------------------------------------------- */

216

0

             final PageableListView<Grp> listA = new PageableListView<Grp>("listA", listAModel, 5) {

217

                 private static final long serialVersionUID = 1L;

218

                 @Override

219

                 protected void populateItem(ListItem<Grp> item) {

220

221

0

                     final Grp grp = item.getModelObject();

222

223

0

                     item.add(new Label("groupname", grp.getName())); // グループ名

224

0

                     item.add(new Label("createdate" , AppUtils.toStrYyyyMMdd(grp.getCreatedate()))); // 作成日

225

0

                     item.add(new Label("membercount" , grpusrDao.getMembercount参加中AsString(grp.getGrpid()))); // 参加人数

226

227

0

                     String adminname = usrDao.getByUsrid(grp.getAdminusrid()).getName();

228

0

                     item.add(new Label("leadername" , adminname)); // 管理者

229

230

                     /* 「メンバーリストへ」*/

231

0

                     PageParameters param = new PageParameters();

232

0

                     param.add("grpid", grp.getGrpid());

233

0

                     item.add(new BookmarkablePageLink<Void>("goMemberlist", GroupMemberListPage.class, param));

234

235

                     /* グループ削除 ボタン */

236

0

                     item.add(new ConfirmAjaxButton("buttonDelete"){

237

238

                         @Override

239

                         protected String getConfirmMessage() {

240

0

                             return "すべてのメンバーを脱退させ、グループを削除します。";

241

                         }

242

                         @Override

243

                         void executableWork() {

244

                             /* データ操作 */

245

0

                             grpDao.removeLogical(grp, loginUserId); // 【論理削除】

246

247

                             // 紐づくメンバーも削除

248

0

                             Grpusr members = new Grpusr();

249

0

                             members.setGrpid(grp.getGrpid());

250

0

                             for(Grpusr member: grpusrDao.get(members)) {

251

0

                                 member.set脱退設定();

252

0

                                 grpusrDao.update(member, loginUserId);

253

                             }

254

0

                         }

255

                         @Override

256

                         void executeAfter(AjaxRequestTarget target) {

257

258

                             /* メッセージ表示 */

259

0

                             feedbackPanel.info(grp.getName() + " のすべてのメンバーを脱退させ、グループを削除しました。");

260

     //                        /* LoadableDetachableModel#load を再実行させるためのデタッチ */

261

     //                        listAModel.detach();

262

263

0

                             target.add(listAContainer);

264

0

                         }

265

                     });

266

0

                 }

267

             };

268

0

             listAContainerData.add(listA);

269

270

             /* ページングの部品 */

271

0

             final AjaxPagingNavigator pagingListA = new AjaxPagingNavigator("pagingListA", listA){};

272

0

             listAContainerData.add(pagingListA);

273

274

275

             /* グループ作成.名称 */

276

0

             TextField<String> inputgroupname = new TextField<String>("inputgroupname", new PropertyModel<String>(this, "groupnameValue"));

277

0

             listAContainer.add(inputgroupname);

278

279

             /* グループを作成する ボタン */

280

0

             listAContainer.add(new ConfirmAjaxButton("buttonCreateGroup"){

281

                 @Override

282

                 protected String getConfirmMessage() {

283

0

                     return "グループを作成します。";

284

                 }

285

                 @Override

286

                 boolean executeBefore() {

287

                     /* 入力値変換 */

288

0

                     groupnameValue = AppStringUtils.trim(groupnameValue);

289

                     /* 入力値検査 */

290

0

                     validItem(groupnameValue, "グループ名", 1, 512);

291

0

                     if(hasInputError()) return false; // ここまででエラーチェック

292

0

                     return true;

293

                 }

294

                 @Override

295

                 void executableWork() {

296

                     /* データ更新 */

297

0

                     Grp group = new Grp();

298

0

                     group.setName(groupnameValue);

299

0

                     group.setAdminusrid(loginUser.getUsrid());

300

0

                     group.setCreatedate(AppUtils.createNowLong());

301

0

                     grpDao.add(group, loginUserId); // 【データ更新】

302

303

0

                     Grpusr member = new Grpusr();

304

0

                     member.setGrpid(group.getGrpid());

305

0

                     member.setUsrid(loginUser.getUsrid());

306

0

                     member.setJoindate(AppUtils.createNowLong());

307

0

                     member.setAdmindate(AppUtils.createNowLong());

308

0

                     member.setStatus(Grpusr.STATUS_参加中);

309

0

                     grpusrDao.add(member, loginUserId); // 【データ更新】

310

0

                 }

311

                 @Override

312

                 void executeAfter(AjaxRequestTarget target) {

313

314

                     /* メッセージ表示 */

315

0

                     feedbackPanel.info("グループ「" + groupnameValue + "」を作成しました。");

316

317

                     /* 入力項目初期化 */

318

0

                     groupnameValue = "";

319

320

                     /* 画面部品の更新 */

321

0

                     target.add(listAContainer); // 管理グループ一覧領域

322

0

                 }

323

             });

324

325

326

             /*listB = 参加グループ一覧 ------------------------------------------------------------------- */

327

328

0

             final PageableListView<Grpusr> listB = new PageableListView<Grpusr>("listB", listBModel, 20) {

329

                 private static final long serialVersionUID = 1L;

330

                 @Override

331

                 protected void populateItem(ListItem<Grpusr> item) {

332

333

0

                     final Grpusr grpusr = item.getModelObject();

334

0

                     final Grp grp = grpDao.getByGrpid(grpusr.getGrpid());

335

336

0

                     final String groupname = grp.getName();

337

338

0

                     item.add(new Label("groupname", groupname)); // グループ名

339

0

                     item.add(new Label("membercount" , grpusrDao.getMembercount参加中AsString(grp.getGrpid()))); // 参加人数

340

341

0

                     String adminname = usrDao.getByUsrid(grp.getAdminusrid()).getName();

342

0

                     item.add(new Label("leadername" , adminname)); // 管理者

343

344

345

0

                     Date joindate = AppUtils.toDate(grpusr.getJoindate());

346

0

                     String joindateStr = "";

347

0

                     if(joindate != null) {

348

0

                         joindateStr = AppUtils.toStrYyyyMMdd(joindate);

349

                     }

350

0

                     item.add(new Label("joindate" , joindateStr)); // 参加日

351

0

                     item.add(new Label("status" , grpusr.getStatus合算())); // 状態

352

353

354

                     /* 参加する ボタン */

355

0

                     item.add(new ConfirmAjaxButton("buttonJoin"){

356

                         @Override

357

                         protected String getConfirmMessage() {

358

0

                             return "グループ「" + groupname + "」に参加します。";

359

                         }

360

                         @Override

361

                         void executableWork() {

362

                             /* データ操作 */

363

0

                             grpusr.setJoindate(AppUtils.createNowLong()); // 参加日時

364

0

                             grpusr.setStatus(Grpusr.STATUS_参加中);

365

0

                             grpusrDao.update(grpusr, loginUserId); // 【データ更新】

366

0

                         }

367

                         @Override

368

                         void executeAfter(AjaxRequestTarget target) {

369

370

                             /* メッセージ表示 */

371

0

                             feedbackPanel.info("グループ「" + groupname + "」に参加しました。");

372

373

                             /* 画面部品の更新 */

374

0

                             target.add(listBContainer); // 参加グループ一覧領域

375

0

                         }

376

                         @Override

377

                         public boolean isVisible() {

378

                             /* 招待中状態で無ければ非表示 */

379

0

                             if(Grpusr.STATUS_招待中.equals(grpusr.getStatus()) == false) return false;

380

381

0

                             return true;

382

                         }

383

                     });

384

                     /* 参加しない ボタン */

385

0

                     item.add(new ConfirmAjaxButton("buttonReject"){

386

                         @Override

387

                         protected String getConfirmMessage() {

388

0

                             return "グループ「" + groupname + "」への参加を辞退します。";

389

                         }

390

                         @Override

391

                         void executableWork() {

392

                             /* データ操作 */

393

0

                             grpusrDao.removeLogical(grpusr, loginUserId); // 【論理削除】

394

0

                         }

395

                         @Override

396

                         void executeAfter(AjaxRequestTarget target) {

397

398

                             /* メッセージ表示 */

399

0

                             feedbackPanel.info("グループ「" + groupname + "」への参加を辞退しました。");

400

401

                             /* 画面部品の更新 */

402

0

                             target.add(listBContainer); // 参加グループ一覧領域

403

0

                         }

404

                         @Override

405

                         public boolean isVisible() {

406

                             /* 招待中状態で無ければ非表示 */

407

0

                             if(Grpusr.STATUS_招待中.equals(grpusr.getStatus()) == false) return false;

408

409

0

                             return true;

410

                         }

411

                     });

412

                     /* 脱退する ボタン */

413

0

                     item.add(new ConfirmAjaxButton("buttonLeave"){

414

                         @Override

415

                         protected String getConfirmMessage() {

416

0

                             return "グループ「" + groupname + "」から脱退します。";

417

                         }

418

                         @Override

419

                         void executableWork() {

420

                             /* データ操作 */

421

0

                             grpusr.set脱退設定();

422

0

                             grpusrDao.update(grpusr, loginUserId); // 【データ更新】

423

0

                         }

424

                         @Override

425

                         void executeAfter(AjaxRequestTarget target) {

426

427

                             /* メッセージ表示 */

428

0

                             feedbackPanel.info("グループ「" + groupname + "」から脱退しました。");

429

430

                             /* 画面部品の更新 */

431

0

                             target.add(listBContainer); // 参加グループ一覧領域

432

0

                         }

433

                         @Override

434

                         public boolean isVisible() {

435

0

                             if (Grpusr.STATUS_参加中.equals(grpusr.getStatus()) == false) return false;

436

0

                             return true;

437

                         }

438

                     });

439

440

                     /* 承諾する ボタン */

441

0

                     item.add(new ConfirmAjaxButton("buttonAdminAccept"){

442

                         @Override

443

                         protected String getConfirmMessage() {

444

0

                             return "グループ「" + groupname + "」の管理者を承諾します。";

445

                         }

446

                         @Override

447

                         void executableWork() {

448

                             /* データ操作 */

449

0

                             grpusr.setAdmindate(AppUtils.createNowLong()); // 管理者就任日時

450

0

                             grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_移管完了);

451

0

                             grpusrDao.update(grpusr, loginUserId); // 【データ更新】

452

453

0

                             grp.setAdminusrid(loginUser.getUsrid());

454

0

                             grpDao.update(grp, loginUserId); // 【データ更新】

455

0

                         }

456

                         @Override

457

                         void executeAfter(AjaxRequestTarget target) {

458

459

                             /* メッセージ表示 */

460

0

                             feedbackPanel.info("グループ「" + groupname + "」の管理者を承諾しました。");

461

462

                             /* 画面部品の更新 */

463

0

                             target.add(listAContainer); // 管理グループ一覧領域

464

0

                             target.add(listBContainer); // 参加グループ一覧領域

465

0

                         }

466

                         @Override

467

                         public boolean isVisible() {

468

                             /* 移管依頼中でなければ表示しない */

469

0

                             if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin()) == false) return false;

470

0

                             return true;

471

                         }

472

                     });

473

                     /* 承諾しない ボタン */

474

0

                     item.add(new ConfirmAjaxButton("buttonAdminReject"){

475

                         @Override

476

                         protected String getConfirmMessage() {

477

0

                             return "グループ「" + groupname + "」の管理者を辞退します。";

478

                         }

479

                         @Override

480

                         void executableWork() {

481

                             /* データ操作 */

482

0

                             grpusr.setStatusadmin(Grpusr.STATUS_ADMIN_未設定);

483

0

                             grpusrDao.update(grpusr, loginUserId); // 【データ更新】

484

0

                         }

485

                         @Override

486

                         void executeAfter(AjaxRequestTarget target) {

487

488

                             /* メッセージ表示 */

489

0

                             feedbackPanel.info("グループ「" + groupname + "」の管理者を辞退しました。");

490

491

                             /* 画面部品の更新 */

492

0

                             target.add(listBContainer); // 参加グループ一覧領域

493

0

                         }

494

                         @Override

495

                         public boolean isVisible() {

496

                             /* 移管依頼中でなければ表示しない */

497

0

                             if(Grpusr.STATUS_ADMIN_移管依頼中.equals(grpusr.getStatusadmin()) == false) return false;

498

0

                             return true;

499

                         }

500

                     });

501

0

                 }

502

             };

503

0

             listBContainerData.add(listB);

504

505

             /* ページングの部品 */

506

0

             final AjaxPagingNavigator pagingListB = new AjaxPagingNavigator("pagingListB", listB){};

507

0

             listBContainerData.add(pagingListB);

508

509

0

         }

510

511

512

     }