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

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

MemberListPage

0% | 0/82

0% | 0/30

0.0;0

MemberListPage$1

0% | 0/5

0% | 0/2

0.0;0

MemberListPage$10

0% | 0/3

0% | 0/2

0.0;0

MemberListPage$2

0% | 0/5

0% | 0/2

0.0;0

MemberListPage$3

0% | 0/3

N/A | N/A

0.0;0

MemberListPage$4

0% | 0/5

0% | 0/2

0.0;0

MemberListPage$5

0% | 0/5

0% | 0/2

0.0;0

MemberListPage$6

0% | 0/9

N/A | N/A

0.0;0

MemberListPage$7

0% | 0/13

N/A | N/A

0.0;0

MemberListPage$7$1

0% | 0/9

0% | 0/2

0.0;0

MemberListPage$8

0% | 0/3

0% | 0/2

0.0;0

MemberListPage$9

0% | 0/76

0% | 0/36

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

10

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

11

     import jp.co.y_net.amm.common.AppSendMail.MailSetting;

12

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

13

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

14

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

15

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

16

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

17

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

18

19

     import org.apache.commons.lang.StringUtils;

20

     import org.apache.wicket.AttributeModifier;

21

     import org.apache.wicket.RestartResponseException;

22

     import org.apache.wicket.ajax.AjaxRequestTarget;

23

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

24

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

25

     import org.apache.wicket.markup.html.form.Button;

26

     import org.apache.wicket.markup.html.form.Form;

27

     import org.apache.wicket.markup.html.form.TextField;

28

     import org.apache.wicket.markup.html.link.Link;

29

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

30

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

31

     import org.apache.wicket.markup.html.navigation.paging.PagingNavigator;

32

     import org.apache.wicket.model.IModel;

33

     import org.apache.wicket.model.LoadableDetachableModel;

34

     import org.apache.wicket.model.Model;

35

     import org.apache.wicket.model.PropertyModel;

36

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

37

38

     /**

39

      * @author k_inaba

40

      */

41

     public class MemberListPage extends CommonFrameA {

42

         private static final long serialVersionUID = 1L;

43

44

         /*

45

          * 画面入力値

46

          */

47

         public String usrnameValue;

48

         public String usrmailValue;

49

         public String usrmail2Value;

50

51

         /*

52

          * 画面の状態

53

          */

54

0

         private boolean complete = false;

55

56

         /* 編集対象の組織 */

57

0

         private Org targetOrg = null;

58

59

60

61

         /**

62

          * ログインチェック定義

63

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

64

          */

65

         @Override

66

         public boolean validateLogin() {

67

0

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

68

0

                 if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_運営管理者)) {

69

0

                     return true;

70

                 }

71

0

                 if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関管理者)) {

72

0

                     return true;

73

                 }

74

     //            if(AppSession.get().getLoginUser().getKind().equals(Usr.KIND_機関会員)) {

75

     //                error("権限がありません。");

76

     //                return false;

77

     //            }

78

             }

79

0

             return false;

80

         }

81

82

