/*
* UserInfo.java
*
* Created on 27 Декабрь 2007 г., 3:03
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package cli_fmw.login;
import cli_fmw.ContextParamsHolder;
import cli_fmw.ContextParamsHolder.ContextParams;
import cli_fmw.delegate.collaborator.CollaboratorLocalAbstract;
import cli_fmw.main.UserPanel;
import cli_fmw.main.ClipsException;
import cli_fmw.delegate.collaborator.GUIConfig;
import cli_fmw.delegate.directory.ro.DirectoryCollaboratorItemAbstract;
import framework.beans.security.LoginRemoteAbstarct;
import framework.beans.security.SessionSecurityDetails;
import framework.generic.ESecurity;
import java.util.Set;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import framework.security.SecurityChecker;
import framework.security.UserRight;
/**
* Класс - дескриптор текущего пользователя.
* На основе данных пользователя будет корректироваться интерфейс.
* @param <COLLDELEGATE>
* @author Axe Ilshat
*/
public abstract class UserInfoAbstract<COLLDELEGATE extends CollaboratorLocalAbstract<?,?,?>> {
protected static UserInfoAbstract instance = null;
private COLLDELEGATE collaborator;
protected SessionSecurityDetails securityData;
/**
* GUI config
*/
boolean showTextInToolbar;
/** Creates a new instance of UserInfo
* @param securityData
* @param collaborator
*/
protected UserInfoAbstract(SessionSecurityDetails securityData, COLLDELEGATE collaborator) {
this.securityData = securityData;
this.collaborator = collaborator;
instance = this;
}
public static UserInfoAbstract get() {
return instance;
}
public int getSessionId() {
return securityData.sessionId;
}
/**
* Возвращает Ф.И.О. пользователя
* @return String
* @throws ClipsException
*/
public String getUserName() throws ClipsException {
return getCollaborator().getTitle();
}
public boolean isSuperUser() {
return securityData.isSuperUser;
}
/**
* Проверяет, есть ли определенное право у сотрудника
* @param right
* @return
*/
public boolean check(UserRight right) {
return SecurityChecker.hasRight(securityData.currentUserRights, right.id);
}
public abstract DirectoryCollaboratorItemAbstract getCollaborator() throws ClipsException;
/**
* Получение конфигурации ГУИ для пользователя
* @return конфигурация
*/
static GUIConfig defaultConfig = GUIConfig.getDefaultCongig();
public final GUIConfig getGuiConfig() {
try {
return collaborator.getGuiConfig();
} catch (ClipsException ex) {
return defaultConfig;
}
}
/**
* Назначает конфигурацию ГУИ для позльзователя
* @param config конфигурация
* @throws ClipsException
*/
public void setGuiConfig(GUIConfig config) throws ClipsException {
collaborator.saveGuiConfig(config);
collaborator.save1();
}
/**
* Возвращает список доступных панелей
* @return
* @throws ClipsException
*/
public Set<UserPanel> getPanels() throws ClipsException {
Set<UserPanel> panels = collaborator.getPanels();
return panels;
}
public COLLDELEGATE getCollaboratorLocal() {
return collaborator;
}
/**
* Возможно ли выбирать скрытые(удаленные) элементы справочников
* На данном этапе совпадает с правом суперюзера
* @return
*/
public boolean canUseHiddenDirectoryItems() {
return isSuperUser();
}
public void disturbServer() throws ESecurity {
try {
getLoginBean().disturbServer(securityData.sessionId);
// System.out.println("Я напомнил серверу, что я ещё активен.");
} catch (Throwable ex) {
// DO NOTHING - проглотим, ситуация маловероятная, а если и появится можно жить дальше
}
}
public void logout() throws ClipsException {
try {
instance = null;
getLoginBean().logout(securityData.sessionId);
} catch (Exception ex) {
throw new ClipsException("Logout failed", ex);
}
}
protected static SessionSecurityDetails tryLogin(Object aCollaboratorID, char[] aPassword) throws Exception {
if (get() != null) {
throw new ClipsException("Внутренняя ошибка: попытка зарегистрировать сессию во второй раз.");
}
LoginRemoteAbstarct loginBean = getLoginBean();
int sessId = loginBean.login(aCollaboratorID,
loginBean.getEncryptor().encryptPasswd(aPassword));
return loginBean.getSessionRemote(sessId);
}
protected static LoginRemoteAbstarct getLoginBean() throws NamingException {
ContextParams contextParams = ContextParamsHolder.getContextParams();
InitialContext ic = null;
if (contextParams != null){
ic = new InitialContext(contextParams.getParams());
}else{
ic = new InitialContext();
}
return (LoginRemoteAbstarct) ic.lookup("clips-beans/" + "LoginBean");
}
}