Package jp.co.nskint.uq.pd.signage.page

Source Code of jp.co.nskint.uq.pd.signage.page.ManagerPage

package jp.co.nskint.uq.pd.signage.page;

import jp.co.nskint.uq.pd.signage.model.Manager;
import jp.co.nskint.uq.pd.signage.model.User;
import jp.co.nskint.uq.pd.signage.service.ManagerService;

import org.slim3.controller.Navigation;
import org.slim3.controller.validator.Validators;
import org.slim3.datastore.Datastore;
import org.slim3.util.ApplicationMessage;

import scenic3.annotation.ActionPath;
import scenic3.annotation.Page;
import scenic3.annotation.RequestParam;
import scenic3.annotation.Var;

import com.google.appengine.api.datastore.Transaction;

/**
* 代表者情報 操作系画面
*
* @author NAGASAWA takahiro <tnagasaw@nskint.co.jp>
*/
@Page("/manager")
public class ManagerPage extends BaseUserPage<ManagerService> {

    private ManagerService service = new ManagerService();
    /* (非 Javadoc)
     * @see jp.co.nskint.uq.pd.signage.page.BaseUserPage#getService()
     */
    @Override
    public ManagerService getService() {
        return service;
    }

    /**
     * 代表者情報登録画面表示
     *
     * 未登録者が行うため、権限チェックは行わない。
     */
    @ActionPath("regist")
    public Navigation regist() {
        request.setAttribute(
            "title",
            ApplicationMessage.get("title.manager.regist"));
        // 登録画面を表示
        return forward("/manager/regist.jsp");
    }

    /**
     * 代表者情報登録
     *
     * 未登録者が行うため、権限チェックは行わない。
     *
     * @param uid
     *            ユーザID
     * @param name
     *            氏名
     * @param mail
     *            メールアドレス
     * @param phone
     *            電話番号
     * @param zipcode
     *            郵便番号
     * @param address
     *            住所
     */
    @ActionPath("insert")
    public Navigation insert(@RequestParam("uid") String uid,
            @RequestParam("name") String name,
            @RequestParam("mail") String mail,
            @RequestParam("phone") String phone,
            @RequestParam("zipcode") String zipcode,
            @RequestParam("address") String address) {
        putEnteringLog();
        request.setAttribute(
            "title",
            ApplicationMessage.get("title.manager.regist"));
        try {
            if (!validateInsertUser(uid)) {
                // 登録画面を表示
                return forward("/manager/regist.jsp");
            }
            Validators v = getValidator();
            v.add(
                "uid",
                v.required(),
                v.maxlength(VALID_MAX_UID),
                v.minlength(VALID_MIN_UID));
            if (v.validate()) {
                Transaction tx= Datastore.beginTransaction();
                User user =
                    service.put(tx, uid, name, mail, phone, zipcode, address);
                // ユーザ登録メール送信
                if (!sendConfirmationMail(user)) {
                    // メール送信失敗
                    tx.rollback();
                    return forward("/manager/regist.jsp");
                }

                Datastore.put(user);
                // エラーが無ければ登録
                tx.commit();

                // 登録終了画面(完了画面ではない)を表示
                return forward("/manager/registered.jsp");
            } else {
                return forward("/manager/regist.jsp");
            }
        } finally {
            putExitingLog();
        }
    }

    /**
     * 代表者情報更新画面表示
     *
     * @param uid
     */
    @ActionPath("{uid}/edit")
    public Navigation edit(@Var("uid") String uid) {
        putEnteringLog();
        try {
            User user = service.get(uid);
            if (roleCheck(user) && user instanceof Manager) {
                Manager manager = (Manager) user;
                request.setAttribute("uid", manager.getUid().getName());
                request.setAttribute("name", manager.getName());
                request.setAttribute("mail", manager.getMail());
                request.setAttribute("phone", manager.getPhone());
                request.setAttribute("zipcode", manager.getZipcode());
                request.setAttribute("address", manager.getAddress());
                request.setAttribute(
                    "title",
                    ApplicationMessage.get("title.manager.regist"));

                // 登録画面を表示
                return forward("/manager/edit.jsp");
            }
            // エラー画面を表示
            return forward("/error.jsp");
        } finally {
            putExitingLog();
        }
    }

    /**
     * 代表者情報更新
     *
     * @param name
     *            氏名
     * @param mail
     *            メールアドレス
     * @param phone
     *            電話番号
     * @param zipcode
     *            郵便番号
     * @param address
     *            住所
     */
    @ActionPath("{uid}/update")
    public Navigation update(@Var("uid") String uid,
            @RequestParam("name") String name,
            @RequestParam("mail") String mail,
            @RequestParam("phone") String phone,
            @RequestParam("zipcode") String zipcode,
            @RequestParam("address") String address) {
        putEnteringLog();
        try {
            User tmp = service.get(uid);
            if (roleCheck(tmp)) {
                Validators v = getValidator();
                if (v.validate()) {
                    service.put(uid, name, mail, phone, zipcode, address);
                    return redirect("/user/" + uid);
                } else {
                    return forward("/manager/edit.jsp");
                }
            }
            // エラー画面を表示
            return forward("/error.jsp");
        } finally {
            putExitingLog();
        }
    }

    /**
     * バリデータを取得する。
     *
     * @return バリデータ
     */
    private Validators getValidator() {
        Validators v = new Validators(request);
        v.add("name", v.required());
        v.add("mail", v.required(), v.regexp(VALID_PAT_MAILADDR));
        v.add("phone", v.required(), v.regexp("0\\d+[\\-]\\d+[\\-]\\d+"));
        v.add("zipcode", v.required(), v.regexp("\\d{3}-\\d{4}"));
        v.add("address", v.required());
        return v;
    }

    /**
     * 権限チェックをする。
     *
     * @param user
     *            操作対象ユーザ
     * @return true:OK / false:NG
     */
    private boolean roleCheck(User user) {
        if (user != null
            && user instanceof Manager
            && (checkAdmin() || user.equals(getLoginUser()))) {
            return true;
        } else {
            errors.put("page", ApplicationMessage.get("error.authority"));
            return false;
        }
    }
}
TOP

Related Classes of jp.co.nskint.uq.pd.signage.page.ManagerPage

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.