/*
* 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.Arrays;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.cayenne.exp.Expression;
import org.apache.cayenne.exp.ExpressionFactory;
import org.apache.jetspeed.services.JetspeedSecurity;
import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.jetspeed.services.resources.JetspeedResources;
import org.apache.turbine.services.TurbineServices;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;
import com.aimluck.commons.field.ALNumberField;
import com.aimluck.commons.field.ALStringField;
import com.aimluck.commons.utils.ALStringUtil;
import com.aimluck.eip.account.util.AccountUtils;
import com.aimluck.eip.cayenne.om.account.EipMPosition;
import com.aimluck.eip.cayenne.om.account.EipMPost;
import com.aimluck.eip.cayenne.om.portlet.EipTExtTimecardSystem;
import com.aimluck.eip.cayenne.om.portlet.EipTExtTimecardSystemMap;
import com.aimluck.eip.cayenne.om.security.TurbineGroup;
import com.aimluck.eip.cayenne.om.security.TurbineUser;
import com.aimluck.eip.cayenne.om.security.TurbineUserGroupRole;
import com.aimluck.eip.common.ALAbstractFormData;
import com.aimluck.eip.common.ALBaseUser;
import com.aimluck.eip.common.ALDBErrorException;
import com.aimluck.eip.common.ALPageNotFoundException;
import com.aimluck.eip.orm.Database;
import com.aimluck.eip.orm.query.SelectQuery;
import com.aimluck.eip.services.accessctl.ALAccessControlFactoryService;
import com.aimluck.eip.services.accessctl.ALAccessControlHandler;
import com.aimluck.eip.services.datasync.ALDataSyncFactoryService;
import com.aimluck.eip.util.ALEipUtils;
import com.aimluck.eip.util.ALLocalizationUtils;
/**
* 『アカウント』のフォームデータを管理するクラスです。 <BR>
*
*/
public class FileIOAccountCsvFormData extends ALAbstractFormData {
/** logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(FileIOAccountCsvFormData.class.getName());
/** ブラウザに表示するデフォルトのパスワード(ダミーパスワード) */
public static final String DEFAULT_VIEW_PASSWORD = "*";
/** ユーザー名 */
private ALStringField username;
/** パスワード */
private ALStringField password;
/** 名前(名) */
private ALStringField firstname;
/** 名前(姓) */
private ALStringField lastname;
/** フリガナ(名) */
private ALStringField first_name_kana;
/** フリガナ(姓) */
private ALStringField last_name_kana;
/** メールアドレス */
private ALStringField email;
/** 電話番号(内線) */
private ALStringField in_telephone;
/** 電話番号(外線) */
private ALStringField out_telephone;
/** 電話番号(携帯) */
private ALStringField cellular_phone;
/** 携帯メールアドレス */
private ALStringField cellular_mail;
/** 部署名 */
private ALStringField post_name;
/** 部署リスト */
private List<String> post_name_list;
/** 役職 */
private ALStringField position_name;
/** 社員コード */
private ALStringField code;
/** 部署がデータベースに存在するか否か */
private boolean post_not_found;
/** 役職がデータベースに存在するか否か */
private boolean position_not_found;
private boolean isSkipUsernameValidation = false;
/**
* 各フィールドを初期化します。 <BR>
*
*
*/
@Override
public void initField() {
// ユーザー名
username = new ALStringField();
username.setFieldName(ALLocalizationUtils.getl10n("FILEIO_USER_NAME"));
username.setTrim(true);
// パスワード
password = new ALStringField();
password.setFieldName(ALLocalizationUtils.getl10n("FILEIO_PASSWORD"));
password.setTrim(true);
// 名
firstname = new ALStringField();
firstname.setFieldName(ALLocalizationUtils.getl10n("FILEIO_LAST_NAME"));
firstname.setTrim(true);
// 姓
lastname = new ALStringField();
lastname.setFieldName(ALLocalizationUtils.getl10n("FILEIO_FIRST_NAME"));
lastname.setTrim(true);
// メールアドレス
email = new ALStringField();
email.setFieldName(ALLocalizationUtils.getl10n("FILEIO_MAILADDRESS"));
email.setTrim(true);
// 内線番号
in_telephone = new ALStringField();
in_telephone.setFieldName(ALLocalizationUtils
.getl10n("FILEIO_EXTENTION_TELL_NUMBER"));
in_telephone.setTrim(true);
// 外線番号
out_telephone = new ALStringField();
out_telephone.setFieldName(ALLocalizationUtils
.getl10n("FILEIO_OUTSIDE_TELL_NUMBER"));
out_telephone.setTrim(true);
// 携帯番号
cellular_phone = new ALStringField();
cellular_phone.setFieldName(ALLocalizationUtils
.getl10n("FILEIO_MOBILE_PHONE"));
cellular_phone.setTrim(true);
// 携帯アドレス
cellular_mail = new ALStringField();
cellular_mail.setFieldName(ALLocalizationUtils
.getl10n("FILEIO_MOBILE_PHONE_ADDRESS"));
cellular_mail.setTrim(true);
// 名(フリガナ)
first_name_kana = new ALStringField();
first_name_kana.setFieldName(ALLocalizationUtils
.getl10n("FILEIO_NAME_SPELL"));
first_name_kana.setTrim(true);
// 姓(フリガナ)
last_name_kana = new ALStringField();
last_name_kana.setFieldName(ALLocalizationUtils
.getl10n("FILEIO_NAME_SPELL"));
last_name_kana.setTrim(true);
// 部署名
post_name_list = new ArrayList<String>();
post_name = new ALStringField();
post_name.setFieldName(ALLocalizationUtils.getl10n("FILIIO_UNIT_NAME"));
post_name.setTrim(true);
// 役職
position_name = new ALStringField();
position_name.setFieldName(ALLocalizationUtils.getl10n("FILEIO_POST"));
position_name.setTrim(true);
// 社員コード
code = new ALStringField();
code.setFieldName(ALLocalizationUtils.getl10n("FILEIO_CODE"));
code.setTrim(true);
setPostNotFound(false);
setPositionNotFound(false);
}
/**
* 各フィールドに対する制約条件を設定します。 <BR>
*
*
*/
@Override
protected void setValidator() {
// ユーザー名
username.setNotNull(true);
username.setCharacterType(ALStringField.TYPE_ASCII);
username.limitMaxLength(16);
// パスワード
password.setNotNull(true);
password.setCharacterType(ALStringField.TYPE_ASCII);
password.limitMaxLength(16);
// 名
firstname.setNotNull(true);
firstname.limitMaxLength(20);
// 姓
lastname.setNotNull(true);
lastname.limitMaxLength(20);
// 名(フリガナ)
first_name_kana.setNotNull(true);
first_name_kana.limitMaxLength(20);
// 姓(フリガナ)
last_name_kana.setNotNull(true);
last_name_kana.limitMaxLength(20);
// 内線
in_telephone.setCharacterType(ALStringField.TYPE_ASCII);
in_telephone.limitMaxLength(15);
// メールアドレス
email.setCharacterType(ALStringField.TYPE_ASCII);
email.limitMaxLength(50);
// 外線
out_telephone.setCharacterType(ALStringField.TYPE_NUMBER);
out_telephone.limitMaxLength(15);
// 携帯
cellular_phone.setCharacterType(ALStringField.TYPE_NUMBER);
cellular_phone.limitMaxLength(15);
// 携帯メール
cellular_mail.setCharacterType(ALStringField.TYPE_ASCII);
cellular_mail.limitMaxLength(50);
// 部署名
post_name.limitMaxLength(50);
// 役職
position_name.limitMaxLength(50);
// 社員コード
code.limitMaxLength(100);
}
/**
* フォームに入力されたデータの妥当性検証を行います。 <BR>
*
* @param msgList
* @return
*
*/
@Override
protected boolean validate(List<String> msgList) {
if (!isSkipUsernameValidation) {
String usernamestr = username.getValue();
if (usernamestr == null
|| "admin".equals(usernamestr)
|| "template".equals(usernamestr)
|| "anon".equals(usernamestr)
|| usernamestr.startsWith(ALEipUtils.dummy_user_head)
|| !username.validate(msgList)) {
msgList.add(ALLocalizationUtils.getl10n("FILEIO_USER_NAME_CAUTION"));
username.setValue(null);
}
if (usernamestr != null
&& !AccountUtils.isValidSymbolUserName(usernamestr)) {
StringBuffer msg =
new StringBuffer(ALLocalizationUtils.getl10n("FILEIO_USER_NAME_MARK"));
List<String> symbols = Arrays.asList(AccountUtils.USER_NAME_SYMBOLS);
for (String symbol : symbols) {
msg.append("『").append(symbol).append("』");
}
msg.append(ALLocalizationUtils.getl10n("FILEIO_ONLY"));
msgList.add(msg.toString());
username.setValue(null);
}
// if (usernameList.contains(usernamestr)) {
// username.setValue(null);
// msgList.add("<span class='em'>同じユーザー名は複数登録できません</span>");
// } else {
// usernameList.add(usernamestr);
// }
Map<String, TurbineUser> existedUserMap = getAllUsersFromDB();
if (existedUserMap == null) {
existedUserMap = new LinkedHashMap<String, TurbineUser>();
}
if (existedUserMap.containsKey(usernamestr)) {
TurbineUser tmpuser2 = existedUserMap.get(usernamestr);
if (!("F".equals(tmpuser2.getDisabled()))) {
msgList.add(ALLocalizationUtils
.getl10n("FILEIO_NOT_MULTIPLE_REGISTRATION"));
username.setValue(null);
}
}
}
// パスワードの確認
if (!password.getValue().equals(DEFAULT_VIEW_PASSWORD)) {
if (!password.validate(msgList)) {
password.setValue(null);
}
}
if (!firstname.validate(msgList)) {
firstname.setValue(null);
lastname.setValue(null);
}
if (!lastname.validate(msgList)) {
firstname.setValue(null);
lastname.setValue(null);
}
// フリガナのカタカナへの変換
first_name_kana.setValue(ALStringUtil.convertHiragana2Katakana(ALStringUtil
.convertH2ZKana(first_name_kana.toString())));
last_name_kana.setValue(ALStringUtil.convertHiragana2Katakana(ALStringUtil
.convertH2ZKana(last_name_kana.toString())));
if (!first_name_kana.validate(msgList)) {
first_name_kana.setValue(null);
last_name_kana.setValue(null);
}
if (!last_name_kana.validate(msgList)) {
first_name_kana.setValue(null);
last_name_kana.setValue(null);
}
// メールアドレス
if (email.getValue() != null && !email.getValue().equals("")) {
if (!email.validate(msgList)
|| (email.getValue() != null && email.getValue().trim().length() > 0 && !ALStringUtil
.isMailAddress(email.getValue()))) {
email.setValue(null);
msgList.add(ALLocalizationUtils.getl10n("FILEIO_MAILADDRESS_CAUTION"));
}
} else {
email.setValue("");
}
ALNumberField tel = new ALNumberField();
List<String> errmsg = new ArrayList<String>();
boolean isNumber = true;
if (out_telephone.getValue() != null
&& !out_telephone.getValue().equals("")) {
String[] out_tels = out_telephone.getValue().split("-");
if (out_tels.length == 3) {
for (int i = 0; i < 3; i++) {
tel.setValue(out_tels[i]);
isNumber = isNumber & tel.validate(errmsg);
}
if (!isNumber
|| out_tels[0].length() > 5
|| out_tels[1].length() > 4
|| out_tels[2].length() > 4) {
out_telephone.setValue(null);
msgList.add(ALLocalizationUtils
.getl10n("FILEIO_PHONE_NUMBER_CAUTION"));
}
} else {
out_telephone.setValue(null);
msgList.add(ALLocalizationUtils.getl10n("FILEIO_PHONE_NUMBER_CAUTION"));
}
} else {
out_telephone.setValue("");
}
if (!in_telephone.validate(msgList)) {
in_telephone.setValue(null);
} else if (in_telephone.getValue() != null
&& !in_telephone.getValue().equals("")) {
Pattern ptn = Pattern.compile("[-0-9]+");/* 半角数字とハイフンのみの文字列ならマッチ */
Matcher mc = ptn.matcher(in_telephone.getValue().toString());
if (!mc.matches()) {
in_telephone.setValue(null);
msgList.add(ALLocalizationUtils
.getl10n("FILEIO_EXTENTION_NUMBER_CAUTION"));
}
} else {
in_telephone.setValue("");
}
isNumber = true;
if (cellular_phone.getValue() != null
&& !cellular_phone.getValue().equals("")) {
String[] cell_tels = cellular_phone.getValue().split("-");
if (cell_tels.length == 3) {
for (int i = 0; i < 3; i++) {
tel.setValue(cell_tels[i]);
isNumber = isNumber & tel.validate(errmsg);
}
if (!isNumber
|| cell_tels[0].length() > 5
|| cell_tels[1].length() > 4
|| cell_tels[2].length() > 4) {
cellular_phone.setValue(null);
msgList.add(ALLocalizationUtils
.getl10n("FILEIO_CELLPHONE_NUMBER_CAUTION"));
}
} else {
cellular_phone.setValue(null);
msgList.add(ALLocalizationUtils
.getl10n("FILEIO_CELLPHONE_NUMBER_CAUTION"));
}
} else {
cellular_phone.setValue("");
}
// 携帯メールアドレス
if (cellular_mail.getValue() != null
&& !cellular_mail.getValue().equals("")) {
if (!cellular_mail.validate(msgList)) {
cellular_mail.setValue(null);
msgList.add(ALLocalizationUtils
.getl10n("FILEIO_CELLPHONE_MAILADDRESS_CAUTION"));
} else if (cellular_mail.getValue().trim().length() > 0
&& !ALStringUtil.isCellPhoneMailAddress(cellular_mail.getValue())) {
cellular_mail.setValue(null);
msgList.add(ALLocalizationUtils
.getl10n("FILEIO_CELLPHONE_MAILADDRESS_CAUTION"));
}
} else {
cellular_mail.setValue("");
}
if (post_name.getValue() != null && !post_name.getValue().equals("")) {
// ArrayList postnames = new ArrayList();
String[] st = post_name.toString().split("[/、]");
List<String> postCollection = new ArrayList<String>();
for (int k = 0; k < st.length; k++) {
ALStringField post = new ALStringField(st[k]);
if (!postCollection.contains(post.toString())) {
postCollection.add(post.toString());
}
if (post.validate(msgList)) {
if ((!st[k].equals("")) && (getEipMPost(post) == null)) {
setPostNotFound(true);
msgList.add(ALLocalizationUtils.getl10n("FILEIO_NO_POST"));
}
} else {
msgList.add(ALLocalizationUtils.getl10n("FILEIO_NO_POST_NAME"));
post_name.setValue(null);
break;
}
}
if (!post_name.toString().equals("") && post_name.toString() != null) {
StringBuffer sb = new StringBuffer();
for (int k = 0; k < postCollection.size(); k++) {
if (k != 0) {
sb.append("/");
}
sb.append(postCollection.get(k));
}
post_name.setValue(sb.toString());
}
} else {
post_name.setValue("");
}
if (position_name.getValue() != null
&& !position_name.getValue().equals("")) {
if (!position_name.validate(msgList)) {
position_name.setValue(null);
msgList.add(ALLocalizationUtils.getl10n("FILEIO_NO_POSITION_CAUTION"));
} else if ((!position_name.toString().equals(""))
&& (getEipMPosition() == null)) {
setPositionNotFound(true);
msgList.add(ALLocalizationUtils.getl10n("FILEIO_NO_POSITION"));
}
} else {
position_name.setValue("");
}
if (!code.validate(msgList)) {
code.setValue(null);
}
return (msgList.size() == 0);
}
@Override
protected boolean setFormData(RunData rundata, Context context,
List<String> msgList) throws ALPageNotFoundException, ALDBErrorException {
return super.setFormData(rundata, context, msgList);
}
/**
* 『ユーザー』を読み込みます。 <BR>
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean loadFormData(RunData rundata, Context context,
List<String> msgList) {
return false;
}
/**
* 『ユーザー』を追加します。 <BR>
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean insertFormData(RunData rundata, Context context,
List<String> msgList) {
// WebAPIのDBへ接続できるか確認
if (!ALDataSyncFactoryService
.getInstance()
.getDataSyncHandler()
.checkConnect()) {
msgList.add(ALLocalizationUtils.getl10n("FILEIO_FAILED"));
return false;
}
boolean res = true;
try {
Date now = new Date();
boolean isNewUser = false;
ALBaseUser user = null;
try {
user = (ALBaseUser) JetspeedSecurity.getUser(getUserName().getValue());
// ユーザー名
user.setUserName(JetspeedSecurity.convertUserName(username.getValue()));
if (!password.getValue().equals(DEFAULT_VIEW_PASSWORD)) {
JetspeedSecurity.forcePassword(user, password.getValue());
}
isNewUser = false;
} catch (Exception e) {
// オブジェクトモデルを生成
user = (ALBaseUser) JetspeedSecurity.getUserInstance();
rundata.getParameters().setProperties(user);
// ユーザー名
user.setUserName(JetspeedSecurity.convertUserName(getUserName()
.getValue()));
// JetspeedSecurity.forcePassword(user, password.getValue());
user.setPassword(password.getValue());
isNewUser = true;
user.setCreated(now);
user.setLastLogin(now);
}
// 作成日
// 以下のメソッドは動作しないため、ALBaseUserにてオーバーライド
// user.setCreateDate(now);
// JetspeedSecurity.forcePassword(user, password.getValue());
user.setModified(now);
user.setCreatedUserId(ALEipUtils.getUserId(rundata));
user.setUpdatedUserId(ALEipUtils.getUserId(rundata));
user.setConfirmed(JetspeedResources.CONFIRM_VALUE);
user.setDisabled("F");
// user.setPassword(password.getValue());
user.setInTelephone(in_telephone.getValue());
user.setOutTelephone(out_telephone.getValue());
user.setCellularPhone(cellular_phone.getValue());
user.setCellularMail(cellular_mail.getValue());
user.setCompanyId(1);
user.setPositionId(0);
user.setPostId(0);
user.setFirstName(getFirstName().getValue());
user.setLastName(getLastName().getValue());
user.setFirstNameKana(first_name_kana.getValue());
user.setLastNameKana(last_name_kana.getValue());
user.setEmail(getEmail().getValue());
user.setMigrateVersion(0);
user.setCode(code.getValue());
if (!position_name.getValue().equals("")) {
EipMPosition position = getEipMPosition();
if (position != null) {
user.setPositionId(position.getPositionId());
}
}
if (!isNewUser) {
// ユーザーを既にいる部署から削除
SelectQuery<TurbineUserGroupRole> query2 =
Database.query(TurbineUserGroupRole.class);
Expression exp2 =
ExpressionFactory.matchExp(
TurbineUserGroupRole.TURBINE_USER_PROPERTY,
user.getUserId());
Expression exp3 =
ExpressionFactory.noMatchExp(
TurbineUserGroupRole.TURBINE_GROUP_PROPERTY,
Integer.valueOf(1));
Expression exp4 =
ExpressionFactory.noMatchExp(
TurbineUserGroupRole.TURBINE_GROUP_PROPERTY,
Integer.valueOf(2));
query2.setQualifier(exp2);
query2.andQualifier(exp3.andExp(exp4));
List<TurbineUserGroupRole> list = query2.fetchList();
TurbineUserGroupRole ugr = null;
for (int i = 0; i < list.size(); i++) {
ugr = list.get(i);
if (isPost(ugr.getTurbineGroup().getGroupName())) {
Database.delete(ugr);
}
}
// ユーザーを部署に追加
if (!post_name.toString().equals("") && post_name.toString() != null) {
String[] postnames = post_name.toString().split("/");
for (int i = 0; i < postnames.length; i++) {
SelectQuery<TurbineGroup> query =
Database.query(TurbineGroup.class);
Expression exp =
ExpressionFactory.matchExp(
TurbineGroup.GROUP_ALIAS_NAME_PROPERTY,
postnames[i]);
query.setQualifier(exp);
List<TurbineGroup> alist = query.fetchList();
JetspeedSecurity.joinGroup(user.getUserName(), (alist.get(0))
.getName());
}
}
// ユーザーを更新
JetspeedSecurity.saveUser(user);
} else {
int postid = 0;
EipMPost post = getEipMPost(post_name);
if (post != null) {
postid = post.getPostId();
user.setPostId(postid);
}
// ユーザーを追加
JetspeedSecurity.addUser(user);
// // 部署Mapを取得
// Map map = ALEipManager.getInstance().getPostMap();
// int size = map.size();
// if (map != null && size != 0 && postid >= 1) {
// // グループへユーザを登録
// JetspeedSecurity.joinGroup(user.getUserName(),
// ((ALEipPost) ALEipManager.getInstance().getPostMap().get(
// Integer.valueOf(postid))).getGroupName().getValue());
// }
// // ログインユーザーにはグループ LoginUser に所属させる
// JetspeedSecurity.joinGroup(user.getUserName(), "LoginUser");
// logger.debug("JOIN GROUP:" + "LoginUser");
// ユーザーをグループに追加。
if (!post_name.toString().equals("") && post_name.toString() != null) {
String[] postnames = post_name.toString().split("/");
for (int i = 0; i < postnames.length; i++) {
SelectQuery<TurbineGroup> query =
Database.query(TurbineGroup.class);
Expression exp =
ExpressionFactory.matchExp(
TurbineGroup.GROUP_ALIAS_NAME_PROPERTY,
postnames[i]);
query.setQualifier(exp);
List<TurbineGroup> alist = query.fetchList();
JetspeedSecurity.joinGroup(user.getUserName(), (alist.get(0))
.getName());
}
}
// // ユーザの順番を登録する.
// StringBuffer statement = new StringBuffer();
// statement.append("INSERT INTO eip_m_user_position ");
// statement.append("(USER_ID, POSITION) VALUES (");
// statement.append(user.getUserId());
// statement
// .append(", (SELECT COALESCE(MAX(EIP_M_USER_POSITION.POSITION),0)+1");
// statement.append(" FROM EIP_M_USER_POSITION))");
// String query = statement.toString();
// orm.executeStatement(query);
// 初期メールアカウントの作成
// if (email.getValue() != null && (!email.getValue().equals(""))) {
// ALMailUtils.insertMailAccountData(rundata, msgList, Integer
// .parseInt(user.getUserId()), "初期アカウント",
// ALMailUtils.ACCOUNT_TYPE_INIT, email.getValue(), "未設定", "未設定",
// 25, "未設定", 110, "未設定", "未設定", ALSmtpMailSender.AUTH_SEND_NONE,
// null, null, ALPop3MailReceiver.AUTH_RECEIVE_NORMAL, 0, 0, 1, "0");
// }
// ACLの登録
int userid = Integer.parseInt(user.getUserId());
// アクセス権限
ALAccessControlFactoryService aclservice =
(ALAccessControlFactoryService) ((TurbineServices) TurbineServices
.getInstance())
.getService(ALAccessControlFactoryService.SERVICE_NAME);
ALAccessControlHandler aclhandler =
aclservice.getAccessControlHandler();
aclhandler.insertDefaultRole(userid);
// 勤務形態
EipTExtTimecardSystem system =
Database.get(EipTExtTimecardSystem.class, 1);
if (system != null) {
EipTExtTimecardSystemMap rd = new EipTExtTimecardSystemMap();
rd.setEipTExtTimecardSystem(system);
int user_id = Integer.parseInt(user.getUserId());
rd.setUserId(user_id);
rd.setCreateDate(now);
rd.setUpdateDate(now);
}
Database.commit();
}
// WebAPIとのDB同期
if (!ALDataSyncFactoryService.getInstance().getDataSyncHandler().addUser(
user)) {
return false;
}
} catch (Exception e) {
Database.rollback();
logger.error("fileio", e);
res = false;
}
return res;
}
/**
* 『ユーザー』を更新します。 <BR>
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean updateFormData(RunData rundata, Context context,
List<String> msgList) {
return false;
}
/**
* 『ユーザー』を削除します。 <BR>
*
* @param rundata
* @param context
* @param msgList
* @return
*/
@Override
protected boolean deleteFormData(RunData rundata, Context context,
List<String> msgList) {
return false;
}
/**
* 携帯メールアドレスを取得します。 <BR>
*
* @return
*/
public ALStringField getCellularMail() {
return cellular_mail;
}
/**
* メールアドレスを取得します。 <BR>
*
* @return
*/
public ALStringField getEmail() {
return email;
}
/**
* フリガナ(名)を取得します。 <BR>
*
* @return
*/
public ALStringField getFirstNameKana() {
return first_name_kana;
}
/**
* 名前(名)を取得します。 <BR>
*
* @return
*/
public ALStringField getFirstName() {
return firstname;
}
/**
* 電話番号(内線)を取得します。 <BR>
*
* @return
*/
public ALStringField getInTelephone() {
return in_telephone;
}
/**
* フリガナ(姓)を取得します。 <BR>
*
* @return
*/
public ALStringField getLastNameKana() {
return last_name_kana;
}
/**
* 名前(姓)を取得します。 <BR>
*
* @return
*/
public ALStringField getLastName() {
return lastname;
}
/**
* 携帯電話番号を取得します。 <BR>
*
* @return
*/
public ALStringField getCellularPhone() {
return cellular_phone;
}
/**
* 電話番号を取得します。 <BR>
*
* @return
*/
public ALStringField getOutTelephone() {
return out_telephone;
}
/**
* パスワードを取得します。 <BR>
*
* @return
*/
public ALStringField getPassword() {
return password;
}
/**
* ユーザー名を取得します。 <BR>
*
* @return
*/
public ALStringField getUserName() {
return username;
}
/**
* 部署名を取得します <BR>
*
* @return
*/
public ALStringField getPostName() {
return post_name;
}
public List<String> getPostNameList() {
return post_name_list;
}
/**
* 役職名を取得します <BR>
*
* @return
*/
public ALStringField getPositionName() {
return position_name;
}
/**
* 社員コードを取得します <BR>
*
* @return
*/
public ALStringField getCode() {
return code;
}
/**
* 部署がデータベースに存在するかを示すフラグを取得します <BR>
*
* @return
*/
public boolean getPostNotFound() {
return post_not_found;
}
/**
* 役職がデータベースに存在するかを示すフラグを取得します <BR>
*
* @return
*/
public boolean getPositionNotFound() {
return position_not_found;
}
/**
* 携帯メールアドレスを入力します <BR>
*
* @param str
*/
public void setCellularMail(String str) {
cellular_mail.setValue(str);
}
/**
* メールアドレスを入力します <BR>
*
* @param str
*/
public void setEmail(String str) {
email.setValue(str);
}
/**
* フリガナ(名)を入力します <BR>
*
* @param str
*/
public void setFirstNameKana(String str) {
first_name_kana.setValue(str);
}
/**
* 名前(名)を入力します <BR>
*
* @param str
*/
public void setFirstName(String str) {
firstname.setValue(str);
}
/**
* フリガナ(氏)を入力します <BR>
*
* @param str
*/
public void setLastNameKana(String str) {
last_name_kana.setValue(str);
}
/**
* 名前(氏)を入力します <BR>
*
* @param str
*/
public void setLastName(String str) {
lastname.setValue(str);
}
/**
* 携帯電話番号を入力します <BR>
*
* @param str
*/
public void setCellularPhone(String str) {
cellular_phone.setValue(str);
}
/**
* パスワードを入力します <BR>
*
* @param str
*/
public void setPassword(String str) {
password.setValue(str);
}
/**
* ユーザー名を入力します <BR>
*
* @param str
*/
public void setUserName(String str) {
username.setValue(str);
}
/**
* 部署名を入力します <BR>
*
* @param str
*/
public void setPostName(String str) {
post_name.setValue(str);
}
public void setPostNameList(List<String> list) {
post_name_list.addAll(list);
}
/**
* 役職名を入力します <BR>
*
* @param str
*/
public void setPositionName(String str) {
position_name.setValue(str);
}
/**
* 社員コードを入力します <BR>
*
* @param str
*/
public void setCode(String str) {
code.setValue(str);
}
/**
* 電話番号を入力します(部署) <BR>
*
* @param str
*/
public void setOutTelephone(String str) {
out_telephone.setValue(str);
}
/**
* 内線番号を入力します(部署) <BR>
*
* @param str
*/
public void setInTelephone(String str) {
in_telephone.setValue(str);
}
/**
* 部署がデータベースに存在するかを示すフラグを入力します <BR>
*
* @param flg
*/
public void setPostNotFound(boolean flg) {
post_not_found = flg;
}
/**
* 役職がデータベースに存在するかを示すフラグを入力します <BR>
*
* @param flg
*/
public void setPositionNotFound(boolean flg) {
position_not_found = flg;
}
/**
* 部署名から部署IDを取得 <BR>
*
* @return
*/
private EipMPost getEipMPost(ALStringField post_name) {
SelectQuery<EipMPost> query = Database.query(EipMPost.class);
Expression exp =
ExpressionFactory.matchExp(EipMPost.POST_NAME_PROPERTY, post_name);
query.setQualifier(exp);
List<EipMPost> list = query.fetchList();
if (list == null || list.size() == 0) {
return null;
}
EipMPost post = list.get(0);
return post;
}
/**
* Myグループが部署かどうか判定 <BR>
*
* @return
*/
private boolean isPost(String group_name) {
SelectQuery<EipMPost> query = Database.query(EipMPost.class);
ALStringField group_name_field = new ALStringField(group_name);
Expression exp =
ExpressionFactory
.matchExp(EipMPost.GROUP_NAME_PROPERTY, group_name_field);
query.setQualifier(exp);
if (query.getCount() == 0) {
return false;
} else {
return true;
}
}
/**
* 役職名から役職IDを取得 <BR>
*
* @return
*/
private EipMPosition getEipMPosition() {
SelectQuery<EipMPosition> query = Database.query(EipMPosition.class);
Expression exp =
ExpressionFactory.matchExp(
EipMPosition.POSITION_NAME_PROPERTY,
position_name);
query.setQualifier(exp);
List<EipMPosition> list = query.fetchList();
if (list == null || list.size() == 0) {
return null;
}
EipMPosition position = list.get(0);
return position;
}
/**
* 読み取った単語を指定されたフィールドに格納します。 <BR>
*
* @param token
* @param i
*/
public void addItemToken(String token, int i) {
switch (i) {
case -1:
break;
case 0:
try {
setUserName(token);
} catch (Exception e) {
logger.error(e);
}
break;
case 1:
setPassword(token);
break;
case 2:
setLastName(token);
break;
case 3:
setFirstName(token);
break;
case 4:
setLastNameKana(token);
break;
case 5:
setFirstNameKana(token);
break;
case 6:
setEmail(token);
break;
case 7:
setOutTelephone(token);
break;
case 8:
setInTelephone(token);
break;
case 9:
setCellularPhone(token);
break;
case 10:
setCellularMail(token);
break;
case 11:
setPostName(token);
break;
case 12:
setPositionName(token);
break;
case 13:
setCode(token);
break;
default:
break;
}
}
/**
*
* @return
*/
private Map<String, TurbineUser> getAllUsersFromDB() {
Map<String, TurbineUser> map = null;
try {
SelectQuery<TurbineUser> query = Database.query(TurbineUser.class);
List<TurbineUser> list = query.fetchList();
map = new LinkedHashMap<String, TurbineUser>();
TurbineUser user = null;
int size = list.size();
for (int i = 0; i < size; i++) {
user = list.get(i);
map.put(user.getLoginName(), user);
}
} catch (Exception ex) {
logger.error("[ALEipUtils]", ex);
// throw new ALDBErrorException();
}
return map;
}
public boolean isSkipUsernameValidation() {
return isSkipUsernameValidation;
}
public void setSkipUsernameValidation(boolean isSkipUsernameValidation) {
this.isSkipUsernameValidation = isSkipUsernameValidation;
}
}