package edu.asu.spring.quadriga.web.publicwebsite; import java.security.Principal; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import edu.asu.spring.quadriga.accesschecks.IProjectSecurityChecker; import edu.asu.spring.quadriga.aspects.annotations.CheckAccess; import edu.asu.spring.quadriga.aspects.annotations.CheckPublicAccess; import edu.asu.spring.quadriga.aspects.annotations.InjectProject; import edu.asu.spring.quadriga.aspects.annotations.InjectProjectByName; import edu.asu.spring.quadriga.aspects.annotations.ProjectIdentifier; import edu.asu.spring.quadriga.domain.projectblog.IProjectBlogEntry; import edu.asu.spring.quadriga.domain.workbench.IProject; import edu.asu.spring.quadriga.exceptions.NoSuchRoleException; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; import edu.asu.spring.quadriga.service.projectblog.IProjectBlogEntryManager; import edu.asu.spring.quadriga.web.login.RoleNames; /** * This controller is responsible for showing project blog entries for a * particular project. Number of project blogs to display is specified in * <code>settings.properties</code> as <code>projectblogentry.list.count</code> * * @author Kavinya Rajendran * @author PawanMahalle */ @Controller public class PublicBlogController { @Autowired private Environment env; @Autowired private IProjectBlogEntryManager projectBlogEntryManager; @Autowired private IProjectSecurityChecker projectSecurity; /** * generated data for project blog page by fetching project blog entries * from <code>tbl_projectblogentry</code> and checking user privileges. * * @param projectUnixName * parameter passed from url as {projectUnixName} * @param model * model object * @param project * project instance obtained using @InjectProject annotation * @param principal * principal object which is required to fetch information about * logged in user. * @return project blog page containing list of all project blogs from given * project * @throws QuadrigaStorageException * @throws NoSuchRoleException */ @CheckPublicAccess @InjectProjectByName @RequestMapping(value = "sites/{ProjectUnixName}/projectblog", method = RequestMethod.GET) public String projectBlog(@ProjectIdentifier @PathVariable("ProjectUnixName") String projectUnixName, Model model, @CheckAccess @InjectProject IProject project, Principal principal) throws QuadrigaStorageException, NoSuchRoleException { // Fetch blog entries for a project identified by project unix name String projectId = project.getProjectId(); Integer count = Integer.parseInt(env.getProperty("projectblogentry.list.count")); List<IProjectBlogEntry> projectBlogEntryList = projectBlogEntryManager.getProjectBlogEntryList(projectId, count); // Add the critical data to model object model.addAttribute("projectBlogEntryList", projectBlogEntryList); model.addAttribute("project", project); // check the roles of logged in user to decide whether to show add // project link or not. Only project admins and owners are allowed to // add project blogs for a project under consideration if (principal != null) { String userName = principal.getName(); if (projectSecurity.isCollaborator(userName, RoleNames.ROLE_PROJ_COLLABORATOR_ADMIN, project.getProjectId())) { model.addAttribute("isProjectAdmin", true); } else { model.addAttribute("isProjectAdmin", false); } if (projectSecurity.isProjectOwner(userName, project.getProjectId())) { model.addAttribute("isProjectOWner", true); } else { model.addAttribute("isProjectOWner", false); } } else { model.addAttribute("isProjectAdmin", false); model.addAttribute("isProjectOWner", false); } return "sites/projectblog"; } }