OSDN Git Service

全てのjavaファイルにモードライン追加。
[rabbit-bts/RabbitBTS.git] / src / jp / sourceforge / rabbitBTS / controllers / RegisterController.java
index abe466b..0022f08 100644 (file)
@@ -1,3 +1,4 @@
+// vim:set ts=4 sts=4 sw=4 noet fenc=utf-8:
 /*
    Copyright 2009 senju@users.sourceforge.jp
 
 
 package jp.sourceforge.rabbitBTS.controllers;
 
+import java.util.Date;
 import java.util.logging.Level;
 
 import javax.servlet.http.HttpServletRequest;
 
 import jp.sourceforge.rabbitBTS.Sht;
-import jp.sourceforge.rabbitBTS.exceptions.NotRegisteredException;
+import jp.sourceforge.rabbitBTS.exceptions.HasNotValidIdException;
 import jp.sourceforge.rabbitBTS.exceptions.RabbitBTSException;
 import jp.sourceforge.rabbitBTS.models.Account;
 import jp.sourceforge.rabbitBTS.services.AccountService;
@@ -35,8 +37,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 
 @Controller
-public class RegisterController implements IPublicController {
-       private static final String REDIRECT_HOME_HTML = "redirect:/home.html";
+public final class RegisterController extends BaseController implements
+               IPublicController {
+       private static final String REDIRECT_HOME_HTML = "redirect:/home/";
 
        @Autowired
        private AccountService accountService;
@@ -59,20 +62,20 @@ public class RegisterController implements IPublicController {
        public String index(HttpServletRequest req, ModelMap map) {
                String ret = null;
                try {
-                       final Account up = this.accountService.fetchAccount();
-                       if (up == null) {
-                               // googleにログインしてない場合
-                               Sht.log(this).finer("ログインが必要");
-                               ret = "redirect:" + Sht.loginUrl(req);
+                       final Account account = this.accountService.fetchAccount();
+                       if (account == null) {
+                               // 正常系
+                               map.addAttribute(new Account());
+                               ret = null;
                        } else {
                                // すでに登録済みの場合ホームへリダイレクト
                                Sht.log(this).finer("既に登録済み");
                                ret = REDIRECT_HOME_HTML;
                        }
-               } catch (final NotRegisteredException e) {
-                       // 正常系
-                       map.addAttribute(new Account());
-                       ret = null;
+               } catch (final HasNotValidIdException e) {
+                       // googleにログインしてない場合
+                       Sht.log(this).finer("ログインが必要");
+                       ret = "redirect:" + Sht.loginUrl(req);
                }
                return ret;
        }
@@ -84,32 +87,48 @@ public class RegisterController implements IPublicController {
         * 正常系
         * <ol>
         * <li>バリデート
-        * <li>UserProfileを登録
+        * <li>Accountを登録
         * <li>ユーザーホームにリダイレクト
         * <ol>
         * <p>
         * 異常系
         * <ol>
         * <li>バリデートに失敗した場合、エラーメッセージ
-        * <li>UserProfile登録に失敗した場合(二重登録等)、ロールバック、エラーメッセージ
+        * <li>Account登録に失敗した場合(二重登録等)、ロールバック、エラーメッセージ
         * </ol>
         * 
-        * @param user
+        * @param account
         * @param result
         * @return
         */
        @RequestMapping(method = RequestMethod.POST)
-       public String index(Account user, BindingResult result, ModelMap map) {
-               this.validator.validate(user, result);
+       public String index(Account account, BindingResult result, ModelMap map) {
+               if (!this.isCsrfSafe(result)) {
+                       return null;
+               }
+
+               account.setLastAccess(new Date());
+
+               account.setEmail(Sht.user().getEmail());
+               this.validator.validate(account, result);
                if (result.hasErrors()) {
                        Sht.log(this).finer("ユーザ登録画面にてバリデートに失敗");
                        return null;
                }
 
                try {
-                       this.accountService.registAccount(user);
+                       // nickName重複チェック
+                       if (this.accountService.fetchAccountByNickName(account
+                                       .getNickName()) != null) {
+                               result.rejectValue("nickName", "Account.nickName[duplicate]");
+                               Sht.log(this).finer("nickName重複チェックエラー");
+                               return null;
+                       }
+
+                       this.accountService.registAccount(account);
                } catch (final RabbitBTSException e) {
                        Sht.log(this).log(Level.WARNING, "ユーザー登録で例外発生", e);
+                       // TODO:resultにセット
                        map.addAttribute("errorMessage", "登録に失敗しました。再度やりなおしてください。");
                        return null;
                }