package fi.otavanopisto.muikku.plugins.forum; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ejb.Stateful; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.inject.Named; import org.ocpsoft.rewrite.annotation.Join; import org.ocpsoft.rewrite.annotation.RequestAction; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import fi.otavanopisto.muikku.jsf.NavigationRules; import fi.otavanopisto.muikku.plugins.forum.model.EnvironmentForumArea; import fi.otavanopisto.muikku.session.SessionController; import fi.otavanopisto.security.LoggedIn; @Named @Stateful @RequestScoped @Join (path = "/discussion", to = "/jsf/discussion/index.jsf") @LoggedIn public class DiscussionBackingBean { @Inject private SessionController sessionController; @Inject private ForumController forumController; @RequestAction public String init() { if (!sessionController.hasEnvironmentPermission(ForumResourcePermissionCollection.FORUM_ACCESSENVIRONMENTFORUM)) { return NavigationRules.ACCESS_DENIED; } List<EnvironmentForumArea> forumAreas = forumController.listEnvironmentForums(); lockStickyPermission = sessionController.hasEnvironmentPermission(ForumResourcePermissionCollection.FORUM_LOCK_OR_STICKIFY_MESSAGES); showFullNamePermission = sessionController.hasEnvironmentPermission(ForumResourcePermissionCollection.FORUM_SHOW_FULL_NAMES); Map<Long, AreaPermission> areaPermissions = new HashMap<>(); for (EnvironmentForumArea forumArea : forumAreas) { AreaPermission areaPermission = new AreaPermission( sessionController.hasPermission(ForumResourcePermissionCollection.FORUM_EDIT_ENVIRONMENT_MESSAGES, forumArea), sessionController.hasPermission(ForumResourcePermissionCollection.FORUM_DELETE_ENVIRONMENT_MESSAGES, forumArea)); areaPermissions.put(forumArea.getId(), areaPermission ); } try { this.areaPermissions = new ObjectMapper().writeValueAsString(areaPermissions); } catch (JsonProcessingException e) { return NavigationRules.INTERNAL_ERROR; } return null; } public Boolean getLockStickyPermission() { return lockStickyPermission; } public Boolean getShowFullNamePermission() { return showFullNamePermission; } public String getAreaPermissions() { return areaPermissions; } private String areaPermissions; private Boolean lockStickyPermission; private Boolean showFullNamePermission; public static class AreaPermission { public AreaPermission(Boolean editMessages, Boolean removeThread) { this.editMessages = editMessages; this.removeThread = removeThread; } public Boolean getRemoveThread() { return removeThread; } public Boolean getEditMessages() { return editMessages; } private final Boolean editMessages; private final Boolean removeThread; } }