// ========================================================================
// Copyright (C) zeroth Project Team. All rights reserved.
// GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007
// http://www.gnu.org/licenses/agpl-3.0.txt
// ========================================================================
package zeroth.actor.screen.iface.jsf.session;
import java.io.Serializable;
import java.util.Date;
import java.util.Map;
import java.util.logging.Logger;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.SessionScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.inject.Named;
import zeroth.actor.service.app.ApplicationAnnotation.MemberApplicationCDI;
import zeroth.actor.service.app.actor.MemberApplication;
import zeroth.actor.service.domain.ActorFilterFactory;
import zeroth.actor.service.domain.Member;
import zeroth.actor.service.domain.MemberFilter;
import zeroth.framework.screen.iface.jsf.FacesHelper;
/**
* 訪問者アクション
* @author nilcy
*/
@Named("visitorAction")
@SessionScoped
// @ServletSecurity(value = @HttpConstraint(rolesAllowed = { SPONSOR, DIRECTOR,
// CREATOR, EDITOR,
// AUDITOR, READER }))
public class VisitorAction implements Serializable {
/** 製品番号 */
private static final long serialVersionUID = -6272066593466089850L;
/** 社員 */
private Member member;
/** ログイン日時 */
private Date loggedInDate;
/** 社員アプリケーション */
@Inject
@MemberApplicationCDI
private MemberApplication memberApplication;
/** 会話 */
@Inject
private Conversation conversation;
/** ロガー */
// @Inject
// private Logger log;
private static Logger log = Logger.getGlobal();
/** コンストラクタ */
public VisitorAction() {
}
/**
* ログイン有無の確認
* @return ログイン有無
*/
@SuppressWarnings("static-method")
public boolean isLoggedIn() {
// log.info("getUserPrincipal = " + FacesHelper.getExternalContext().getUserPrincipal());
return FacesHelper.getExternalContext().getUserPrincipal() != null;
}
/**
* {@link #member} の取得
* @return {@link #member}
*/
public Member getMember() {
if ((member == null) && isLoggedIn()) {
final String account = FacesHelper.getExternalContext().getRemoteUser();
log.info("account = " + account);
final MemberFilter filter = ActorFilterFactory.createMemberFilter(account);
log.info("filter = " + filter);
member = memberApplication.findOne(filter);
log.info("member = " + member);
loggedInDate = new Date();
// InfraHelper.addSuccessBundleMessage("LoggedIn");
// InfraHelper.keepMessage();
} else if (!isLoggedIn()) {
member = null;
loggedInDate = null;
}
return member;
}
/**
* {@link #loggedInDate} の取得
* @return {@link #loggedInDate}
*/
public Date getLoggedInDate() {
return loggedInDate;
}
/**
* ロール保有の確認ん
* @param role ロール
* @return ロール保有
*/
@SuppressWarnings("static-method")
public boolean hasRole(final String role) {
return FacesHelper.getExternalContext().isUserInRole(role);
}
/**
* スタックトレースの取得
* @return スタックトレース
*/
@SuppressWarnings("static-method")
public String getStackTrace() {
final FacesContext context = FacesContext.getCurrentInstance();
final Map<String, Object> map = context.getExternalContext().getRequestMap();
final Throwable throwable = (Throwable) map.get("javax.servlet.error.exception");
final StringBuilder builder = new StringBuilder();
final String lf = "<br/>";
builder.append(throwable.getMessage()).append(lf);
for (final StackTraceElement element : throwable.getStackTrace()) {
builder.append(element).append(lf);
}
return builder.toString();
}
/**
* {@link #conversation} の取得
* @return {@link #conversation}
*/
public Conversation getConversation() {
return conversation;
}
}