0

         public MemberListPage(PageParameters pageParams) {

83

84

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

85

0

             createCommonBackLinks();

86

87

             /* 画面固有の戻るボタンの設置 */

88

0

             createBackLink(OrgMemberListPage.class, "登録会員情報管理");

89

90

             /* フィードバックパネルの設置 */

91

0

             createFeedbackPanel();

92

93

0

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

94

0

             add(form);

95

96

0

             Label h1msg = new Label("h1msg", "");

97

0

             form.add(h1msg);

98

99

             /* 見出し */

100

0

             form.add(new Label("h2msg", new Model<String>(){

101

                 @Override

102

                 public String getObject() {

103

0

                     if(mode運営管理者一覧() == false) {

104

0

                         return "追加";

105

                     } else {

106

0

                         return "運営管理者の追加";

107

                     }

108

                 }

109

             }));

110

111

112

0

             WebMarkupContainer contMemberList = new WebMarkupContainer("contMemberList");

113

0

             form.add(contMemberList);

114

115

             /* 見出し */

116

0

             contMemberList.add(new Label("h2msg", new Model<String>(){

117

                 @Override

118

                 public String getObject() {

119

0

                     if(mode運営管理者一覧() == false) {

120

0

                         return "会員";

121

                     } else {

122

0

                         return "運営管理者";

123

                     }

124

                 }

125

             }));

126

127

128

             /* 初期表示エラーチェック ----------------------------------------------------------------------------------- */

129

0

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

130

0

             contMemberList.setVisible(false);

131

132

0

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

133

0

             if(loginUser == null) {

134

0

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

135

0

                 return; // ----------中断

136

             }

137

0

             final Integer loginUserId = loginUser.getUsrid();

138

139

140

             /*

141

              * 表示対象の決定

142

              * ・パラメータに orgid が設定されている場合は、該当する組織を対象とする。

143

              * 　　ただし、ログインユーザが 運営管理者か、その組織の代表者でなければいけない。

144

              * ・パラメータに orgid が設定されていない場合は、ログインユーザに紐づく組織を対象とする。

145

              */

146

0

             String paramOrgid = pageParams.get("orgid").toString("");

147

0

             Integer targetOrgid = null;

148

0

             if(StringUtils.isEmpty(paramOrgid) == false) {

149

0

                 targetOrgid = AppUtils.toInteger(paramOrgid);

150

0

                 this.targetOrg = orgDao.getByOrgid(targetOrgid);

151

152

0

                 if(this.targetOrg == null) {

153

0

                     error("組織情報が取得できません。 orgid=" + paramOrgid);

154

0

                     return; // ----------中断

155

                 }

156

0

                 if(isSystemAdmin()) {

157

                     // OK

158

0

                 } else if(isOrgAdmin()) {

159

0

                     if (this.targetOrg.getOrgid().equals(loginUser.getOrgid())) {

160

                         // OK

161

                     } else {

162

0

                         error("該当する情報を扱う権限がありません。");

163

0

                         return; // ----------中断

164

                     }

165

                 } else {

166

0

                     error("該当する情報を扱う権限がありません。");

167

0

                     return; // ----------中断

168

                 }

169

             } else {

170

0

                 targetOrgid = loginUser.getOrgid();

171

0

                 this.targetOrg = orgDao.getByOrgid(targetOrgid);

172

             }

173

174

0

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

175

176

             /* 組織が「個人」であれば、組織情報編集ページへ遷移させる */

177

0

             if(Org.KIND_PERSONAL == this.targetOrg.getKind()) {

178

0

                 throw new RestartResponseException(OrgDetailPage.class);

179

             }

180

181

182

0

             form.setVisible(true);

183

0

             contMemberList.setVisible(true);

184

185

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

186

187

0

             h1msg.setDefaultModelObject("会員管理 「" +targetOrg.getName() + "」");

188

189

             /* 完了メッセージ */

190

0

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

191

                 @Override

192

                 public String getObject() {

193

                     if(complete) {

194

     //                    return "仮登録を行い、登録したメールアドレスへ会員追加メールを送りました。";

195

                         /* 連続登録を想定し、infoメッセージとする。 */

196

                     }

197

0

                     return "";

198

                 }

199

             };

200

0

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

201

0

             form.add(resutlMessage);

202

             /* 出力コンポーネントの設定 ----------------------------------------------------------------------------------*/

203

0

             form.add(new Label("thLoginid", new Model<String>(){

204

                 @Override

205

                 public String getObject() {

206

0

                     if(mode運営管理者一覧() == false) {

207

0

                         return "メールアドレス";

208

                     } else {

209

0

                         return "ログインID";

210

                     }

211

                 }

212

             }));

213

0

             form.add(new Label("thLoginid2", new Model<String>(){

214

                 @Override

215

                 public String getObject() {

216

0

                     if(mode運営管理者一覧() == false) {

217

0

                         return "メールアドレス確認用";

218

                     } else {

219

0

                         return "ログインID確認用";

220

                     }

221

                 }

222

             }));

223

224

225

             /* 入力コンポーネントの設定 ----------------------------------------------------------------------------------*/

226

0

             TextField<String> usrname = new TextField<String>("usrname", new PropertyModel<String>(this, "usrnameValue"));

227

0

             form.add(usrname);

228

0

             TextField<String> usrmail = new TextField<String>("usrmail", new PropertyModel<String>(this, "usrmailValue"));

229

0

             form.add(usrmail);

230

0

             TextField<String> usrmail2 = new TextField<String>("usrmail2", new PropertyModel<String>(this, "usrmail2Value"));

231

0

             form.add(usrmail2);

232

233

             /* 一覧の設定 */

234

0

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

235

0

             contMemberList.add(listViewContainer);

236

0

             listViewContainer.setOutputMarkupId(true);

237

238

             // LoadableDetachableModel は リクエストの最初に load にてデータを取得するモデル

239

0

             final IModel<List<Usr>> usrModel = new LoadableDetachableModel<List<Usr>>() {

240

                 @Override

241

                 protected List<Usr> load() {

242

0

                     Usr cnd = new Usr();

243

0

                     cnd.setOrgid(targetOrg.getOrgid()); // 該当機関

244

0

                     Usr cndNot = new Usr();

245

0

                     cndNot.setStatus(Usr.STATUS_退会);

246

0

                     List<Usr> list = usrDao.get(cnd, cndNot);

247

248

                     /* 最終ログイン日の新しい順でソート*/

249

0

                     Collections.sort(list, new Usr.LastlogindateComparator(true));

250

251

0

                     return list;

252

                 }

253

             };

