/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.vlabs.umt.ui.tags;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.TagSupport;
import cn.vlabs.umt.common.util.CommonUtils;
import cn.vlabs.umt.domain.UMTLog;
import cn.vlabs.umt.services.account.IAccountService;
import cn.vlabs.umt.services.session.SessionUtils;
import cn.vlabs.umt.services.user.UserService;
import cn.vlabs.umt.services.user.bean.LoginNameInfo;
import cn.vlabs.umt.services.user.bean.User;
import cn.vlabs.umt.services.user.service.IAppAccessService;
import cn.vlabs.umt.services.user.service.IUserLoginNameService;
import cn.vlabs.umt.services.user.utils.ServiceFactory;
import cn.vlabs.umt.ui.Attributes;
import cn.vlabs.umt.ui.UMTContext;
/**
* 刷新session里的用户信息,也就是去数据库查一遍
* @author lvly
* @since 2013-02-04
* */
public class RefreshUserTag extends TagSupport {
public int doStartTag() throws JspException {
HttpServletRequest request=(HttpServletRequest)pageContext.getRequest();
int uid=SessionUtils.getUserId(request);
User user=getUserService(request).getUserByUid(uid);
if(user!=null){
UMTContext.getLoginInfo(request.getSession()).setUser(user);
SessionUtils.setSessionVar(request,Attributes.USER_TEMP_SECURITY_EMAIL, getUserService(request).getTempSecurityEmail(user.getId()));
SessionUtils.setSessionVar(request,Attributes.IS_USER_LOGIN_ACTIVE, getUserService(request).isActivePrimaryEmail(user.getCstnetId()));
IUserLoginNameService loginNameService=ServiceFactory.getLoginNameService(request);
LoginNameInfo primary=CommonUtils.first(loginNameService.getLoginNameInfo(uid, LoginNameInfo.LOGINNAME_TYPE_PRIMARY));
SessionUtils.setSessionVar(request, Attributes.USER_PRIMARY_EMAIL,primary);
List<LoginNameInfo> secondaryEmails=loginNameService.getLoginNameInfo(uid, LoginNameInfo.LOGINNAME_TYPE_SECONDARY);
SessionUtils.setSessionVar(request, Attributes.USER_SECONDARY_EMAIL,secondaryEmails);
LoginNameInfo ldapName=CommonUtils.first(loginNameService.getLoginNameInfo(uid, LoginNameInfo.LOGINNAME_TYPE_LDAP));
SessionUtils.setSessionVar(request,Attributes.USER_LDAP_NAME,ldapName);
SessionUtils.setSessionVar(request, Attributes.MY_APP_LIST, getAccessService(request).getMyAppAccesses(user.getId()));
request.setAttribute("canUseLoginName", canUsedLoginName(primary,secondaryEmails,ldapName));
//the last login log
UMTLog last=getAccountService(request).getLastLogByEventType(uid,UMTLog.EVENT_TYPE_LOG_IN);
request.setAttribute("lastLog",last);
request.setAttribute("warnLog", getWarnLog(uid, request));
}
return EVAL_BODY_INCLUDE;
}
private UMTLog getWarnLog(int uid,HttpServletRequest request){
List<UMTLog> logs=getAccountService(request).getTopTenLogByEventType(uid, UMTLog.EVENT_TYPE_LOG_IN);
if(CommonUtils.isNull(logs)){
return null;
}
for(UMTLog log:logs){
if(log.isSendWarnEmail()){
return log;
}
}
return null;
}
private List<LoginNameInfo> canUsedLoginName(LoginNameInfo primary,List<LoginNameInfo> nameInfo,LoginNameInfo ldapName){
List<LoginNameInfo> lnis=new ArrayList<LoginNameInfo>();
if(primary!=null){
lnis.add(primary);
}
if(!CommonUtils.isNull(nameInfo)){
for(LoginNameInfo n:nameInfo){
if(n.getStatus().equals(LoginNameInfo.STATUS_ACTIVE)){
lnis.add(n);
}
}
}
if(ldapName!=null){
lnis.add(ldapName);
}
if(lnis.size()==0){
return null;
}
return lnis;
}
private IAccountService getAccountService(HttpServletRequest request){
return ServiceFactory.getAccountService(request);
}
private IAppAccessService getAccessService(HttpServletRequest request){
return ServiceFactory.getAppAccessService(request);
}
private UserService getUserService(HttpServletRequest request){
return ServiceFactory.getUserService(request);
}
private static final long serialVersionUID = 145678765434567L;
}