package edu.asu.spring.quadriga.web.workbench;
import java.security.Principal;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
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 org.springframework.web.servlet.mvc.support.RedirectAttributes;
import edu.asu.spring.quadriga.aspects.annotations.AccessPolicies;
import edu.asu.spring.quadriga.aspects.annotations.CheckedElementType;
import edu.asu.spring.quadriga.aspects.annotations.ElementAccessPolicy;
import edu.asu.spring.quadriga.aspects.annotations.InjectProject;
import edu.asu.spring.quadriga.aspects.annotations.InjectProjectById;
import edu.asu.spring.quadriga.aspects.annotations.ProjectIdentifier;
import edu.asu.spring.quadriga.domain.workbench.IProject;
import edu.asu.spring.quadriga.domain.workbench.IProjectConceptCollection;
import edu.asu.spring.quadriga.exceptions.QuadrigaAccessException;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.service.workbench.IProjectConceptCollectionManager;
import edu.asu.spring.quadriga.service.workbench.IRetrieveProjectManager;
import edu.asu.spring.quadriga.web.login.RoleNames;
@Controller
public class DeleteProjectConceptCollectionController {
@Autowired
private IRetrieveProjectManager projectManager;
@Autowired
private IProjectConceptCollectionManager projectConceptCollectionManager;
@AccessPolicies({ @ElementAccessPolicy(type = CheckedElementType.PROJECT, paramIndex = 1, userRole = {
RoleNames.ROLE_COLLABORATOR_OWNER, RoleNames.ROLE_PROJ_COLLABORATOR_ADMIN }) })
@RequestMapping(value = "auth/workbench/{projectid}/deleteconceptcollections", method = RequestMethod.GET)
@InjectProjectById
public String deleteProjectConceptCollection(@ProjectIdentifier @PathVariable("projectid") String projectid, Model model,@InjectProject IProject project,
Principal principal) throws QuadrigaStorageException, QuadrigaAccessException {
List<IProjectConceptCollection> projectConceptCollectionList = projectConceptCollectionManager
.listProjectConceptCollection(projectid);
model.addAttribute("projectConceptCollectionList", projectConceptCollectionList);
model.addAttribute("project", project);
model.addAttribute("projectid", projectid);
return "auth/workbench/project/deleteconceptcollections";
}
@AccessPolicies({ @ElementAccessPolicy(type = CheckedElementType.PROJECT, paramIndex = 2, userRole = {
RoleNames.ROLE_COLLABORATOR_OWNER, RoleNames.ROLE_PROJ_COLLABORATOR_ADMIN }) })
@RequestMapping(value = "auth/workbench/{projectid}/deleteconceptcollections", method = RequestMethod.POST)
public String deleteProjectConceptCollection(HttpServletRequest req, @PathVariable("projectid") String projectid,
Model model, Principal principal, RedirectAttributes attr) throws QuadrigaStorageException,
QuadrigaAccessException {
String userId = principal.getName();
String[] values = req.getParameterValues("selected");
if (values == null) {
attr.addFlashAttribute("show_error_alert", true);
attr.addFlashAttribute("error_alert_msg", "Please select a Concept Collection.");
return "redirect:/auth/workbench/" + projectid + "/deleteconceptcollections";
}
for (int i = 0; i < values.length; i++) {
projectConceptCollectionManager.deleteProjectConceptCollection(projectid, userId, values[i]);
}
attr.addFlashAttribute("show_success_alert", true);
attr.addFlashAttribute("success_alert_msg", "Concept Collection deleted from project successfully.");
return "redirect:/auth/workbench/projects/" + projectid;
}
}