254

0

             final PageableListView<Usr> listview = new PageableListView<Usr>("listview", usrModel, 20) {

255

                 private static final long serialVersionUID = 1L;

256

                 @Override

257

                 protected void populateItem(ListItem<Usr> item) {

258

259

0

                     final Usr member = item.getModelObject();

260

261

                     /* 氏名リンク */

262

0

                     final PageParameters param = new PageParameters();

263

0

                     param.add("usrid", member.getUsrid());

264

                     //BookmarkablePageLink<Void> lnkName = new BookmarkablePageLink<Void>("lnkName", MemberDetailPage.class, param);

265

0

                     Link<Void> lnkName = new Link<Void>("lnkName") {

266

                         @Override

267

                         public void onClick() {

268

0

                             MemberDetailPage nextPage = new MemberDetailPage(param);

269

0

                             nextPage.setReturnPage(getPage()); // このページを戻り先として記録する

270

0

                             setResponsePage(nextPage);

271

0

                         }

272

                         @Override

273

                         protected boolean isLinkEnabled() {

274

                             /* 組織の管理者は 登録情報編集画面を使用するため、会員詳細ページへリンクさせない */

275

0

                             if(Usr.ROLE_管理者 == member.getOrgrole()) {

276

0

                                 return false;

277

                             }

278

0

                             return super.isLinkEnabled();

279

                         }

280

281

                     };

282

283

0

                     Label lnklblName = new Label("lnklblName", member.getName_Disp());

284

0

                     lnkName.add(lnklblName);

285

0

                     item.add(lnkName);

286

287

                     /* メールアドレス */

288

0

                     item.add(new Label("mail", member.getLoginid_Disp()));

289

290

                     /* ステータス */

291

0

                     item.add(new Label("status", member.getStatus_Disp()));

292

293

                     /* 最終ログイン日時 */

294

0

                     item.add(new Label("lastlogin" , member.getLastlogindate_Disp()));

295

0

                 }

296

             };

297

0

             listViewContainer.add(listview);

298

299

0

             PagingNavigator navigator = new PagingNavigator("paging", listview){

300

                 @Override

301

                 public boolean isVisible() {

302

0

                     return listview.size() > 0;

303

                 }

304

             };

305

0

             contMemberList.add(navigator);

306

307

             /* 処理ボタン定義 --------------------------------------------------------------------------------------------*/

308

