es.ucm.fdi.dalgs.activity.web.ActivityController.java Source code

Java tutorial

Introduction

Here is the source code for es.ucm.fdi.dalgs.activity.web.ActivityController.java

Source

/**
 * This file is part of D.A.L.G.S.
 *
 * D.A.L.G.S is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * D.A.L.G.S is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with D.A.L.G.S.  If not, see <http://www.gnu.org/licenses/>.
 */
package es.ucm.fdi.dalgs.activity.web;

import java.io.IOException;
import java.security.acl.NotOwnerException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomCollectionEditor;
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
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.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import es.ucm.fdi.dalgs.activity.service.ActivityService;
import es.ucm.fdi.dalgs.classes.FileUpload;
import es.ucm.fdi.dalgs.classes.ResultClass;
import es.ucm.fdi.dalgs.course.service.CourseService;
import es.ucm.fdi.dalgs.domain.Activity;
import es.ucm.fdi.dalgs.domain.Course;
import es.ucm.fdi.dalgs.domain.Group;
import es.ucm.fdi.dalgs.domain.LearningGoal;
import es.ucm.fdi.dalgs.domain.LearningGoalStatus;
import es.ucm.fdi.dalgs.group.service.GroupService;
import es.ucm.fdi.dalgs.learningGoal.service.LearningGoalService;

@Controller
public class ActivityController {

    @Autowired
    private ActivityService serviceActivity;

    @Autowired
    private CourseService serviceCourse;

    @Autowired
    private GroupService serviceGroup;

    @Autowired
    private LearningGoalService serviceLearningGoal;

    private Boolean showAll;

    public Boolean getShowAll() {
        return showAll;
    }

    public void setShowAll(Boolean showAll) {
        this.showAll = showAll;
    }

    private static final Logger logger = LoggerFactory.getLogger(ActivityController.class);

    /**
     * --------------------COURSE-----------------------
     */

