package fi.otavanopisto.muikku.session;
import java.util.Locale;
import javax.annotation.PostConstruct;
import javax.ejb.Stateful;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
import fi.otavanopisto.muikku.controller.SystemSettingsController;
import fi.otavanopisto.muikku.i18n.LocaleController;
import fi.otavanopisto.muikku.model.users.EnvironmentRoleArchetype;
import fi.otavanopisto.muikku.model.users.EnvironmentUser;
import fi.otavanopisto.muikku.model.users.UserEntity;
import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity;
import fi.otavanopisto.muikku.plugins.workspace.WorkspaceBackingBean;
import fi.otavanopisto.muikku.schooldata.WorkspaceEntityController;
import fi.otavanopisto.muikku.schooldata.entity.User;
import fi.otavanopisto.muikku.users.EnvironmentUserController;
import fi.otavanopisto.muikku.users.UserController;
@RequestScoped
@Named
@Stateful
public class SessionBackingBean {
@Inject
private EnvironmentUserController environmentUserController;
@Inject
private SessionController sessionController;
@Inject
private LocaleController localeController;
@Inject
private UserController userController;
@Inject
private WorkspaceEntityController workspaceEntityController;
@Inject
private SystemSettingsController systemSettingsController;
@Inject
private WorkspaceBackingBean workspaceBackingBean;
@PostConstruct
public void init() {
loggedUserRoleArchetype = null;
loggedUserName = null;
testsRunning = StringUtils.equals("true", System.getProperty("tests.running"));
bugsnagApiKey = systemSettingsController.getSetting("bugsnagApiKey");
bugsnagEnabled = StringUtils.isNotBlank(bugsnagApiKey);
loggedUserId = null;
loggedUser = null;
if (sessionController.isLoggedIn()) {
UserEntity loggedUser = sessionController.getLoggedUserEntity();
if (loggedUser != null) {
String activeSchoolDataSource = sessionController.getLoggedUserSchoolDataSource();
String activeUserIdentifier = sessionController.getLoggedUserIdentifier();
EnvironmentUser environmentUser = environmentUserController.findEnvironmentUserByUserEntity(loggedUser);
if ((environmentUser != null) && (environmentUser.getRole() != null)) {
loggedUserRoleArchetype = environmentUser.getRole().getArchetype();
}
User user = userController.findUserByDataSourceAndIdentifier(activeSchoolDataSource, activeUserIdentifier);
if (user != null) {
if (!loggedUserRoleArchetype.equals(EnvironmentRoleArchetype.STUDENT)) {
loggedUserName = String.format("%s %s (%s)", user.getFirstName(), user.getLastName(), resolveLoggedUserRoleText());
}
else if (user.getNickName() != null) {
loggedUserName = String.format("%s %s (%s)", user.getNickName(), user.getLastName(), user.getStudyProgrammeName());
}
else {
loggedUserName = user.getDisplayName();
}
}
}
this.loggedUserId = sessionController.getLoggedUserEntity().getId();
this.loggedUser = sessionController.getLoggedUser().toId();
}
}
public boolean getLoggedIn() {
return sessionController.isLoggedIn();
}
public boolean getIsStudent() {
return loggedUserRoleArchetype != null && loggedUserRoleArchetype.equals(EnvironmentRoleArchetype.STUDENT);
}
public Long getLoggedUserId() {
return loggedUserId;
}
public String getLoggedUser() {
return loggedUser;
}
public String getResourceLibrary() {
return "theme-muikku";
}
public boolean hasEnvironmentPermission(String permissions) {
if (StringUtils.isBlank(permissions)) {
return false;
}
for (String permission : StringUtils.split(permissions, ',')) {
if (sessionController.hasEnvironmentPermission(permission)) {
return true;
}
}
return false;
}
public boolean hasWorkspacePermission(String permissions) {
if (StringUtils.isBlank(permissions)) {
return false;
}
WorkspaceEntity workspaceEntity = workspaceBackingBean.getWorkspaceEntity();
for (String permission : StringUtils.split(permissions, ',')) {
if (hasWorkspacePermission(permission, workspaceEntity)) {
return true;
}
}
return false;
}
public boolean hasWorkspacePermission(String permission, Long workspaceEntityId) {
WorkspaceEntity workspaceEntity = workspaceEntityId != null ? workspaceEntityController.findWorkspaceEntityById(workspaceEntityId) : null;
return hasWorkspacePermission(permission, workspaceEntity);
}
private boolean hasWorkspacePermission(String permission, WorkspaceEntity workspaceEntity) {
return sessionController.hasWorkspacePermission(permission, workspaceEntity);
}
public String getLoggedUserName() {
return loggedUserName;
}
public Locale getLocale() {
return localeController.resolveLocale(sessionController.getLocale());
}
public String getCurrentCountry() {
return sessionController.getLocale().getCountry();
}
public boolean getTestsRunning() {
return testsRunning;
}
public String getBugsnagApiKey() {
return bugsnagApiKey;
}
public boolean getBugsnagEnabled() {
return bugsnagEnabled;
}
private String resolveLoggedUserRoleText() {
Locale locale = localeController.resolveLocale(sessionController.getLocale());
switch (loggedUserRoleArchetype) {
case ADMINISTRATOR:
return localeController.getText(locale, "role.administrator");
case MANAGER:
return localeController.getText(locale, "role.manager");
case STUDENT:
return localeController.getText(locale, "role.student");
case STUDY_PROGRAMME_LEADER:
return localeController.getText(locale, "role.studyProgrammeLeader");
case TEACHER:
return localeController.getText(locale, "role.teacher");
case STUDY_GUIDER:
return localeController.getText(locale, "role.studyguider");
default:
return localeController.getText(locale, "role.custom");
}
}
private String loggedUser;
private Long loggedUserId;
private EnvironmentRoleArchetype loggedUserRoleArchetype;
private String loggedUserName;
private boolean testsRunning;
private String bugsnagApiKey;
private boolean bugsnagEnabled;
}