0

             Button btnSubmit = new ConfirmAjaxButton("btnSubmit"){

309

                 @Override

310

                 String getConfirmMessage() {

311

0

                     if(mode運営管理者一覧() == false) {

312

0

                         return "会員を追加します。";

313

                     } else {

314

0

                         return "運営管理者を追加します。";

315

                     }

316

                 }

317

                 @Override

318

                 boolean executeBefore() {

319

                     /* 入力値変換 */

320

0

                     usrnameValue = AppStringUtils.trim(usrnameValue);

321

0

                     usrmailValue = AppStringUtils.trimHalf(usrmailValue);

322

0

                     usrmail2Value = AppStringUtils.trimHalf(usrmail2Value);

323

324

                     /* 入力値検査 */

325

0

                     validItem(usrnameValue, "氏名", 1, 512);

326

0

                     if(mode運営管理者一覧() == false) {

327

0

                         validItemMail(usrmailValue, "メールアドレス");

328

0

                         validItemMail(usrmail2Value, "メールアドレス確認用");

329

0

                     } else {

330

0

                         validItem(usrmailValue, "ログインID", 1, 256);

331

0

                         validItem(usrmail2Value, "ログインID確認用", 1, 256);

332

                     }

333

334

0

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

335

336

337

0

                     if(usrmailValue.equals(usrmail2Value) == false) {

338

0

                         if(mode運営管理者一覧() == false) {

339

0

                             error("メールアドレスが一致しません。");

340

0

                         } else {

341

0

                             error("ログインIDが一致しません。");

342

                         }

343

                     }

344

345

0

                     if(mailAddressCheck.exist(usrmailValue)) {

346

0

                         if(mode運営管理者一覧() == false) {

347

0

                             error("このメールアドレスは既に使用されています。");

348

0

                         } else {

349

0

                             error("このログインIDは既に使用されています。");

350

                         }

351

352

                     }

353

354

0

                     Usr cnd = new Usr();

355

0

                     cnd.setOrgid(targetOrg.getOrgid()); // 該当機関

356

0

                     List<Usr> members = usrDao.get(cnd);

357

0

                     List<Usr> members退会者以外 = new ArrayList<Usr>();

358

0

                     for(Usr usr: members) {

359

0

                         if(usr.getStatus().equals(Usr.STATUS_退会) == false) {

360

0

                             members退会者以外.add(usr);

361

                         }

362

                     }

363

0

                     if(targetOrg.isLimitnum指定なし() == false

364

0

                             && targetOrg.getLimitnum() < members退会者以外.size() + 1) { // 管理者分＋1

365

0

                         error("登録可能会員数を超過するため、これ以上登録できません。");

366

                     }

367

368

369

370

0

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

371

372

0

                     return true;

373

                 }

374

                 @Override

375

                 void executeAfter(AjaxRequestTarget target) {

376

0

                     if(mode運営管理者一覧()) {

377

378

                         /* 運営管理者追加 */

379

380

0

                         Usr usr運営管理者 = Usr.create運営管理者(targetOrg, usrmailValue, usrnameValue, false);

381

0

                         usrDao.add(usr運営管理者, loginUserId); // 更新処理

382

383

                         /* 完了メッセージ */

384

0

                         info("運営管理者を追加しました。");

385

386

0

                     }else{

387

                         /* データアクセス 機関管理者による会員仮登録  */

388

0

                         Usr usr = new Usr();

389

0

                         usr.setLoginid(usrmailValue);

390

0

                         usr.setName(usrnameValue);

391

0

                         usr.setOrgid(targetOrg.getOrgid());

392

0

                         usr.setKind(Usr.KIND_機関会員);

393

0

                         usr.setOrgrole(Usr.ROLE_通常会員);

394

0

                         usr.setStoplogin(AppDef.FLASE);

395

0

                         usr.setStatus(Usr.STATUS_仮登録);

396

0

                         usr.setLoginerrorcount(0);

397

398

0

                         usrDao.add(usr, loginUserId); // 【更新処理】

399

400

                         /* 共通機能：パスワード登録チケット発行 からチケットを取得する */

401

0

                         String random = passwordTicketManager.execute新規パスワード発行(usr.getUsrid());

402

403

                         /* 会員追加メール送信 */

404

0

                         MailSetting setting = new MailSetting();

405

0

                         setting.setTemplate(ResourceReader.getText("message/mail.addmember"));

406

0

                         setting.setMailTo(usrmailValue);

407

0

                         setting.replace("機関名称", targetOrg.getName());

408

0

                         setting.replace("氏名", usrnameValue);

409

0

                         String 本登録URL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random;

410

0

                         setting.replace("本登録URL", 本登録URL);

411

0

                         boolean sendmailrsult = AppSendMail.send(setting);

412

0

                         if(sendmailrsult == false) {

413

0

                             error("メールの送信に失敗しました。");

414

                         }

415

416

                         /* テスト自動化対応 */

417

0

                         if (AppLogger.isDebug()) {

418

                             //info("メールに記載したURL【" + 本登録URL + "】");

419

0

                             addDebugUrl(本登録URL);

420

                         }

421

422

                         /* 完了メッセージ */

423

0

                         info("仮登録を行い、登録したメールアドレスへ会員追加メールを送りました。");

424

                     }

425

426

427

                     /*

428

                      * 状態遷移

429

                      * 　この画面では連続して登録することを想定するため、状態遷移は行わない

430

                      */

431

     //              complete = true;

432

433

                     /* 入力項目初期化 */

434

0

                     usrnameValue = "";

435

0

                     usrmailValue = "";

436

0

                     usrmail2Value = "";

437

438

                     /* コンポーネント更新 */

439

0

                     target.add(form);

440

441

0

                 }

442

                 @Override

443

                 public boolean isVisible() {

444

                     /* 完了後の状態ならボタンを表示しない */

445

0

                     return complete == false;

446

                 }

447

                 @Override

448

                 public boolean isEnabled() {

449

                     /* 運営管理組織のとき、代表者以外は運営管理者を追加できない。 */

450

0

                     if(mode運営管理者一覧() && isSystemAdmin代表者() == false) {

451

0

                         return false;

452

                     }

453

0

                     return true;

454

                 }

455

             };

456

0

             if(mode運営管理者一覧() == false) {

457

0

                 btnSubmit.add(new AttributeModifier("value", "会員を追加"));

458

0

             } else {

459

0

                 btnSubmit.add(new AttributeModifier("value", "運営管理者を追加"));

460

             }

461

462

0

             form.add(btnSubmit);

463

0

             form.add(new Label("msgNoneBtnSubmit", "このユーザはシステム管理者の追加はできません。"){

464

465

                 @Override

466

                 public boolean isVisible() {

467

0

                     return form.get("btnSubmit").isEnabled() == false;

468

                 }

469

470

             });

471

472

473

0

         }

474

0

         private boolean mode運営管理者一覧() {

475

0

             if(targetOrg != null && Org.KIND_運営管理 == targetOrg.getKind()) {

476

0

                 if(isSystemAdmin()) {

477

0

                     return true;

478

                 }

479

             }

480

0

             return false;

481

         }

482

     }