    /**
     * Methods for adding activities
     */
    @Secured({ "ROLE_ADMIN", "ROLE_PROFESSOR" })
    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/add.htm", method = RequestMethod.GET)
    public String addActivityCourseGET(@PathVariable("academicId") Long id_Long,
            @PathVariable("courseId") Long id_course, Model model) {

        if (!model.containsAttribute("addactivity")) {

            Activity newActivity = new Activity();
            model.addAttribute("addactivity", newActivity);
        }
        return "activity/add";

    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/add.htm", method = RequestMethod.POST)
    // Every Post have to return redirect
    public String addActivityCoursePOST(@PathVariable("academicId") Long id_academicTerm,
            @PathVariable("courseId") Long id_course, @ModelAttribute("addactivity") @Valid Activity newactivity,
            BindingResult resultBinding, RedirectAttributes attr, Locale locale) throws NotOwnerException {

        if (!resultBinding.hasErrors()) {
            Course course = serviceCourse.getCourse(id_course, id_academicTerm).getSingleElement();

            ResultClass<Activity> result = serviceActivity.addActivityCourse(course, newactivity, id_course,
                    id_academicTerm, locale);
            if (!result.hasErrors())
                return "redirect:/academicTerm/" + id_academicTerm + "/course/" + id_course + "/activity/"
                        + result.getSingleElement().getId() + "/modify.htm";
            else {

                if (result.isElementDeleted()) {
                    attr.addFlashAttribute("unDelete", result.isElementDeleted());
                    attr.addFlashAttribute("addactivity", result.getSingleElement());
                } else
                    attr.addFlashAttribute("addactivity", result.getSingleElement());
                attr.addFlashAttribute("errors", result.getErrorsList());

            }
        } else {
            attr.addFlashAttribute("org.springframework.validation.BindingResult.addAcademicTerm", resultBinding);
            attr.addFlashAttribute("addactivity", newactivity);

        }

        return "redirect:/academicTerm/{academicId}/course/{courseId}/activity/add.htm";

    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/add.htm", method = RequestMethod.POST, params = "Undelete")
    // Every Post have to return redirect
    public String undeleteActivityCourse(@PathVariable("academicId") Long id_academicTerm,
            @PathVariable("courseId") Long id_course, @ModelAttribute("addActivity") @Valid Activity activity,
            BindingResult resultBinding, RedirectAttributes attr, Locale locale) {

        if (!resultBinding.hasErrors()) {
            Course course = serviceCourse.getCourse(id_course, id_academicTerm).getSingleElement();

            ResultClass<Activity> result = serviceActivity.unDeleteActivity(course, null, activity, locale);

            if (!result.hasErrors())

                return "redirect:/academicTerm/" + id_academicTerm + "/course/" + id_course + "/activity/"
                        + result.getSingleElement().getId() + "/modify.htm";
            else {
                if (result.isElementDeleted())
                    attr.addFlashAttribute("unDelete", true);
                attr.addFlashAttribute("errors", result.getErrorsList());

            }

        } else {
            attr.addFlashAttribute("org.springframework.validation.BindingResult.addAcademicTerm", resultBinding);

        }
        attr.addFlashAttribute("addActivity", activity);
        return "redirect:/academicTerm/{academicId}/course/{courseId}/activity/add.htm";

    }

    /**
     * Methods for modifying activities
     */

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/{activityId}/modify.htm", method = RequestMethod.GET)
    public String modifyActivityCourseGET(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("activityId") Long id_activity, Model model)
            throws ServletException {

        Activity p = serviceActivity.getActivity(id_activity, id_course, null, id_academic).getSingleElement();
        model.addAttribute("courseId", id_course);

        if (p != null) {
            if (!model.containsAttribute("modifyactivity")) {
                model.addAttribute("modifyactivity", p);

            }

            Collection<LearningGoal> lg = serviceLearningGoal.getLearningGoalsFromCourse(id_course, p);

            model.addAttribute("learningGoalStatus", p.getLearningGoalStatus());
            model.addAttribute("learningGoals", lg);

            model.addAttribute("attachments", p.getAttachments());

            LearningGoalStatus cs = new LearningGoalStatus();
            model.addAttribute("addlearningstatus", cs);

            FileUpload file = new FileUpload();
            model.addAttribute("addfileupload", file);

            return "activity/modifyChoose";
        }

        return "redirect:/academicTerm/{academicId}/course/{courseId}.htm";
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/{activityId}/modify.htm", method = RequestMethod.POST)
    public String modifyActivityCoursePOST(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("activityId") Long id_activity,
            @ModelAttribute("modifyactivity") @Valid Activity activity, BindingResult resultBinding,
            RedirectAttributes attr, Locale locale)

    {

        if (!resultBinding.hasErrors()) {
            Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();

            ResultClass<Boolean> result = serviceActivity.modifyActivity(course, null, activity, id_activity,
                    id_course, id_academic, locale);
            if (!result.hasErrors())

                return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + ".htm";
            else {

                attr.addFlashAttribute("errors", result.getErrorsList());

            }

        } else {

            attr.addFlashAttribute("org.springframework.validation.BindingResult.modifyactivity", resultBinding);

        }
        attr.addFlashAttribute("modifyactivity", activity);

        return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/activity/" + id_activity
                + "/modify.htm";
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{idCourse}/activity/{activityId}/addLearningStatus.htm", method = RequestMethod.POST)
    public String addLearningStatusCoursePOST(@PathVariable("academicId") Long id_academic,
            @PathVariable("idCourse") Long id_course, @PathVariable("activityId") Long id,
            @ModelAttribute("addlearningstatus") @Valid LearningGoalStatus learningGoalStatus, BindingResult result,
            Model model) throws ServletException {

        // Activity p = serviceActivity.getActivity(id);
        if (!result.hasErrors()) {
            Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();

            if (serviceActivity.addLearningGoals(course, null, id, learningGoalStatus, id_course, id_academic)
                    .getSingleElement())
                return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/activity/" + id
                        + "/modify.htm";
        }
        return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/activity/" + id + "/modify.htm";
    }

    /**
     * Method for delete an activities
     */

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/{activityId}/delete.htm", method = RequestMethod.GET)
    public String deleteActivityCourseGET(@PathVariable("academicId") Long id_AcademicTerm,
            @PathVariable("courseId") Long id_course, @PathVariable("activityId") Long id_activity)
            throws ServletException {

        Course course = serviceCourse.getCourse(id_course, id_AcademicTerm).getSingleElement();

        if (serviceActivity.deleteActivity(course, null, id_activity).getSingleElement()) {
            return "redirect:/academicTerm/" + id_AcademicTerm + "/course/" + id_course + ".htm";
        } else
            return "redirect:/error.htm";
    }

    /**
     * Method for delete an competence status of activities
     */

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/{activityId}/competenceStatus/{compStatusId}/delete.htm", method = RequestMethod.GET)
    public String deleteCompetenceStatusActivityCourse(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("activityId") long id_Activity,
            @PathVariable("compStatusId") Long id_learningStatus) throws ServletException {
        Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();

        if (serviceActivity.deleteLearningActivity(course, null, id_learningStatus, id_Activity, id_academic)
                .getSingleElement()) {
            return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/activity/" + id_Activity
                    + "/modify.htm";
        } else
            return "redirect:/error.htm";
    }

    /**
     * Method for delete an attachment of an activity
     */
    @RequestMapping(value = "/storage/attachments/attachment/{id_attach}/academicTerm/{academicId}/course/{courseId}/activity/{activityId}/delete", method = RequestMethod.GET)
    public String deleteAttachmentActivityCourse(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("activityId") Long id_Activity,
            @PathVariable("id_attach") Integer attachment) throws ServletException {
        Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();

        String url_attach = "http://localhost:8080/dalgs/storage/attachments/attachment/" + attachment;
        if (serviceActivity.deleteAttachmentActivity(course, null, url_attach, id_Activity, id_academic)
                .getSingleElement()) {
            return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/activity/" + id_Activity
                    + "/modify.htm";
        } else
            return "redirect:/error.htm";
    }

    /**
     * Methods for view activities
     */
    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/{activityId}.htm", method = RequestMethod.GET)
    public ModelAndView getActivityCourse(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("activityId") long id_activity)
            throws ServletException {

        Map<String, Object> model = new HashMap<String, Object>();

        Activity a = serviceActivity.getActivity(id_activity, id_course, null, id_academic).getSingleElement();

        if (a != null) {
            model.put("activity", a);
            model.put("activityId", id_activity);
            model.put("learningStatus", a.getLearningGoalStatus());
            model.put("attachments", a.getAttachments());

            return new ModelAndView("activity/view", "model", model);
        }

        return new ModelAndView("exception/notFound", "model", model);
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/activity/{activityId}/restore.htm")
    // Every Post have to return redirect
    public String restoreActivityCourse(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("activityId") Long id_activity, Locale locale) {
        Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();

        ResultClass<Activity> result = serviceActivity.unDeleteActivity(course, null,
                serviceActivity.getActivity(id_activity, id_course, null, id_academic).getSingleElement(), locale);

        if (!result.hasErrors())

            return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + ".htm";
        else {
            return "redirect:/error.htm";

        }
    }

    /**
     * --------------------GROUP-----------------------
     */

    /**
     * Methods for adding activities
     */
    @Secured({ "ROLE_ADMIN", "ROLE_PROFESSOR" })
    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/add.htm", method = RequestMethod.GET)
    public String addActivityGroupGET(@PathVariable("academicId") Long id_Long,
            @PathVariable("groupId") Long id_group, @PathVariable("courseId") Long id_course, Model model) {

        if (!model.containsAttribute("addactivity")) {
            Activity newActivity = new Activity();
            model.addAttribute("addactivity", newActivity);
        }
        return "activity/add";

    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/add.htm", method = RequestMethod.POST)
    // Every Post have to return redirect
    public String addActivityGroupPOST(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @ModelAttribute("addactivity") @Valid Activity newactivity, BindingResult resultBinding,
            RedirectAttributes attr) throws NotOwnerException {

        if (!resultBinding.hasErrors()) {
            Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

            ResultClass<Activity> result = serviceActivity.addActivitytoGroup(group, newactivity, id_group,
                    id_course, id_academic);
            if (!result.hasErrors())
                return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                        + "/activity/" + result.getSingleElement().getId() + "/modify.htm";
            else {

                if (result.isElementDeleted()) {
                    attr.addFlashAttribute("unDelete", result.isElementDeleted());
                    attr.addFlashAttribute("addactivity", result.getSingleElement());
                } else
                    attr.addFlashAttribute("addactivity", result.getSingleElement());

                // attr.addFlashAttribute("addactivity", newactivity);
                attr.addFlashAttribute("errors", result.getErrorsList());

            }
        } else {
            attr.addFlashAttribute("org.springframework.validation.BindingResult.addAcademicTerm", resultBinding);
            attr.addFlashAttribute("addactivity", newactivity);

        }

        return "redirect:/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/add.htm";

    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/add.htm", method = RequestMethod.POST, params = "Undelete")
    // Every Post have to return redirect
    public String undeleteActivityGroup(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @ModelAttribute("addActivity") @Valid Activity activity, BindingResult resultBinding,
            RedirectAttributes attr, Locale locale) {

        if (!resultBinding.hasErrors()) {

            Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

            ResultClass<Activity> result = serviceActivity.unDeleteActivity(null, group, activity, locale);

            if (!result.hasErrors())

                return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                        + "/activity/" + result.getSingleElement().getId() + "/modify.htm";
            else {
                if (result.isElementDeleted())
                    attr.addFlashAttribute("unDelete", true);
                attr.addFlashAttribute("errors", result.getErrorsList());

            }

        } else {
            attr.addFlashAttribute("org.springframework.validation.BindingResult.activity", resultBinding);

        }
        attr.addFlashAttribute("addActivity", activity);
        return "redirect:/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/add.htm";

    }

    /**
     * Methods for modifying activities
     */

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/{activityId}/modify.htm", method = RequestMethod.GET)
    public String modifyActivityGroupGET(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") Long id_activity, Model model) throws ServletException {

        Activity p = serviceActivity.getActivity(id_activity, id_course, id_group, id_academic).getSingleElement();

        if (p != null) {
            model.addAttribute("courseId", id_course);

            if (!model.containsAttribute("modifyactivity")) {
                model.addAttribute("modifyactivity", p);

            }

            Collection<LearningGoal> lg = serviceLearningGoal.getLearningGoalsFromCourse(id_course, p);

            model.addAttribute("learningGoalStatus", p.getLearningGoalStatus());
            model.addAttribute("learningGoals", lg);

            model.addAttribute("attachments", p.getAttachments());

            FileUpload file = new FileUpload();
            model.addAttribute("addfileupload", file);

            LearningGoalStatus cs = new LearningGoalStatus();
            model.addAttribute("addlearningstatus", cs);

            return "activity/modifyChoose";
        }
        return "redirect:/academicTerm/{academicId}/course/{courseId}/group/{groupId}.htm";
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/{activityId}/modify.htm", method = RequestMethod.POST)
    public String modifyActivityGroupPOST(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") Long id_activity,
            @ModelAttribute("modifyactivity") @Valid Activity activity, BindingResult resultBinding,
            RedirectAttributes attr, Locale locale)

    {

        if (!resultBinding.hasErrors()) {
            Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

            ResultClass<Boolean> result = serviceActivity.modifyActivity(null, group, activity, id_activity,
                    id_course, id_academic, locale);
            if (!result.hasErrors())

                return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                        + ".htm";
            else {

                attr.addFlashAttribute("errors", result.getErrorsList());

            }

        } else {

            attr.addFlashAttribute("org.springframework.validation.BindingResult.modifyactivity", resultBinding);

        }
        attr.addFlashAttribute("modifyactivity", activity);

        return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                + "/activity/" + id_activity + "/modify.htm";
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{idCourse}/group/{groupId}/activity/{activityId}/addLearningStatus.htm", method = RequestMethod.POST)
    public String addLearningStatusGroupPOST(@PathVariable("academicId") Long id_academic,
            @PathVariable("idCourse") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") Long id,
            @ModelAttribute("addlearningstatus") @Valid LearningGoalStatus learningGoalStatus, BindingResult result,
            Model model) throws ServletException {

        if (!result.hasErrors()) {
            Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

            if (serviceActivity.addLearningGoals(null, group, id, learningGoalStatus, id_course, id_academic)
                    .getSingleElement())
                return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                        + "/activity/" + id + "/modify.htm";
        }
        return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                + "/activity/" + id + "/modify.htm";
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{idCourse}/activity/{activityId}/addFileUpload.htm", method = RequestMethod.POST)
    public String addAttachmentCoursePOST(@PathVariable("academicId") Long id_academic,
            @PathVariable("idCourse") Long id_course, @PathVariable("activityId") Long id_activity,
            @ModelAttribute("addfileupload") FileUpload fileupload, BindingResult result, Model model,
            HttpServletRequest request) throws ServletException, IllegalStateException, IOException {

        if (!result.hasErrors()) {
            Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();
            serviceActivity.addAttachmentToCourseActivity(course, fileupload, id_activity, id_course, id_academic);
        }
        return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/activity/" + id_activity
                + "/modify.htm";
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{idCourse}/group/{groupId}/activity/{activityId}/addFileUpload.htm", method = RequestMethod.POST)
    public String addAttachmentGroupPOST(@PathVariable("academicId") Long id_academic,
            @PathVariable("idCourse") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") Long id_activity,

            @ModelAttribute("addfileupload") FileUpload fileupload, BindingResult result, Model model,
            HttpServletRequest request) throws ServletException, IllegalStateException, IOException {

        if (!result.hasErrors()) {
            Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();
            Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

            serviceActivity.addAttachmentToGroupActivity(course, group, fileupload, id_group, id_course,
                    id_activity, id_academic);
        }
        return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                + "/activity/" + id_activity + "/modify.htm";
    }

    /**
     * Method for delete an activities
     */

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/{activityId}/delete.htm", method = RequestMethod.GET)
    public String deleteActivityGroupGET(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") Long id_activity) throws ServletException {

        Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

        if (serviceActivity.deleteActivity(null, group, id_activity).getSingleElement()) {
            return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group + ".htm";
        } else
            return "redirect:/error.htm";
    }

    /**
     * Method for delete an competence status of activities
     */

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/{activityId}/competenceStatus/{compStatusId}/delete.htm", method = RequestMethod.GET)
    public String deleteCompetenceStatusActivityGroup(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") long id_Activity, @PathVariable("compStatusId") Long id_learningStatus)
            throws ServletException {

        Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

        if (serviceActivity.deleteLearningActivity(null, group, id_learningStatus, id_Activity, id_academic)
                .getSingleElement()) {
            return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                    + "/activity/" + id_Activity + "/modify.htm";
        } else
            return "redirect:/error.htm";
    }

    /**
     * Method for delete an attachment of an activity
     */

    @RequestMapping(value = "/storage/attachments/attachment/{id_attach}/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/{activityId}/delete", method = RequestMethod.GET)
    public String deleteAttachmentActivityGroup(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") Long id_Activity, @PathVariable("id_attach") Integer attachment)
            throws ServletException {

        Course course = serviceCourse.getCourse(id_course, id_academic).getSingleElement();
        Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

        String url_attach = "http://localhost:8080/dalgs/storage/attachments/attachment/" + attachment;
        if (serviceActivity.deleteAttachmentActivity(course, group, url_attach, id_Activity, id_academic)
                .getSingleElement()) {
            return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group
                    + "/activity/" + id_Activity + "/modify.htm";
        } else
            return "redirect:/error.htm";
    }

    /**
     * Methods for view activities
     */
    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/{activityId}.htm", method = RequestMethod.GET)
    public ModelAndView getActivityGroup(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,
            @PathVariable("activityId") long id_activity) throws ServletException {

        Map<String, Object> model = new HashMap<String, Object>();

        Activity a = serviceActivity.getActivity(id_activity, id_course, id_group, id_academic).getSingleElement();

        if (a != null) {
            model.put("activity", a);
            model.put("activityId", id_activity);
            model.put("attachments", a.getAttachments());

            model.put("learningStatus", a.getLearningGoalStatus());

            return new ModelAndView("activity/view", "model", model);
        }
        return new ModelAndView("exception/notFound", "model", model);
    }

    @RequestMapping(value = "/academicTerm/{academicId}/course/{courseId}/group/{groupId}/activity/{activityId}/restore.htm")
    // Every Post have to return redirect
    public String restoreActivityGroup(@PathVariable("academicId") Long id_academic,
            @PathVariable("courseId") Long id_course, @PathVariable("groupId") Long id_group,

            @PathVariable("activityId") Long id_activity, Locale locale) {

        Group group = serviceGroup.getGroup(id_group, id_course, id_academic, false).getSingleElement();

        ResultClass<Activity> result = serviceActivity.unDeleteActivity(null, group,
                serviceActivity.getActivity(id_activity, id_course, id_group, id_academic).getSingleElement(),
                locale);

        if (!result.hasErrors())

            return "redirect:/academicTerm/" + id_academic + "/course/" + id_course + "/group/" + id_group + ".htm";
        else {
            return "redirect:/error.htm";

        }
    }

    @RequestMapping(value = "/activity/download.htm")
    public void downloadCSV(HttpServletResponse response) throws IOException {
        serviceActivity.dowloadCSV(response);
    }

    /**
     * For binding the courses of the activity
     * 
     * @param binder
     * @throws Exception
     */
    @InitBinder
    public void initBinder(WebDataBinder binder) throws Exception {
        binder.registerCustomEditor(Set.class, "learningGoals", new CustomCollectionEditor(Set.class) {
            protected Object convertElement(Object element) {
                if (element instanceof LearningGoal) {
                    logger.info("Converting...{}", element);
                    return element;
                }
                if (element instanceof String) {
                    LearningGoal learning = serviceLearningGoal.getLearningGoalByName(element.toString())
                            .getSingleElement();
                    logger.info("Loking up {} to {}", element, learning);

                    return learning;
                }
                System.out.println("Don't know what to do with: " + element);
                return null;
            }
        });
    }
}