/* * Aipo is a groupware program developed by TOWN, Inc. * Copyright (C) 2004-2015 TOWN, Inc. * http://www.aipo.com * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.aimluck.eip.fileio; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.turbine.util.RunData; import org.apache.velocity.context.Context; import com.aimluck.commons.field.ALDateField; import com.aimluck.commons.field.ALNumberField; import com.aimluck.commons.field.ALStringField; import com.aimluck.commons.utils.ALStringUtil; import com.aimluck.eip.addressbook.AddressBookCompanyResultData; import com.aimluck.eip.addressbook.AddressBookGroupResultData; import com.aimluck.eip.cayenne.om.portlet.EipMAddressGroup; import com.aimluck.eip.cayenne.om.portlet.EipMAddressbook; import com.aimluck.eip.cayenne.om.portlet.EipMAddressbookCompany; import com.aimluck.eip.cayenne.om.portlet.EipTAddressbookGroupMap; import com.aimluck.eip.cayenne.om.security.TurbineUser; import com.aimluck.eip.common.ALAbstractFormData; import com.aimluck.eip.common.ALDBErrorException; import com.aimluck.eip.common.ALEipConstants; import com.aimluck.eip.common.ALEipUser; import com.aimluck.eip.common.ALPageNotFoundException; import com.aimluck.eip.modules.actions.common.ALAction; import com.aimluck.eip.orm.Database; import com.aimluck.eip.orm.query.SelectQuery; import com.aimluck.eip.util.ALEipUtils; import com.aimluck.eip.util.ALLocalizationUtils; /** * アドレス帳用入力フォームデータです。 * */ public class FileIOAddressBookCsvFormData extends ALAbstractFormData { private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(FileIOAddressBookCsvFormData.class.getName()); // 所有グループのリスト private List<AddressBookGroupResultData> groupList; // このアドレスが登録されているグループ(グループオブジェクト格納) private List<AddressBookGroupResultData> groups; private List<EipMAddressGroup> groupModelList; // グループ名表示用フィールド(「、」区切りのグループ名) private ALStringField group_names; private ALStringField firstname; private ALStringField lastname; private ALStringField first_name_kana; private ALStringField last_name_kana; private FileIOStringField email; // 電話番号 private ALStringField telephone1; private ALStringField telephone2; private ALStringField telephone3; // 携帯電話 private ALStringField cellular_phone1; private ALStringField cellular_phone2; private ALStringField cellular_phone3; private FileIOStringField cellular_mail; private List<AddressBookCompanyResultData> companyList; private ALNumberField company_id; private ALStringField position_name; private ALStringField public_flag; private ALStringField note; private ALStringField create_user; private ALStringField update_user; private ALDateField create_date; private ALDateField update_date; // 会社情報 private ALStringField company_name; private ALStringField company_name_kana; private FileIOStringField post_name; private ALStringField comp_zipcode1; private ALStringField comp_zipcode2; private FileIOStringField comp_address; private ALStringField comp_telephone1; private ALStringField comp_telephone2; private ALStringField comp_telephone3; private ALStringField comp_fax_number1; private ALStringField comp_fax_number2; private ALStringField comp_fax_number3; private FileIOStringField comp_url; /** 番号関連をそれぞれ一つにまとめたもの */ private FileIOStringField telephone_full; private FileIOStringField cellular_phone_full; private FileIOStringField comp_zipcode_full; private FileIOStringField comp_telephone_full; private FileIOStringField comp_fax_number_full; /** ユーザー名 */ private ALStringField username; private boolean same_company; /**/ private boolean is_company_only; /** 会社情報のみの入力か否か */ private boolean is_new_company; @Override public void init(ALAction action, RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { super.init(action, rundata, context); is_new_company = rundata.getParameters().getBoolean("is_new_company"); } @Override public void initField() { groups = new ArrayList<AddressBookGroupResultData>(); groupModelList = new ArrayList<EipMAddressGroup>(); group_names = new ALStringField(); lastname = new ALStringField(); lastname.setFieldName(ALLocalizationUtils.getl10n("FILEIO_FIRST_NAME")); lastname.setTrim(true); firstname = new ALStringField(); firstname.setFieldName(ALLocalizationUtils.getl10n("FILEIO_LAST_NAME")); firstname.setTrim(true); last_name_kana = new ALStringField(); last_name_kana.setFieldName(ALLocalizationUtils .getl10n("FILEIO_FIRST_NAME_SPELL")); last_name_kana.setTrim(true); first_name_kana = new ALStringField(); first_name_kana.setFieldName(ALLocalizationUtils .getl10n("FILEIO_LAST_NAME_SPELL")); first_name_kana.setTrim(true); email = new FileIOStringField(); email.setFieldName(ALLocalizationUtils.getl10n("FILEIO_MAILADDRESS")); email.setTrim(true); // 電話番号 telephone1 = new ALStringField(); telephone1.setFieldName(ALLocalizationUtils.getl10n("FILEIO_PHONE_NUMBER")); telephone1.setTrim(true); telephone2 = new ALStringField(); telephone2.setFieldName(ALLocalizationUtils.getl10n("FILEIO_PHONE_NUMBER")); telephone2.setTrim(true); telephone3 = new ALStringField(); telephone3.setFieldName(ALLocalizationUtils.getl10n("FILEIO_PHONE_NUMBER")); telephone3.setTrim(true); // 携帯番号 cellular_phone1 = new ALStringField(); cellular_phone1.setFieldName(ALLocalizationUtils .getl10n("FILEIO_MOBILE_PHONE")); cellular_phone1.setTrim(true); cellular_phone2 = new ALStringField(); cellular_phone2.setFieldName(ALLocalizationUtils .getl10n("FILEIO_MOBILE_PHONE")); cellular_phone2.setTrim(true); cellular_phone3 = new ALStringField(); cellular_phone3.setFieldName(ALLocalizationUtils .getl10n("FILEIO_MOBILE_PHONE")); cellular_phone3.setTrim(true); cellular_mail = new FileIOStringField(); cellular_mail.setFieldName(ALLocalizationUtils .getl10n("FILEIO_MOBILE_PHONE_ADDRESS")); cellular_mail.setTrim(true); company_id = new ALNumberField(); company_id.setFieldName(ALLocalizationUtils.getl10n("FILEIO_COMPANY")); position_name = new ALStringField(); position_name.setFieldName(ALLocalizationUtils.getl10n("FILEIO_POST")); position_name.setTrim(true); public_flag = new ALStringField(); public_flag.setFieldName(ALLocalizationUtils .getl10n("FILEIO_OPEN_DIVISION")); public_flag.setTrim(true); create_user = new ALStringField(); create_user.setFieldName(ALLocalizationUtils.getl10n("COMMON_CREATE_USER")); update_user = new ALStringField(); update_user.setFieldName(ALLocalizationUtils.getl10n("COMMON_UPDATE_USER")); create_date = new ALDateField(); create_date.setFieldName(ALLocalizationUtils.getl10n("COMMON_CREATE_DATE")); update_date = new ALDateField(); update_date.setFieldName(ALLocalizationUtils .getl10n("FILEIO_LAST_MODIFIED")); // 会社情報 company_name = new ALStringField(); company_name.setFieldName(ALLocalizationUtils .getl10n("FILEIO_COMPANY_NAME")); company_name.setTrim(true); company_name_kana = new ALStringField(); company_name_kana.setFieldName(ALLocalizationUtils .getl10n("FILEIO_COMPANU_NAME_SPELL")); company_name_kana.setTrim(true); post_name = new FileIOStringField(); post_name.setFieldName(ALLocalizationUtils.getl10n("FILIIO_UNIT_NAME")); post_name.setTrim(true); comp_zipcode1 = new ALStringField(); comp_zipcode1.setFieldName(ALLocalizationUtils.getl10n("FILEIO_POST_CODE")); comp_zipcode1.setTrim(true); comp_zipcode2 = new ALStringField(); comp_zipcode2.setFieldName(ALLocalizationUtils.getl10n("FILEIO_POST_CODE")); comp_zipcode2.setTrim(true); comp_address = new FileIOStringField(); comp_address.setFieldName(ALLocalizationUtils.getl10n("FILEIO_ADDRESS")); comp_address.setTrim(true); comp_telephone1 = new ALStringField(); comp_telephone1.setFieldName(ALLocalizationUtils .getl10n("FILEIO_PHONE_NUMBER")); comp_telephone1.setTrim(true); comp_telephone2 = new ALStringField(); comp_telephone2.setFieldName(ALLocalizationUtils .getl10n("FILEIO_PHONE_NUMBER")); comp_telephone2.setTrim(true); comp_telephone3 = new ALStringField(); comp_telephone3.setFieldName(ALLocalizationUtils .getl10n("FILEIO_PHONE_NUMBER")); comp_telephone3.setTrim(true); comp_fax_number1 = new ALStringField(); comp_fax_number1.setFieldName(ALLocalizationUtils .getl10n("FILEIO_FAX_NUMBER")); comp_fax_number1.setTrim(true); comp_fax_number2 = new ALStringField(); comp_fax_number2.setFieldName(ALLocalizationUtils .getl10n("FILEIO_FAX_NUMBER")); comp_fax_number2.setTrim(true); comp_fax_number3 = new ALStringField(); comp_fax_number3.setFieldName(ALLocalizationUtils .getl10n("FILEIO_FAX_NUMBER")); comp_fax_number3.setTrim(true); comp_url = new FileIOStringField(); comp_url.setFieldName(ALLocalizationUtils.getl10n("FILEIO_URL")); comp_url.setTrim(true); telephone_full = new FileIOStringField(); telephone_full.setFieldName(ALLocalizationUtils .getl10n("FILEIO_PHONE_NUMBER")); telephone_full.setTrim(true); cellular_phone_full = new FileIOStringField(); cellular_phone_full.setFieldName(ALLocalizationUtils .getl10n("FILEIO_MOBILE_PHONE")); cellular_phone_full.setTrim(true); comp_zipcode_full = new FileIOStringField(); comp_zipcode_full.setFieldName(ALLocalizationUtils .getl10n("FILEIO_POST_CODE")); comp_zipcode_full.setTrim(true); comp_telephone_full = new FileIOStringField(); comp_telephone_full.setFieldName(ALLocalizationUtils .getl10n("FILEIO_PHONE_NUMBER")); comp_telephone_full.setTrim(true); comp_fax_number_full = new FileIOStringField(); comp_fax_number_full.setFieldName(ALLocalizationUtils .getl10n("FILEIO_FAX_NUMBER")); comp_fax_number_full.setTrim(true); // ユーザー名 username = new ALStringField(); username.setFieldName(ALLocalizationUtils.getl10n("FILEIO_USER_NAME")); username.setTrim(true); public_flag.setValue("T"); this.setTelephone(""); this.setCellularPhone(""); email.setValue(""); cellular_mail.setValue(""); company_name.setValue(""); company_name_kana.setValue(""); setCompZipcode(""); comp_address.setValue(""); comp_telephone_full.setValue(""); post_name.setValue(""); position_name.setValue(""); telephone1.setValue(""); telephone2.setValue(""); telephone3.setValue(""); telephone_full.setValue(""); comp_zipcode1.setValue(""); comp_zipcode2.setValue(""); comp_zipcode_full.setValue(""); cellular_phone1.setValue(""); cellular_phone2.setValue(""); cellular_phone3.setValue(""); cellular_phone_full.setValue(""); comp_telephone1.setValue(""); comp_telephone2.setValue(""); comp_telephone3.setValue(""); comp_telephone_full.setValue(""); comp_fax_number1.setValue(""); comp_fax_number2.setValue(""); comp_fax_number3.setValue(""); comp_fax_number_full.setValue(""); // 備考 note = new ALStringField(); note.setFieldName(ALLocalizationUtils .getl10n("ADDRESSBOOK_SETFIELDNAME_NOTE")); note.setTrim(true); note.setValue(""); setSameCompany(false); setIsCompanyOnly(false); } /** * 自分がオーナーのグループを取得する。 * * @param rundata * @param context */ public void loadGroupList(RunData rundata, Context context) { groupList = new ArrayList<AddressBookGroupResultData>(); try { SelectQuery<EipMAddressGroup> query = Database.query(EipMAddressGroup.class); Expression exp = ExpressionFactory.matchExp(EipMAddressGroup.OWNER_ID_PROPERTY, Integer .valueOf(ALEipUtils.getUserId(rundata))); query.setQualifier(exp); List<EipMAddressGroup> aList = query.fetchList(); int size = aList.size(); for (int i = 0; i < size; i++) { EipMAddressGroup record = aList.get(i); AddressBookGroupResultData rd = new AddressBookGroupResultData(); rd.initField(); rd.setGroupId(record.getGroupId().intValue()); rd.setGroupName(record.getGroupName()); groupList.add(rd); } } catch (Exception ex) { logger.error("fileio", ex); } } /** * 指定アドレスのグループを取得する。 * * @param rundata * @param context */ public void loadGroups(RunData rundata, Context context) { try { String addressid = ALEipUtils.getTemp(rundata, context, ALEipConstants.ENTITY_ID); if (addressid == null || "".equals(addressid)) { return; } SelectQuery<EipTAddressbookGroupMap> query = Database.query(EipTAddressbookGroupMap.class); Expression exp1 = ExpressionFactory.matchExp( EipTAddressbookGroupMap.EIP_TADDRESS_GROUP_PROPERTY + "." + EipMAddressGroup.OWNER_ID_PROPERTY, Integer.valueOf(ALEipUtils.getUserId(rundata))); query.setQualifier(exp1); Expression exp2 = ExpressionFactory.matchExp( EipTAddressbookGroupMap.ADDRESS_ID_PROPERTY, Integer.valueOf(addressid)); query.andQualifier(exp2); query.distinct(true); List<EipTAddressbookGroupMap> aList = query.fetchList(); int size = aList.size(); for (int i = 0; i < size; i++) { EipTAddressbookGroupMap record = aList.get(i); AddressBookGroupResultData rd = new AddressBookGroupResultData(); rd.initField(); rd.setGroupId(record.getEipTAddressGroup().getGroupId().intValue()); rd.setGroupName(record.getEipTAddressGroup().getGroupName()); groups.add(rd); } } catch (Exception ex) { logger.error("fileio", ex); } } public void loadCompanyList(RunData rundata, Context context) { companyList = new ArrayList<AddressBookCompanyResultData>(); try { SelectQuery<EipMAddressbookCompany> query = Database.query(EipMAddressbookCompany.class); List<EipMAddressbookCompany> aList = query.fetchList(); int size = aList.size(); for (int i = 0; i < size; i++) { EipMAddressbookCompany record = aList.get(i); AddressBookCompanyResultData rd = new AddressBookCompanyResultData(); rd.initField(); rd.setCompanyId(record.getCompanyId().intValue()); rd.setCompanyName(record.getCompanyName() + " " + record.getPostName()); companyList.add(rd); } } catch (Exception ex) { logger.error("fileio", ex); } } @Override protected void setValidator() { if (!is_company_only) { lastname.setNotNull(true); } lastname.limitMaxLength(50); if (!is_company_only) { firstname.setNotNull(true); } firstname.limitMaxLength(50); if (!is_company_only) { last_name_kana.setNotNull(true); } last_name_kana.limitMaxLength(50); if (!is_company_only) { first_name_kana.setNotNull(true); } first_name_kana.limitMaxLength(50); email.setCharacterType(ALStringField.TYPE_ASCII); email.limitMaxLength(50); // telephone.setCharacterType(ALStringField.TYPE_ASCII); // telephone.limitMaxLength(13); // 電話番号 telephone1.setCharacterType(ALStringField.TYPE_NUMBER); telephone1.limitMaxLength(5); telephone2.setCharacterType(ALStringField.TYPE_NUMBER); telephone2.limitMaxLength(4); telephone3.setCharacterType(ALStringField.TYPE_NUMBER); telephone3.limitMaxLength(4); // 携帯 cellular_phone1.setCharacterType(ALStringField.TYPE_NUMBER); cellular_phone1.limitMaxLength(5); cellular_phone2.setCharacterType(ALStringField.TYPE_NUMBER); cellular_phone2.limitMaxLength(4); cellular_phone3.setCharacterType(ALStringField.TYPE_NUMBER); cellular_phone3.limitMaxLength(4); cellular_mail.setCharacterType(ALStringField.TYPE_ASCII); cellular_mail.limitMaxLength(50); position_name.limitMaxLength(50); // 会社名 if (is_company_only) { company_name.setNotNull(true); } company_name.limitMaxLength(50); // 会社名カナ if (is_company_only) { company_name_kana.setNotNull(true); } company_name.limitMaxLength(50); // 部署名 post_name.limitMaxLength(50); // 会社郵便番号 comp_zipcode1.setCharacterType(ALStringField.TYPE_NUMBER); comp_zipcode1.limitLength(3, 3); comp_zipcode2.setCharacterType(ALStringField.TYPE_NUMBER); comp_zipcode2.limitLength(4, 4); // 会社住所 comp_address.limitMaxLength(50); // 会社電話番号 comp_telephone1.setCharacterType(ALStringField.TYPE_NUMBER); comp_telephone1.limitMaxLength(5); comp_telephone2.setCharacterType(ALStringField.TYPE_NUMBER); comp_telephone2.limitMaxLength(4); comp_telephone3.setCharacterType(ALStringField.TYPE_NUMBER); comp_telephone3.limitMaxLength(4); // 会社FAX番号 comp_fax_number1.setCharacterType(ALStringField.TYPE_NUMBER); comp_fax_number1.limitMaxLength(5); comp_fax_number2.setCharacterType(ALStringField.TYPE_NUMBER); comp_fax_number2.limitMaxLength(4); comp_fax_number3.setCharacterType(ALStringField.TYPE_NUMBER); comp_fax_number3.limitMaxLength(4); // 会社URL comp_url.setCharacterType(ALStringField.TYPE_ASCII); comp_url.limitMaxLength(90); // ユーザーID username.limitMaxLength(16); telephone_full.setCharacterType(ALStringField.TYPE_ASCII); telephone_full.limitMaxLength(15); cellular_phone_full.setCharacterType(ALStringField.TYPE_ASCII); cellular_phone_full.limitMaxLength(15); comp_telephone_full.setCharacterType(ALStringField.TYPE_ASCII); comp_telephone_full.limitMaxLength(15); comp_fax_number_full.setCharacterType(ALStringField.TYPE_ASCII); comp_fax_number_full.limitMaxLength(15); telephone1.setNotNull(true); telephone2.setNotNull(true); telephone3.setNotNull(true); comp_zipcode1.setNotNull(true); comp_zipcode2.setNotNull(true); cellular_phone1.setNotNull(true); cellular_phone2.setNotNull(true); cellular_phone3.setNotNull(true); comp_telephone1.setNotNull(true); comp_telephone2.setNotNull(true); comp_telephone3.setNotNull(true); comp_fax_number1.setNotNull(true); comp_fax_number2.setNotNull(true); comp_fax_number3.setNotNull(true); // 備考 note.limitMaxLength(1000); } @Override protected boolean validate(List<String> msgList) { List<String> dummy = new ArrayList<String>(); if (!lastname.validate(msgList)) { firstname.setValue(""); lastname.setValue(""); } if (!firstname.validate(msgList)) { firstname.setValue(""); lastname.setValue(""); } // フリガナのカタカナへの変換 last_name_kana.setValue(ALStringUtil.convertHiragana2Katakana(ALStringUtil .convertH2ZKana(last_name_kana.toString()))); first_name_kana.setValue(ALStringUtil.convertHiragana2Katakana(ALStringUtil .convertH2ZKana(first_name_kana.toString()))); if (!last_name_kana.validate(msgList)) { first_name_kana.setValue(""); last_name_kana.setValue(""); } if (!first_name_kana.validate(msgList)) { first_name_kana.setValue(""); last_name_kana.setValue(""); } if (email.getValue().trim().length() > 0 && !ALStringUtil.isMailAddress(email.getValue())) { msgList.add(ALLocalizationUtils.getl10n("FILEIO_MAILADDRESS_CAUTION")); email.setValidate(false); email.setValue(null); } // 電話 if (!telephone1.getValue().equals("") || !telephone2.getValue().equals("") || !telephone3.getValue().equals("")) { if (!telephone1.validate(dummy) || !telephone2.validate(dummy) || !telephone3.validate(dummy)) { msgList.add(ALLocalizationUtils.getl10n("FILEIO_PHONE_NUMBER_CAUTION")); telephone_full.setValidate(false); telephone_full.setValue(null); } else { telephone_full.setValue(new StringBuffer() .append(telephone1.getValue()) .append("-") .append(telephone2.getValue()) .append("-") .append(telephone3.getValue()) .toString()); } } // 携帯電話 if (!cellular_phone1.getValue().equals("") || !cellular_phone2.getValue().equals("") || !cellular_phone3.getValue().equals("")) { if (!cellular_phone1.validate(dummy) || !cellular_phone2.validate(dummy) || !cellular_phone3.validate(dummy)) { msgList.add(ALLocalizationUtils .getl10n("FILEIO_CELLPHONE_NUMBER_CAUTION2")); cellular_phone_full.setValidate(true); cellular_phone_full.setValue(null); } else { cellular_phone_full.setValue(new StringBuffer().append( cellular_phone1.getValue()).append("-").append( cellular_phone2.getValue()).append("-").append( cellular_phone3.getValue()).toString()); } } if (cellular_mail.getValue().trim().length() > 0 && !ALStringUtil.isCellPhoneMailAddress(cellular_mail.getValue())) { msgList.add(ALLocalizationUtils .getl10n("FILEIO_CELLPHONE_MAILADDRESS_CAUTION")); cellular_mail.setValidate(false); cellular_mail.setValue(null); } if (!position_name.validate(msgList)) { position_name.setValue(null); } if (!note.validate(msgList)) { note.setValue(null); } // 会社情報入力時用 // if (is_new_company) { if (!company_name.toString().equals("")) { EipMAddressbookCompany ecompany = getEipMCompany(); if (ecompany != null) { company_id.setValue(ecompany.getCompanyId()); if ((!company_name_kana.validate(msgList)) || (company_name_kana.toString().equals(""))) { company_name_kana.setValue(ecompany.getCompanyNameKana()); } if (is_company_only) { setSameCompany(true); } } else { if (!company_name.validate(msgList)) { company_name.setValue(null); msgList.add(ALLocalizationUtils .getl10n("FILEIO_COMPANY_NAME_CAUTION")); } // 会社名フリガナのカタカナへの変換 company_name_kana.setValue(ALStringUtil .convertHiragana2Katakana(ALStringUtil .convertH2ZKana(company_name_kana.toString()))); if (!company_name_kana.validate(dummy)) { company_name_kana.setValue(null); msgList.add(ALLocalizationUtils .getl10n("FILEIO_COMPANY_NAME_SPELL_CAUTION")); } if ((company_name.getValue() != null && company_name_kana.getValue() != null)) { if (!company_name.getValue().equals("") && company_name_kana.getValue().equals("")) { msgList.add(ALLocalizationUtils .getl10n("FILEIO_COMPANY_NAME_SPELL_CAUTION")); } } if (!post_name.validate(msgList)) { post_name.setValue(null); post_name.setValidate(false); msgList .add(ALLocalizationUtils.getl10n("FILEIO_POSTAL_CODE_CAUTION")); } if (!comp_zipcode1.getValue().equals("") || !comp_zipcode2.getValue().equals("")) { if (!comp_zipcode1.validate(dummy) || !comp_zipcode2.validate(dummy)) { msgList.add(ALLocalizationUtils .getl10n("FILEIO_POSTAL_CODE_CAUTION")); comp_zipcode_full.setValidate(false); comp_zipcode_full.setValue(null); } else { comp_zipcode_full.setValue(new StringBuffer().append( comp_zipcode1.getValue()).append("-").append( comp_zipcode2.getValue()).toString()); } } if (!comp_address.validate(msgList)) { comp_address.setValidate(false); comp_address.setValue(null); msgList.add(ALLocalizationUtils.getl10n("FILEIO_ADDRESS_CAUTION")); } if (!comp_telephone1.getValue().equals("") || !comp_telephone2.getValue().equals("") || !comp_telephone3.getValue().equals("")) { if (!comp_telephone1.validate(dummy) || !comp_telephone2.validate(dummy) || !comp_telephone3.validate(dummy)) { msgList.add(ALLocalizationUtils .getl10n("FILEIO_PHONE_NUMBER_CAUTION")); comp_telephone_full.setValidate(false); comp_telephone_full.setValue(null); } else { comp_telephone_full.setValue(new StringBuffer().append( comp_telephone1.getValue()).append("-").append( comp_telephone2.getValue()).append("-").append( comp_telephone3.getValue()).toString()); } } if (!comp_fax_number1.getValue().equals("") || !comp_fax_number2.getValue().equals("") || !comp_fax_number3.getValue().equals("")) { if (!comp_fax_number1.validate(dummy) || !comp_fax_number2.validate(dummy) || !comp_fax_number3.validate(dummy)) { msgList.add(ALLocalizationUtils .getl10n("FILEIO_FAX_NUMBER_CAUTION")); comp_fax_number_full.setValidate(false); comp_fax_number_full.setValue(null); } else { comp_fax_number_full.setValue(new StringBuffer().append( comp_fax_number1.getValue()).append("-").append( comp_fax_number2.getValue()).append("-").append( comp_fax_number3.getValue()).toString()); } } if (!comp_url.validate(msgList)) { comp_url.setValidate(false); comp_url.setValue(null); msgList.add(ALLocalizationUtils.getl10n("FILEIO_URL_CAUTION")); } } } if (getTurbineUser() == null) { setUserName(""); } return (msgList.size() == 0); } @Override protected boolean loadFormData(RunData rundata, Context context, List<String> msgList) { // try { // // オブジェクトモデルを取得 // EipMAddressbook address = AddressbookUtils.getEipMAddressbook(rundata, // context); // if (address == null) // return false; // // // 登録ユーザ名の設定 // ALEipUser createdUser = ALEipUtils.getALEipUser(address.getCreateUserId() // .intValue()); // String createdUserName = createdUser.getAliasName().getValue(); // create_user.setValue(createdUserName); // // // 更新ユーザ名の設定 // String updatedUserName; // if (address.getCreateUserId() == address.getUpdateUserId()) { // updatedUserName = createdUserName; // } else { // ALEipUser updatedUser = ALEipUtils.getALEipUser(address // .getUpdateUserId().intValue()); // updatedUserName = updatedUser.getAliasName().getValue(); // } // update_user.setValue(updatedUserName); // // group_names.setValue(AddressbookUtils.getMyGroupNamesAsString(rundata, // address.getAddressId().intValue(), ALEipUtils.getUserId(rundata))); // company_id.setValue(address.getCompanyId().longValue()); // // firstname.setValue(address.getFirstName()); // first_name_kana.setValue(address.getFirstNameKana()); // lastname.setValue(address.getLastName()); // last_name_kana.setValue(address.getLastNameKana()); // // email.setValue(address.getEmail()); // // telephone.setValue(address.getTelephone()); // // // 電話番号 // StringTokenizer token; // if (address.getTelephone() != null) { // token = new StringTokenizer(address.getTelephone(), "-"); // if (token.countTokens() == 3) { // telephone1.setValue(token.nextToken()); // telephone2.setValue(token.nextToken()); // telephone3.setValue(token.nextToken()); // } // } // // // 電話番号(携帯) // if (address.getCellularPhone() != null) { // token = new StringTokenizer(address.getCellularPhone(), "-"); // if (token.countTokens() == 3) { // cellular_phone1.setValue(token.nextToken()); // cellular_phone2.setValue(token.nextToken()); // cellular_phone3.setValue(token.nextToken()); // } // } // // cellular_mail.setValue(address.getCellularMail()); // position_name.setValue(address.getPositionName()); // public_flag.setValue(address.getPublicFlag()); // // create_date.setValue(address.getCreateDate()); // // create_user.setValue(address.getCreateUserId()e) // update_date.setValue(address.getUpdateDate()); // // } catch (Exception ex) { // logger.error("fileio", ex); // return false; // } // return true; return false; } /** * アドレス情報の登録を行います。 * */ @Override protected boolean insertFormData(RunData rundata, Context context, List<String> msgList) { // 作業ユーザIDの取得 ALEipUser user; int uid; boolean fullname, fullnamekana; try { user = ALEipUtils.getALEipUser(username.getValue()); if (user != null) { uid = (int) user.getUserId().getValue(); } else { uid = 1; } } catch (ALDBErrorException e) { // logger.error(e); // return false; uid = 1; user = null; } // int uid = ALEipUtils.getUserId(rundata); try { EipMAddressbookCompany ecompany; if (!company_name.toString().equals("")) { // 会社情報の登録処理 ecompany = getEipMCompany(); if (ecompany == null) { if (!insertCompanyData(rundata, context)) { } } else { if (!company_name_kana.toString().equals("")) { company_id.setValue(ecompany.getCompanyId()); } } } else { company_id.setValue(1); } if ((getFirstName().toString().equals("")) && (getLastName().toString().equals(""))) { fullname = false; } else { fullname = true; } if ((getFirstNameKana().toString().equals("")) && (getLastNameKana().toString().equals(""))) { fullnamekana = false; } else { fullnamekana = true; } if (!((fullname) && (fullnamekana))) { return true; } // アドレス情報の登録処理 EipMAddressbook address = Database.create(EipMAddressbook.class); // 個人情報の設定 address.setLastName(lastname.getValue()); address.setFirstName(firstname.getValue()); address.setLastNameKana(last_name_kana.getValue()); address.setFirstNameKana(first_name_kana.getValue()); address.setEmail(email.getValue()); // 電話 address.setTelephone(telephone_full.getValue()); // 携帯電話 address.setCellularPhone(cellular_phone_full.getValue()); address.setCellularMail(cellular_mail.getValue()); address.setPositionName(position_name.getValue()); // 会社の設定 if (company_id.getValue() > 0) { EipMAddressbookCompany company = Database.get(EipMAddressbookCompany.class, Integer .valueOf((int) company_id.getValue())); if (company.getCompanyId().intValue() > 0) { // CompanyID が存在する場合 address.setEipMAddressbookCompany(company); } } // 公開区分の設定 address.setPublicFlag(public_flag.getValue()); // 備考 address.setNote(note.getValue()); // オーナIDの設定 address.setOwnerId(Integer.valueOf(uid)); address.setCreateUserId(Integer.valueOf(uid)); address.setUpdateUserId(Integer.valueOf(uid)); Date now = new Date(); address.setCreateDate(now); address.setUpdateDate(now); Database.commit(); // Address-Groupマッピングテーブルへのデータ追加 Integer id = address.getAddressId(); for (int i = 0; i < groupModelList.size(); i++) { EipTAddressbookGroupMap map = Database.create(EipTAddressbookGroupMap.class); map.setAddressId(id); map.setEipTAddressGroup(groupModelList.get(i)); } Database.commit(); return true; } catch (Exception ex) { Database.rollback(); logger.error("fileio", ex); return false; } } @Override protected boolean deleteFormData(RunData rundata, Context context, List<String> msgList) { return false; } @Override protected boolean updateFormData(RunData rundata, Context context, List<String> msgList) { return false; } /** * フォームへデータをセットします。 * */ @Override protected boolean setFormData(RunData rundata, Context context, List<String> msgList) throws ALPageNotFoundException, ALDBErrorException { boolean res = super.setFormData(rundata, context, msgList); groupModelList = new ArrayList<EipMAddressGroup>(); if (res) { try { String str[] = rundata.getParameters().getStrings("group_to"); if (str == null) { return res; } if (isEmpty(str)) { return res; } SelectQuery<EipMAddressGroup> query = Database.query(EipMAddressGroup.class); Expression exp = ExpressionFactory.inDbExp(EipMAddressGroup.GROUP_ID_PK_COLUMN, str); query.setQualifier(exp); List<EipMAddressGroup> list = query.fetchList(); int size = list.size(); for (int i = 0; i < size; i++) { EipMAddressGroup group = list.get(i); groupModelList.add(group); } } catch (Exception ex) { logger.error("fileio", ex); } } return res; } /** * 文字列の配列が全て空白の場合にtrueを返します <BR> * * @param str * @return */ private boolean isEmpty(String str[]) { boolean res = true; for (int i = 0; i < str.length; i++) { if (str[i] != null && !"".equals(str[i])) { res = false; } } return res; } /** * 携帯メールアドレスを取得します <BR> * * @return */ public FileIOStringField getCellularMail() { return cellular_mail; } /** * 携帯電話番号を取得します <BR> * * @return */ public ALStringField getCellularPhone1() { return cellular_phone1; } public ALStringField getCellularPhone2() { return cellular_phone2; } public ALStringField getCellularPhone3() { return cellular_phone3; } /** * 会社IDを取得します <BR> * * @return */ public ALNumberField getCompanyId() { return company_id; } /** * メールアドレスを取得します <BR> * * @return */ public FileIOStringField getEmail() { return email; } /** * フリガナ(名)を取得します <BR> * * @return */ public ALStringField getFirstNameKana() { return first_name_kana; } /** * 名前(名)を取得します <BR> * * @return */ public ALStringField getFirstName() { return firstname; } /** * フリガナ(氏)を取得します <BR> * * @return */ public ALStringField getLastNameKana() { return last_name_kana; } /** * 名前(氏)を取得します <BR> * * @return */ public ALStringField getLastName() { return lastname; } /** * 備考を取得します <BR> * * @return */ public ALStringField getNote() { return note; } /** * 部署名を取得します <BR> * * @return */ public ALStringField getPositionName() { return position_name; } /** * 公開フラグを取得します <BR> * * @return */ public ALStringField getPublicFlag() { return public_flag; } /** * 電話番号(フィールド1)を取得します <BR> * * @return */ public ALStringField getTelephone1() { return telephone1; } /** * 電話番号(フィールド2)を取得します <BR> * * @return */ public ALStringField getTelephone2() { return telephone2; } /** * 電話番号(フィールド3)を取得します <BR> * * @return */ public ALStringField getTelephone3() { return telephone3; } /** * 入力日時を取得します <BR> * * @return */ public ALDateField getCreateDate() { return create_date; } /** * 更新日時を取得します <BR> * * @return */ public ALDateField getUpdateDate() { return update_date; } /** * 入力ユーザー名を取得します <BR> * * @return */ public ALStringField getCreateUser() { return create_user; } /** * 所有グループのリストを取得します <BR> * * @return */ public List<AddressBookGroupResultData> getGroupList() { return groupList; } /** * 会社リストを取得します <BR> * * @return */ public List<AddressBookCompanyResultData> getCompanyList() { return companyList; } /** * 更新ユーザー名を取得します <BR> * * @return */ public ALStringField getUpdateUser() { return update_user; } /** * グループオブジェクトを取得します <BR> * * @return */ public List<AddressBookGroupResultData> getGroups() { return groups; } /** * @return */ public ALStringField getGroupNames() { return group_names; } /** * 携帯電話アドレスを入力します <BR> * * @param field */ public void setCellularMail(FileIOStringField field) { cellular_mail = field; } /** * 会社IDを入力します <BR> * * @param field */ public void setCompanyId(ALNumberField field) { company_id = field; } /** * メールアドレスを入力します <BR> * * @param field */ public void setEmail(FileIOStringField field) { email = field; } /** * フリガナ(名)を入力します <BR> * * @param field */ public void setFirstNameKana(ALStringField field) { first_name_kana = field; } /** * 名前(名)を入力します <BR> * * @param field */ public void setFirstName(ALStringField field) { firstname = field; } /** * フリガナ(氏)を入力します <BR> * * @param field */ public void setLastNameKana(ALStringField field) { last_name_kana = field; } /** * 名前(氏)を入力します <BR> * * @param field */ public void setLastName(ALStringField field) { lastname = field; } /** * 備考を入力します <BR> * * @param field */ public void setNote(ALStringField field) { note = field; } /** * 部署名を入力します <BR> * * @param field */ public void setPositionName(ALStringField field) { position_name = field; } /** * 公開フラグを入力します <BR> * * @param field */ public void setPublicFlag(ALStringField field) { public_flag = field; } /** * 入力日時を入力します <BR> * * @param field */ public void setCreateDate(ALDateField field) { create_date = field; } /** * 更新日時を入力します <BR> * * @param field */ public void setUpdateDate(ALDateField field) { update_date = field; } /** * @param field */ public void setGroupNames(ALStringField field) { group_names = field; } /** 会社情報 */ /** * 会社名を取得します <BR> */ public ALStringField getCompanyName() { return company_name; } /** * フリガナ(会社名)を取得します <BR> * * @return */ public ALStringField getCompanyNameKana() { return company_name_kana; } /** * 部署名を取得します <BR> * * @return */ public ALStringField getPostName() { return post_name; } /** * 郵便番号(フィールド1)を取得します <BR> * * @return */ public ALStringField getCompZipcode1() { return comp_zipcode1; } /** * 郵便番号(フィールド2)を取得します <BR> * * @return */ public ALStringField getCompZipcode2() { return comp_zipcode2; } /** * 会社住所を取得します <BR> * * @return */ public FileIOStringField getCompAddress() { return comp_address; } /** * 会社電話番号(フィールド1)を取得します <BR> * * @return */ public ALStringField getCompTelephone1() { return comp_telephone1; } /** * 会社電話番号(フィールド2)を取得します <BR> * * @return */ public ALStringField getCompTelephone2() { return comp_telephone2; } /** * 会社電話番号(フィールド3)を取得します <BR> * * @return */ public ALStringField getCompTelephone3() { return comp_telephone3; } /** * 会社FAX番号(フィールド1)を取得します <BR> * * @return */ public ALStringField getCompFaxNumber1() { return comp_fax_number1; } /** * 会社FAX番号(フィールド2)を取得します <BR> * * @return */ public ALStringField getCompFaxNumber2() { return comp_fax_number2; } /** * 会社FAX番号(フィールド3)を取得します <BR> * * @return */ public ALStringField getCompFaxNumber3() { return comp_fax_number3; } /** * 会社URLを取得します <BR> * * @return */ public FileIOStringField getCompUrl() { return comp_url; } /** * 会社情報一括登録を行うかを示す値を返す。 * * @return */ public boolean isNewCompany() { return is_new_company; } // *************************************************************************** // privateメソッド // *************************************************************************** /** * 会社情報を登録します。 */ private boolean insertCompanyData(RunData rundata, Context context) { ALEipUser user; int uid; try { user = ALEipUtils.getALEipUser(username.getValue()); if (user != null) { uid = (int) user.getUserId().getValue(); } else { uid = 1; } } catch (ALDBErrorException e) { uid = 1; user = null; } // int uid = ALEipUtils.getUserId(rundata); try { EipMAddressbookCompany company = Database.create(EipMAddressbookCompany.class); rundata.getParameters().setProperties(company); company.setCompanyName(company_name.getValue()); company.setCompanyNameKana(company_name_kana.getValue()); company.setPostName(post_name.getValue()); // 郵便番号の設定 company.setZipcode(comp_zipcode_full.getValue()); // 住所の設定 company.setAddress(comp_address.getValue()); // 電話番号の設定 company.setTelephone(comp_telephone_full.getValue()); // FAX番号の設定 company.setFaxNumber(comp_fax_number_full.getValue()); company.setUrl(comp_url.getValue()); company.setCreateUserId(Integer.valueOf(uid)); company.setUpdateUserId(Integer.valueOf(uid)); Date now = new Date(); company.setCreateDate(now); company.setUpdateDate(now); Database.commit(); // 会社IDの設定 company_id.setValue(company.getCompanyId().longValue()); } catch (Exception ex) { Database.rollback(); logger.debug("AddressBookFormData insertFormData out / false"); logger.error("fileio", ex); return false; } return true; } /** * 入力ユーザー名を取得します。(通常は管理者) <BR> * * @return */ public ALStringField getUserName() { return username; } /** * 電話番号を取得します <BR> * * @return */ public FileIOStringField getTelephone() { return telephone_full; } /** * 携帯電話番号を取得します <BR> * * @return */ public FileIOStringField getCellularPhone() { return cellular_phone_full; } /** * 会社の郵便番号を取得します <BR> * * @return */ public FileIOStringField getCompZipcode() { return comp_zipcode_full; } /** * 会社の電話番号を取得します <BR> * * @return */ public FileIOStringField getCompTelephone() { return comp_telephone_full; } /** * 会社のFAX番号を取得します <BR> * * @return */ public FileIOStringField getCompFaxNumber() { return comp_fax_number_full; } /** * 同じ会社名がデータベースに存在するかどうかを取得します <BR> * * @return */ public boolean getSameCompany() { return same_company; } /** * 電話番号を入力します <BR> * * @param str */ public void setTelephone(String str) { telephone_full.setValue(str); } /** * 携帯電話番号を入力します <BR> * * @param str */ public void setCellularPhone(String str) { cellular_phone_full.setValue(str); } /** * 郵便番号を入力します <BR> * * @param str */ public void setCompZipcode(String str) { comp_zipcode_full.setValue(str); } /** * 電話番号(会社)を入力します <BR> * * @param str */ public void setCompTelephone(String str) { comp_telephone_full.setValue(str); } /** * FAX番号(会社)を入力します <BR> * * @param str */ public void setCompFaxNumber(String str) { comp_fax_number_full.setValue(str); } /** * 入力ユーザー名を入力します。(通常は管理者) <BR> * * @param str */ public void setUserName(String str) { username.setValue(str); } /** * 同じ会社名がデータベースに存在するかどうか示すフラグを入力します <BR> * * @param flg */ public void setSameCompany(boolean flg) { same_company = flg; } /** * 会社情報のみ入力する場合はtrueを設定します <BR> * * @param flag */ public void setIsCompanyOnly(boolean flag) { is_company_only = flag; } /** * 読み取った単語を指定されたフィールドに格納します。 <BR> * * @param token * @param i */ public void addItemToken(String token, int i) { StringTokenizer st; switch (i) { case -1: break; case 0: st = new StringTokenizer(token); if (st.hasMoreTokens()) { lastname.setValue(st.nextToken()); } if (st.hasMoreTokens()) { firstname.setValue(st.nextToken()); } break; case 1: st = new StringTokenizer(token); if (st.hasMoreTokens()) { last_name_kana.setValue(st.nextToken()); } if (st.hasMoreTokens()) { first_name_kana.setValue(st.nextToken()); } break; case 2: st = new StringTokenizer(token, "-"); if (st.hasMoreTokens()) { telephone1.setValue(st.nextToken()); } if (st.hasMoreTokens()) { telephone2.setValue(st.nextToken()); } if (st.hasMoreTokens()) { telephone3.setValue(st.nextToken()); } break; case 3: st = new StringTokenizer(token, "-"); if (st.hasMoreTokens()) { cellular_phone1.setValue(st.nextToken()); } if (st.hasMoreTokens()) { cellular_phone2.setValue(st.nextToken()); } if (st.hasMoreTokens()) { cellular_phone3.setValue(st.nextToken()); } break; case 4: email.setValue(token); break; case 5: cellular_mail.setValue(token); break; case 6: company_name.setValue(token); break; case 7: company_name_kana.setValue(token); break; case 8: st = new StringTokenizer(token, "-"); if (st.hasMoreTokens()) { comp_zipcode1.setValue(st.nextToken()); } if (st.hasMoreTokens()) { comp_zipcode2.setValue(st.nextToken()); } break; case 9: comp_address.setValue(token); break; case 10: st = new StringTokenizer(token, "-"); if (st.hasMoreTokens()) { comp_telephone1.setValue(st.nextToken()); } if (st.hasMoreTokens()) { comp_telephone2.setValue(st.nextToken()); } if (st.hasMoreTokens()) { comp_telephone3.setValue(st.nextToken()); } break; case 11: st = new StringTokenizer(token, "-"); if (st.hasMoreTokens()) { comp_fax_number1.setValue(st.nextToken()); } if (st.hasMoreTokens()) { comp_fax_number2.setValue(st.nextToken()); } if (st.hasMoreTokens()) { comp_fax_number3.setValue(st.nextToken()); } break; case 12: post_name.setValue(token); break; case 13: position_name.setValue(token); break; case 14: username.setValue(token); break; case 15: lastname.setValue(token); break; case 16: firstname.setValue(token); break; case 17: last_name_kana.setValue(token); break; case 18: first_name_kana.setValue(token); break; case 19: comp_url.setValue(token); break; case 20: note.setValue(token); break; default: break; } } /** * ユーザー名からユーザーIDを取得 <BR> * * @return */ private TurbineUser getTurbineUser() { SelectQuery<TurbineUser> query = Database.query(TurbineUser.class); Expression exp = ExpressionFactory.matchExp(TurbineUser.LOGIN_NAME_PROPERTY, username); query.setQualifier(exp); List<TurbineUser> users = query.fetchList(); if (users == null || users.size() == 0) { // 指定したUser IDのレコードが見つからない場合 logger.debug("[FileIOAddressBookCsvFormData] Not found ID..."); return null; } TurbineUser tuser = users.get(0); return tuser; } /** * 会社名から会社IDを取得 <BR> * * @return */ private EipMAddressbookCompany getEipMCompany() { SelectQuery<EipMAddressbookCompany> query = Database.query(EipMAddressbookCompany.class); Expression exp = ExpressionFactory.matchExp( EipMAddressbookCompany.COMPANY_NAME_PROPERTY, company_name); query.setQualifier(exp); List<EipMAddressbookCompany> users = query.fetchList(); if (users == null || users.size() == 0) { // 指定したUser IDのレコードが見つからない場合 logger.debug("[FileIOAddressBookCsvFormData] Not found ID..."); return null; } EipMAddressbookCompany com; int i; for (i = 0; i < users.size(); i++) { com = users.get(i); if (com.getPostName().equals(post_name.toString())) { return com; } } return null; } }