Coverage Report - jp.co.y_net.amm.page.CommonFrameA
 
Classes in this File Line Coverage Branch Coverage Complexity
CommonFrameA
0%
0/52
0%
0/4
0
CommonFrameA$1
0%
0/3
0%
0/2
0
CommonFrameA$2
0%
0/3
N/A
0
CommonFrameA$3
0%
0/6
0%
0/2
0
CommonFrameA$4
0%
0/6
N/A
0
CommonFrameA$5
0%
0/3
N/A
0
CommonFrameA$6
0%
0/3
N/A
0
CommonFrameA$7
0%
0/3
N/A
0
CommonFrameA$8
0%
0/5
0%
0/2
0
CommonFrameA$9
0%
0/5
0%
0/4
0
CommonFrameA$ConfirmAjaxButton
0%
0/26
0%
0/6
0
CommonFrameA$ConfirmAjaxButton$1
0%
0/9
N/A
0
CommonFrameA$ConfirmAjaxButton$1$1
0%
0/4
N/A
0
CommonFrameA$ConfirmAjaxButton$1$2
0%
0/5
N/A
0
CommonFrameA$ConfirmAjaxButton$2
0%
0/10
0%
0/6
0
 
 1  0
 package jp.co.y_net.amm.page;
 2  
 
 3  
 import jp.co.y_net.amm.AppSession;
 4  
 import jp.co.y_net.amm.common.AppLogger;
 5  
 import jp.co.y_net.amm.common.AppSendMail;
 6  
 import jp.co.y_net.amm.common.AppSendMail.MailSetting;
 7  
 import jp.co.y_net.amm.common.ResourceReader;
 8  
 import jp.co.y_net.amm.service.PasswordTicketManager;
 9  
 
 10  
 import org.apache.commons.lang.StringUtils;
 11  
 import org.apache.wicket.Page;
 12  
 import org.apache.wicket.ajax.AjaxRequestTarget;
 13  
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 14  
 import org.apache.wicket.extensions.ajax.markup.html.modal.ModalWindow;
 15  
 import org.apache.wicket.markup.html.WebMarkupContainer;
 16  
 import org.apache.wicket.markup.html.basic.Label;
 17  
 import org.apache.wicket.markup.html.form.Button;
 18  
 import org.apache.wicket.markup.html.form.Form;
 19  
 import org.apache.wicket.markup.html.link.ExternalLink;
 20  
 import org.apache.wicket.markup.html.link.Link;
 21  
 import org.apache.wicket.markup.html.panel.FeedbackPanel;
 22  
 import org.apache.wicket.model.Model;
 23  
 
 24  
 
 25  
 
 26  
 /**
 27  
  * 1カラムでデザインされたページの共通クラス
 28  
  * 
 29  
  * ヘッダー領域
 30  
  * ・トップぺ戻るリンク
 31  
  * ・ログイン中のユーザID
 32  
  * ・ログアウトボタン
 33  
  * 
 34  
  * フッター領域
 35  
  * 
 36  
  * @author k_inaba
 37  
  */
 38  
 public class CommonFrameA extends AppPage {
 39  
     
 40  
     /* 確認画面用のモーダル */
 41  
     /** モーダル確認画面で「処理実行」が選択されたときにTreuになるモデルオブジェクト*/
 42  0
     final private Model<Boolean> doExecute = Model.of(false);
 43  0
     final private ModalWindow modalCommonConfirm = new ModalWindow("modalCommonConfirm");
 44  
     
 45  
     /* [デバッグ用] メールに記載されたURLを表示するコンテナ */
 46  0
     final private WebMarkupContainer cntDebugUrlOnMail = new WebMarkupContainer("cntDebugUrlOnMail");
 47  0
     final private ExternalLink linkDebugUrlOnMail = new ExternalLink("debugUrlOnMail", ""){
 48  
         @Override
 49  
         public boolean isVisible() {
 50  0
             return StringUtils.isEmpty(this.getDefaultModelObjectAsString()) == false;
 51  
         }
 52  
     };
 53  
     protected void addDebugUrl(String debugUrl){
 54  0
         linkDebugUrlOnMail.setDefaultModelObject(debugUrl);
 55  0
     }
 56  0
     public CommonFrameA() {
 57  
         
 58  
         /* ロゴのクリック */
 59  
         //add(new BookmarkablePageLink<Void>("goTop", TopPage.class));
 60  0
         add(new ExternalLink("goTop",ResourceReader.getStringQuick("url.back.top")));
 61  
         
 62  
         /*
 63  
          * ログイン情報領域
 64  
          */
 65  0
         WebMarkupContainer divLoginUser = new WebMarkupContainer("divLoginUser"){
 66  
             @Override
 67  
             public boolean isVisible() {
 68  
                 //return AppSession.isLogin(); // ログイン中のみ表示する。
 69  0
                 return true;
 70  
             }
 71  
         };
 72  0
         add(divLoginUser);
 73  
         
 74  
         /*
 75  
          * ログイン中ユーザ
 76  
          */
 77  0
         Model<String> loginUserId = new Model<String>() {
 78  
             @Override
 79  
             public String getObject() {
 80  0
                 if(AppSession.get().isLogin()) {
 81  0
                     String loginid = AppSession.get().getLoginUser().getLoginid();
 82  
                     //return "ログインユーザー:" + loginid;
 83  0
                     return "ログインユーザー:" + StringUtils.abbreviate(loginid, 30);
 84  
                 } else {
 85  
                     //return "ログインしていません";
 86  0
                     return "";
 87  
                 }
 88  
             }
 89  
         };
 90  0
         Label labelLoginId = new Label("labelLoginId", loginUserId);
 91  0
         divLoginUser.add(labelLoginId);
 92  
         
 93  
         /*
 94  
          * ログアウトボタン
 95  
          */
 96  0
         Form<Void> formLoginUser = new Form<Void>("formLoginUser");
 97  0
         divLoginUser.add(formLoginUser);
 98  0
         Button buttonLogout = new Button("buttonLogout") {
 99  
             @Override
 100  
             public void onSubmit() {
 101  
                 
 102  
                 /* APIログアウト相当の実施 */
 103  0
                 logout.execute(AppSession.get().getLoginUser().getLoginid());
 104  
                 
 105  
                 /* セッション無効化 */
 106  0
                 AppSession.get().invalidateNow();
 107  
                 
 108  
                 /* トップ画面へ遷移 */
 109  
                 //setResponsePage(getApplication().getHomePage());
 110  0
             }
 111  
             @Override
 112  
             public boolean isVisible() {
 113  0
                 return AppSession.get().isLogin(); // ログイン中のみ表示する。
 114  
             }
 115  
         };
 116  0
         formLoginUser.add(buttonLogout);
 117  
         
 118  
         /* 確認画面用のモーダル */
 119  
         /** モーダル確認画面で「処理実行」が選択されたときにTreuになるモデルオブジェクト*/
 120  0
         add(modalCommonConfirm);
 121  
         
 122  
         /* デバッグ出力:メールに記載したURL */
 123  0
         cntDebugUrlOnMail.setOutputMarkupId(true);
 124  0
         add(cntDebugUrlOnMail);
 125  0
         linkDebugUrlOnMail.setOutputMarkupId(true);
 126  0
         linkDebugUrlOnMail.setOutputMarkupPlaceholderTag(true);
 127  0
         cntDebugUrlOnMail.add(linkDebugUrlOnMail);
 128  
         
 129  
 //        /*
 130  
 //         * LocaleStringに関するデバッグ情報
 131  
 //         */
 132  
 //        WebMarkupContainer devls = new WebMarkupContainer("devls") {
 133  
 //            @Override
 134  
 //            public boolean isVisible() {
 135  
 //                return AppLogger.isDebug();
 136  
 //            }
 137  
 //        };
 138  
 //        add(devls);
 139  
         
 140  
 //        Localestring cnd = new Localestring();
 141  
 //        cnd.setScreenid(getScreenId());
 142  
 //        List<Localestring> localestrings = localestringDao.get(cnd);
 143  
 //        devls.add(new ListView<Localestring>("listView", localestrings) {
 144  
 //            @Override
 145  
 //            protected void populateItem(ListItem<Localestring> item) {
 146  
 //                item.add(new Label("screenid", item.getModelObject().getScreenid()));
 147  
 //                item.add(new Label("controlid", item.getModelObject().getControlid()));
 148  
 //                item.add(new Label("lang", String.valueOf(item.getModelObject().getLanguageid())));
 149  
 //                item.add(new Label("string", String.valueOf(item.getModelObject().getPrintstring())));
 150  
 //            }
 151  
 //        });
 152  
         
 153  0
     }
 154  
 
 155  
     /** モーダル確認画面を呼び出すためのボタン(共通実装)*/
 156  0
     protected abstract class ConfirmAjaxButton extends AjaxButton {
 157  0
         public ConfirmAjaxButton(String id) {
 158  0
             super(id);
 159  0
         }
 160  
         @Override
 161  
         final protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 162  
             
 163  
             /* 
 164  
              * 事前処理
 165  
              *  呼び出し元のPageクラスで実装したexecuteBeforeの処理を行います。
 166  
              */
 167  0
             boolean check = executeBefore();
 168  0
             if(check == false 
 169  0
                     || hasInputError()) {
 170  
                 
 171  0
                 FeedbackPanel feedback = (FeedbackPanel)getPage().get("feedback");
 172  0
                 if(feedback != null) {
 173  0
                     target.add(feedback);
 174  
                 }
 175  0
                 return; // 【処理中断】
 176  
             }
 177  
             
 178  0
             doExecute.setObject(false);
 179  
             
 180  
             /* モーダル確認画面を構築 */
 181  
             //modalDefPreview.setTitle("");
 182  0
             modalCommonConfirm.setCssClassName(ModalWindow.CSS_CLASS_GRAY);
 183  0
             final Integer MODAL_PREVIEW_HEIGHT = 150;
 184  0
             final Integer MODAL_PREVIEW_WIDTH = 400;
 185  0
             modalCommonConfirm.setInitialHeight(MODAL_PREVIEW_HEIGHT);
 186  0
             modalCommonConfirm.setInitialWidth(MODAL_PREVIEW_WIDTH);
 187  0
             modalCommonConfirm.setResizable(true);
 188  0
             modalCommonConfirm.setPageCreator(new ModalWindow.PageCreator() {
 189  
                 private static final long serialVersionUID = 1L;
 190  
                 public Page createPage() {
 191  
                     /* Pageインスタンスの作成 */
 192  0
                     CommonConfirmPage modalPage = new CommonConfirmPage();
 193  
                     /* 
 194  
                      * 確認メッセージの設定
 195  
                      *  呼び出し元のPageクラスでオーバーライドして設定します。
 196  
                      */
 197  0
                     modalPage.confirmMessage = getConfirmMessage();
 198  0
                     modalPage.confirmMessageStrong = getConfirmMessageStrong();
 199  
                     /*
 200  
                      * executableオブジェクトの設定
 201  
                      *  executableは確認モーダル画面の「実行」ボタンを押した直後に実行されます。
 202  
                      */
 203  0
                     modalPage.executable = new CommonConfirmPage.Executable() {
 204  
                         @Override
 205  
                         void execute() {
 206  0
                             executableWork();
 207  0
                         }
 208  
                     };
 209  
                     
 210  
                     /* 
 211  
                      * CallBack の設定
 212  
                      *  Modal画面から呼び出し元のPageオブジェクトに参照を引き渡す処理です。
 213  
                      *  Callbackクラスを使用し、PageReferenceを経由しないと、正しく引き渡しできません。
 214  
                      */
 215  0
                     final CommonConfirmPage.Callback callback = new CommonConfirmPage.Callback() {
 216  
                         @Override
 217  
                         public void callback(AjaxRequestTarget target) {
 218  0
                             CommonFrameA me = (CommonFrameA)getPage().getPageReference().getPage(); // 左記の実装でないと、インスタンスが変化する。
 219  0
                             me.doExecute.setObject(true);
 220  0
                         }
 221  
                     };
 222  0
                     modalPage.callback = callback;
 223  0
                     return modalPage;
 224  
                 }
 225  
             });
 226  
             /* CallBack の処理 */
 227  0
             modalCommonConfirm.setWindowClosedCallback(new ModalWindow.WindowClosedCallback() {
 228  
                 private static final long serialVersionUID = 1L;
 229  
                 @Override
 230  
                 public void onClose(AjaxRequestTarget target) {
 231  0
                     if(doExecute.getObject()) {
 232  
                         /* 確認モーダル画面の「実行」ボタンを押した後、呼び出し元のPageクラスで実行される処理。 */
 233  0
                         executeAfter(target);
 234  
                         
 235  0
                         FeedbackPanel feedback = (FeedbackPanel)getPage().get("feedback");
 236  0
                         if(feedback != null) {
 237  0
                             target.add(feedback);
 238  
                         }
 239  
                         
 240  0
                         if(AppLogger.isDebug()) {
 241  
                             /* [デバッグ用] メールに記載されたURLを表示するコンテナ */
 242  0
                             target.add(cntDebugUrlOnMail);
 243  
                         }
 244  
                     }
 245  0
                 }
 246  
             });
 247  0
             modalCommonConfirm.show(target); // モーダルを表示
 248  0
         }
 249  
 
 250  
         @Override
 251  
         protected void onError(AjaxRequestTarget target, Form<?> form) {
 252  
          // 処理なし
 253  0
         }
 254  
 
 255  
         /** 確認メッセージの設定 */
 256  
         abstract String getConfirmMessage();
 257  
         /** 確認メッセージの設定 */
 258  
         String getConfirmMessageStrong(){
 259  0
             return "";
 260  
         };
 261  
         /**
 262  
          * 前処理
 263  
          *  入力値チェックを行います。
 264  
          *  呼び出し元のPageクラスでオーバーライドします。
 265  
          *  入力値チェックが不要の場合は、オーバーライドしなくてよいです。
 266  
          */
 267  
         boolean executeBefore() {
 268  0
             return true;
 269  
         }
 270  
         /** 
 271  
          * 確認モーダル画面の「実行」ボタンを押した直後に実行される処理。
 272  
          * ここでは、呼び出し元のPageクラスのメンバに、正しく値を設定することができないことに注意する。
 273  
          */
 274  
         void executableWork(){
 275  
             // 必要に応じてオーバーライド
 276  0
         };
 277  
         /**
 278  
          * 確認モーダル画面の「実行」ボタンを押した後、呼び出し元のPageクラスで実行される処理。
 279  
          */
 280  
         abstract void executeAfter(AjaxRequestTarget target);
 281  
     }
 282  
     
 283  
     protected void doパスワードリセット(final Integer targetUserid, PasswordTicketManager passwordTicketManager, String mailValue) {
 284  
         
 285  
         
 286  
         
 287  
         /* 共通機能:パスワード登録チケット発行 からチケットを取得する */
 288  0
         String random = passwordTicketManager.executeパスワードリセット(targetUserid);
 289  
         
 290  
         /* パスワード再設定用メールを送信する */
 291  0
         MailSetting setting = new MailSetting();
 292  0
         setting.setTemplate(ResourceReader.getText("message/mail.resetpw"));
 293  0
         setting.setMailTo(mailValue);
 294  0
         String パスワード登録画面のURL = ResourceReader.getStringQuick("urlroot") + "entrypassword?value=" + random;
 295  0
         setting.replace("パスワード登録画面のURL", パスワード登録画面のURL);
 296  0
         boolean sendmailrsult = AppSendMail.send(setting);
 297  0
         if(sendmailrsult == false) {
 298  0
             error("メールの送信に失敗しました。");
 299  
         }
 300  
         
 301  
         /* テスト自動化対応 */
 302  0
         if (AppLogger.isDebug()) {
 303  
             //info("メールに記載したURL【" + パスワード登録画面のURL + "】");
 304  0
             addDebugUrl(パスワード登録画面のURL);
 305  
         }
 306  0
     }
 307  
     
 308  
     private Page returnPage;
 309  
     protected Page getReturnPage() {
 310  0
         return returnPage;
 311  
     }
 312  
     protected void setReturnPage(Page returnPage) {
 313  0
         this.returnPage = returnPage;
 314  0
     }
 315  
     
 316  
     
 317  
     
 318  
     /**
 319  
      * 共通戻るリンクの設置
 320  
      */
 321  
     protected void createCommonBackLinks() {
 322  0
         add(new ExternalLink("lnkMember", ResourceReader.getStringQuick("url.back.member")) {
 323  
             @Override
 324  
             public boolean isVisible() {
 325  0
                 return isMember();
 326  
             }
 327  
         });
 328  0
         add(new ExternalLink("lnkOrgAdmin", ResourceReader.getStringQuick("url.back.orgadmin")) {
 329  
             @Override
 330  
             public boolean isVisible() {
 331  0
                 return isOrgAdmin();
 332  
             }
 333  
         });
 334  0
         add(new ExternalLink("lnkSysAdmin", ResourceReader.getStringQuick("url.back.sysadmin")) {
 335  
             @Override
 336  
             public boolean isVisible() {
 337  0
                 return isSystemAdmin();
 338  
             }
 339  
         });
 340  0
     }
 341  
     /**
 342  
      * 画面固有の戻るボタンの設置
 343  
      * @param clz
 344  
      * @param string
 345  
      */
 346  
     protected void createBackLink(final Class<? extends CommonFrameA> clz, final String name) {
 347  0
         Link<Void> linkReturn = new Link<Void>("lnkReturn") {
 348  
             @Override
 349  
             public void onClick() {
 350  0
                 setResponsePage(getReturnPage());
 351  0
             }
 352  
             @Override
 353  
             public boolean isVisible() {
 354  0
                 return getReturnPage() != null;
 355  
             }
 356  
         };
 357  0
         Label lnkReturnAnker = new Label("lnkReturnAnker", new Model<String>(){
 358  
             @Override
 359  
             public String getObject() {
 360  0
                 if(getReturnPage() != null  && getReturnPage().getClass().equals(clz)) {
 361  0
                     return name + "へ戻る";
 362  
                 } else {
 363  0
                     return "前へ戻る";
 364  
                 }
 365  
             }
 366  
         });
 367  0
         linkReturn.add(lnkReturnAnker);
 368  0
         add(linkReturn);
 369  0
     }
 370  
     /**
 371  
      * フィードバックパネルの設置
 372  
      */
 373  
     protected void createFeedbackPanel() {
 374  0
         final FeedbackPanel feedbackPanel = new FeedbackPanel("feedback");
 375  0
         feedbackPanel.setOutputMarkupId(true);
 376  0
         add(feedbackPanel);
 377  0
     }
 378  
     
 379  
 }