/** * */ package jp.agentec.sinaburocast.csv; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.HashMap; import java.util.List; import javax.servlet.http.HttpServletRequest; import jp.agentec.sinaburocast.common.util.SinaburoUtil; import jp.agentec.sinaburocast.common.util.SinaburoViewUtil; import jp.agentec.sinaburocast.entity.Member; import jp.agentec.sinaburocast.entity.Prefecture; import jp.agentec.sinaburocast.service.MemberService; import jp.agentec.sinaburocast.service.PrefectureService; import org.seasar.framework.util.StringUtil; import org.seasar.s2csv.csv.annotation.CSVValidator; import org.seasar.s2csv.csv.annotation.column.CSVColumn; import org.seasar.s2csv.csv.annotation.column.CSVMask; import org.seasar.s2csv.csv.annotation.column.CSVMaxLength; import org.seasar.s2csv.csv.annotation.column.CSVRequired; import org.seasar.s2csv.csv.annotation.entity.CSVEntity; import org.seasar.s2csv.csv.annotation.entity.CSVRecordValidator; import org.seasar.s2csv.csv.exception.runtime.CSVValidationException; import org.seasar.struts.util.RequestUtil; /** * @author kim-hs * */ @CSVRecordValidator(msgKey="errors.mailCheck", method="validateRecord",after=true) @CSVEntity(header=true,demiliter='\t',headerCheck=false,columnCountCheck=false) public class MemberInfoCsv extends AbstractCsv { public PrefectureService prefectureService; public MemberService memberService; private int checkMemberId; private String checkLoginId; private String checkPcEmail; private String checkMbEmail; private int checkDelFlg; @CSVValidator(msgKey = "errors.memberId2", method = "validateMemberId") @CSVColumn(columnIndex = 0, columnName = "会員ID") public String memberId; @CSVRequired @CSVMask(mask = "^[-_\\.0-9a-zA-Z]{6,20}$") @CSVValidator(msgKey = "errors.loginId", method = "validateLoginId") @CSVColumn(columnIndex = 1, columnName = "ログインID") public String loginId; @CSVRequired @CSVMask(mask = "^[0-9a-zA-Z]{4,20}$") @CSVColumn(columnIndex = 2, columnName = "パスワード") public String password; @CSVMaxLength(maxlength = 30) @CSVMask(mask = "^[^0-9]+$") @CSVColumn(columnIndex = 3, columnName = "氏") public String firstName; @CSVMaxLength(maxlength = 30) @CSVMask(mask = "^[^0-9]+$") @CSVColumn(columnIndex = 4, columnName = "名") public String lastName; @CSVMaxLength(maxlength = 30) @CSVMask(mask = "^[ァ-ヶー]+$") @CSVColumn(columnIndex = 5, columnName = "氏(カナ)") public String firstNameKana; @CSVMaxLength(maxlength = 30) @CSVMask(mask = "^[ァ-ヶー]+$") @CSVColumn(columnIndex = 6, columnName = "名(カナ)") public String lastNameKana; @CSVMaxLength(maxlength = 64) @CSVMask(mask = "^[!-~]+@[!-~]+$") @CSVValidator(msgKey = "errors.pcEmail", method = "validatepcEmail") @CSVColumn(columnIndex = 7, columnName = "PCメールアドレス") public String pcEmail; @CSVMaxLength(maxlength = 64) @CSVMask(mask = "^[!-~]+@[!-~]+$") @CSVValidator(msgKey = "errors.mbEmail", method = "validatembEmail") @CSVColumn(columnIndex = 8, columnName = "携帯メールアドレス") public String mbEmail; @CSVMask(mask = "^[0-9]{8,20}$") @CSVColumn(columnIndex = 9, columnName = "電話番号") public String telNo; @CSVValidator(msgKey = "errors.prefecture", method = "validateGenderCd") @CSVColumn(columnIndex = 10, columnName = "性別") public String genderName; @CSVValidator(msgKey = "errors.birthday", method = "validatebirthday") @CSVColumn(columnIndex = 11, columnName = "生年月日") public String birthday; @CSVColumn(columnIndex = 12, columnName = "年代") public String age; @CSVValidator(msgKey = "errors.prefecture", method = "validatezipCode") @CSVMask(mask = "^[0-9]{7}$") @CSVColumn(columnIndex = 13, columnName = "郵便番号") public String zipCode; @CSVMaxLength(maxlength = 256) @CSVValidator(msgKey = "errors.prefecture", method = "validatePrefectureName") @CSVColumn(columnIndex = 14, columnName = "都道府県") public String prefectureName; @CSVMaxLength(maxlength = 256) @CSVColumn(columnIndex = 15, columnName = "市区町村") public String cityName; @CSVMaxLength(maxlength = 256) @CSVColumn(columnIndex = 16, columnName = "町名・番地") public String areaName; @CSVMaxLength(maxlength = 256) @CSVColumn(columnIndex = 17, columnName = "建物名") public String buildingName; @CSVRequired @CSVMask(mask = "^[0-9]+$") @CSVColumn(columnIndex = 18, columnName = "有効ポイント数") public String pointNum; @CSVMaxLength(maxlength = 256) @CSVColumn(columnIndex = 19, columnName = "メモ") public String memo; @CSVRequired @CSVColumn(columnIndex = 20, columnName = "削除フラグ") @CSVValidator(msgKey = "", method = "validateDeleteFlg") public String deleteFlg; @CSVRequired @CSVColumn(columnIndex = 21, columnName = "退会有無") @CSVValidator(msgKey = "errors.prefecture", method = "validateDrawFlg") public String drawFlg; @CSVColumn(columnIndex = 22, columnName = "結果") public String okNg = "OK"; @CSVColumn(columnIndex = 23, columnName = "理由") public String reason = "reason"; public Integer prefectureId; public Integer genderCd; public Integer localCityFlg; // @CSVValidator(msgKey = "errors.pcEmail1", method = "validatepcEmail1") // @CSVColumn(columnIndex = 7, columnName = "PCメールアドレス") // public String pcEmailCheck; // // @CSVValidator(msgKey = "errors.mbEmail1", method = "validatembEmail1") // @CSVColumn(columnIndex = 8, columnName = "携帯メールアドレス") // public String mbEmailCheck; /** * エンティティのバリデーションを行います。 */ public boolean validateRecord(String[] args) { String pcMail = args[7]; String mbMail = args[8]; if (StringUtil.isBlank(pcMail) && StringUtil.isBlank(mbMail)) { return false; } return true; } /** * {@link #versionNo}フィールドのバリデーションを行います。 */ public boolean validatePrefectureName(String arg) { if (StringUtil.isBlank(arg)) return true; HttpServletRequest request = RequestUtil.getRequest(); @SuppressWarnings("unchecked") HashMap<String, Integer> postalMap = (HashMap<String, Integer>) request .getAttribute("postal"); if (postalMap == null) { List<Prefecture> prefectureInfo = prefectureService .findAllOrderById(); postalMap = new HashMap<String, Integer>(); // 都道府県 for (Prefecture data : prefectureInfo) { postalMap.put(data.prefecture, data.prefectureId); } request.setAttribute("postal", postalMap); } // キーがない場合はエラー if (!postalMap.containsKey(arg)) { return false; } prefectureId = postalMap.get(arg); return true; } public boolean validateGenderCd(String args) { if (StringUtil.isBlank(args)) { genderCd = null; return true; } if (args.equals("男")) { genderCd = 0; } else if (args.equals("女")) { genderCd = 1; } else { genderCd = null; } return true; } public boolean validatezipCode(String args) { if (StringUtil.isBlank(args)) { localCityFlg = 0; return true; } if (args.startsWith("272")) { localCityFlg = 1; } else { localCityFlg = 0; } return true; } public boolean validatebirthday(String args) { if(StringUtil.isBlank(args)) return true; SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); format.setLenient(false); try { format.parse(args); } catch (ParseException e) { return false; } return true; } public boolean validatepcEmail(String args) { // PCメールアドレスの検証は削除フラグの検証で行う checkPcEmail = args; return true; } public boolean validatembEmail(String args) { // 携帯メールアドレスの検証は削除フラグの検証で行う checkMbEmail = args; return true; } public boolean validateMemberId(String args) { if (!StringUtil.equals(args, "")) { checkMemberId = Integer.parseInt(args); } return true; } public boolean validateLoginId(String args) { // ログインIDの検証は削除フラグの検証で行う checkLoginId = args; return true; } public boolean validateDeleteFlg(String args) { if (!StringUtil.equals(args, "")) { checkDelFlg = Integer.parseInt(args); } return true; } public boolean validateDrawFlg(String args) { if(checkDelFlg == 1 || args.equals("1")){ return true; } StringBuffer errorMessage = new StringBuffer(); Member memberInfo = memberService.findByUserId(checkLoginId); if (memberInfo != null) { if (!StringUtil.isBlank(checkLoginId)) { if(!memberInfo.memberId.equals(checkMemberId)) { errorMessage.append(SinaburoViewUtil.getMessage("errors.E016")); } } } // PCメールチェック if (!StringUtil.isBlank(checkPcEmail)) { memberInfo = memberService.findByPcEmail(checkPcEmail); if(memberInfo != null){ if(!memberInfo.memberId.equals(checkMemberId)) { errorMessage.append(SinaburoViewUtil.getMessage("errors.E014")); } } if (SinaburoUtil.mobileAddressCheck(checkPcEmail)) { errorMessage.append(SinaburoViewUtil.getMessage("errors.email", SinaburoViewUtil.getMessage("labels.pcMail"))); } } // 携帯メールチェック if (!StringUtil.isBlank(checkMbEmail)) { memberInfo = memberService.findByMoEmail(checkMbEmail); if(memberInfo != null){ if(!memberInfo.memberId.equals(checkMemberId)) { errorMessage.append(SinaburoViewUtil.getMessage("errors.E015")); } } if (!SinaburoUtil.mobileAddressCheck(checkMbEmail)) { errorMessage.append(SinaburoViewUtil.getMessage("errors.email", SinaburoViewUtil.getMessage("labels.mbMail"))); } } if(StringUtil.isNotBlank(errorMessage.toString())){ throw new CSVValidationException("errors.custom", new Object[]{errorMessage}); } return true; } }