package fi.otavanopisto.muikku.plugins.workspace; import java.util.HashMap; import java.util.Map; import javax.ejb.Stateful; import javax.enterprise.context.RequestScoped; import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.lang3.StringUtils; import org.ocpsoft.rewrite.annotation.Join; import org.ocpsoft.rewrite.annotation.Parameter; 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.model.workspace.WorkspaceEntity; import fi.otavanopisto.muikku.plugins.forum.ForumController; import fi.otavanopisto.muikku.plugins.forum.ForumResourcePermissionCollection; import fi.otavanopisto.muikku.plugins.forum.model.WorkspaceForumArea; import fi.otavanopisto.muikku.schooldata.WorkspaceController; import fi.otavanopisto.muikku.session.SessionController; import fi.otavanopisto.security.LoggedIn; @Named @Stateful @RequestScoped @Join (path = "/workspace/{workspaceUrlName}/discussions", to = "/jsf/workspace/discussions.jsf") @LoggedIn public class WorkspaceDiscussionsBackingBean extends AbstractWorkspaceBackingBean { @Parameter private String workspaceUrlName; @Inject private SessionController sessionController; @Inject private WorkspaceController workspaceController; @Inject private ForumController forumController; @Inject @Named private WorkspaceBackingBean workspaceBackingBean; @RequestAction public String init() { String urlName = getWorkspaceUrlName(); if (StringUtils.isBlank(urlName)) { return NavigationRules.NOT_FOUND; } WorkspaceEntity workspaceEntity = workspaceController.findWorkspaceEntityByUrlName(urlName); if (workspaceEntity == null) { return NavigationRules.NOT_FOUND; } if (!sessionController.hasWorkspacePermission(ForumResourcePermissionCollection.FORUM_ACCESSWORKSPACEFORUMS, workspaceEntity)) { return NavigationRules.ACCESS_DENIED; } workspaceEntityId = workspaceEntity.getId(); workspaceBackingBean.setWorkspaceUrlName(urlName); workspaceName = workspaceBackingBean.getWorkspaceName(); lockStickyPermission = sessionController.hasWorkspacePermission(ForumResourcePermissionCollection.FORUM_LOCK_OR_STICKIFY_WORKSPACE_MESSAGES, workspaceEntity); showFullNamePermission = sessionController.hasEnvironmentPermission(ForumResourcePermissionCollection.FORUM_SHOW_FULL_NAMES); Map<Long, AreaPermission> areaPermissions = new HashMap<>(); for (WorkspaceForumArea forumArea : forumController.listWorkspaceForumAreas(workspaceEntity)) { AreaPermission areaPermission = new AreaPermission( sessionController.hasWorkspacePermission(ForumResourcePermissionCollection.FORUM_EDIT_WORKSPACE_MESSAGES, workspaceEntity), sessionController.hasWorkspacePermission(ForumResourcePermissionCollection.FORUM_DELETE_WORKSPACE_MESSAGES, workspaceEntity)); areaPermissions.put(forumArea.getId(), areaPermission); } canCreateArea = sessionController.hasWorkspacePermission(ForumResourcePermissionCollection.FORUM_CREATEWORKSPACEFORUM, workspaceEntity); canUpdateArea = sessionController.hasWorkspacePermission(ForumResourcePermissionCollection.FORUM_UPDATEWORKSPACEFORUM, workspaceEntity); canDeleteArea = sessionController.hasWorkspacePermission(ForumResourcePermissionCollection.FORUM_DELETEWORKSPACEFORUM, workspaceEntity); try { this.areaPermissions = new ObjectMapper().writeValueAsString(areaPermissions); } catch (JsonProcessingException e) { return NavigationRules.INTERNAL_ERROR; } return null; } public String getWorkspaceName() { return workspaceName; } public String getWorkspaceUrlName() { return workspaceUrlName; } public void setWorkspaceUrlName(String workspaceUrlName) { this.workspaceUrlName = workspaceUrlName; } public Long getWorkspaceEntityId() { return workspaceEntityId; } public String getAreaPermissions() { return areaPermissions; } public Boolean getLockStickyPermission() { return lockStickyPermission; } public Boolean getShowFullNamePermission() { return showFullNamePermission; } public boolean getCanCreateArea() { return canCreateArea; } public boolean getCanUpdateArea() { return canUpdateArea; } public boolean getCanDeleteArea() { return canDeleteArea; } private Long workspaceEntityId; private String areaPermissions; private Boolean lockStickyPermission; private Boolean showFullNamePermission; private boolean canCreateArea = false; private boolean canUpdateArea = false; private boolean canDeleteArea = false; 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; } private String workspaceName; }