Package ch.bsgroup.scrumit.controller

Source Code of ch.bsgroup.scrumit.controller.ProjectPersonController

package ch.bsgroup.scrumit.controller;

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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import ch.bsgroup.scrumit.service.IPersonService;
import ch.bsgroup.scrumit.service.IProjectService;
import ch.bsgroup.scrumit.utils.ResourceNotFoundException;
import ch.bsgroup.scrumit.domain.Person;
import ch.bsgroup.scrumit.domain.Project;
import ch.bsgroup.scrumit.pojo.SerializablePerson;
import ch.bsgroup.scrumit.pojo.SerializableProject;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.servlet.http.HttpServletResponse;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;

@Controller
@RequestMapping(value="/project/")
public class ProjectPersonController {
  private IProjectService projectService;
  private IPersonService personService;
  private Validator validator;

  @Autowired
  public ProjectPersonController(Validator validator) {
    this.validator = validator;
  }

  public void setProjectService(IProjectService projectService) {
    this.projectService = projectService;
  }

  public void setPersonService(IPersonService personService) {
    this.personService = personService;
  }

  @RequestMapping(method=RequestMethod.GET)
  public String getProjectPerson(Model model) {
    return "project/project-person";
  }

  @RequestMapping(value="allprojects/", method=RequestMethod.GET)
  public @ResponseBody List<SerializableProject> getAllProjects() {
    Set<Project> projects = this.projectService.getAllProjects();
    List<SerializableProject> serializedProjects = new ArrayList<SerializableProject>();
    for (Iterator<Project> iterator = projects.iterator(); iterator.hasNext();) {
      Project p = iterator.next();
      SerializableProject sp = new SerializableProject(p.getId(), p.getName());
      serializedProjects.add(sp);
    }
    return serializedProjects;
  }

  @RequestMapping(value="allpersons/{projectid}/", method=RequestMethod.GET)
  public @ResponseBody List<SerializablePerson> getAllPersonsOfProject(@PathVariable int projectid) {
    Set<Person> persons = this.personService.getAllPersonsByProjectId(projectid);
    List<SerializablePerson> serializedPersons = new ArrayList<SerializablePerson>();
    for (Iterator<Person> iterator = persons.iterator(); iterator.hasNext();) {
      Person p = iterator.next();
      SerializablePerson sp = new SerializablePerson(p.getId(), p.getFirstName(), p.getLastName());
      serializedPersons.add(sp);
    }
    return serializedPersons;
  }

  @RequestMapping(value="{projectid}/", method=RequestMethod.GET)
  public @ResponseBody SerializableProject getProjectById(@PathVariable int projectid) {
    Project p = this.projectService.findProjectById(projectid);
    if (p == null) {
      throw new ResourceNotFoundException(projectid);
    }
    return new SerializableProject(p.getId(), p.getName(), p.getDescription(), p.getCreationDate());
  }
 
  @RequestMapping(value="person/{personid}/", method=RequestMethod.GET)
  public @ResponseBody SerializablePerson getPersonById(@PathVariable int personid) {
    Person p = this.personService.findPersonById(personid);
    if (p == null) {
      throw new ResourceNotFoundException(personid);
    }
    return new SerializablePerson(p.getId(), p.getFirstName(), p.getLastName(), p.getEmail());
  }

  @RequestMapping(value="update/", method=RequestMethod.POST)
  public @ResponseBody Map<String, ? extends Object> updateProject(@RequestBody Project p, HttpServletResponse response) {
    Set<ConstraintViolation<Project>> failures = validator.validate(p);
    Project project = this.projectService.findProjectById(p.getId());
    project.setName(p.getName().trim());
    project.setDescription(p.getDescription().trim());
    if (!failures.isEmpty()) {
      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
      return validationMessages(failures);
    } else {
      this.projectService.updateProject(project);
      SerializableProject sp = new SerializableProject(project.getId(), project.getName(),
          project.getDescription(), project.getCreationDate());
      return Collections.singletonMap("project", sp);
    }
  }

  @RequestMapping(value="person/update/", method=RequestMethod.POST)
  public @ResponseBody Map<String, ? extends Object> updatePerson(@RequestBody Person p, HttpServletResponse response) {
    p.setFirstName(p.getFirstName().trim());
    p.setLastName(p.getLastName().trim());
    p.setEmail(p.getEmail().trim());
    Set<ConstraintViolation<Person>> failures = validator.validate(p);
    if (!failures.isEmpty()) {
      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
      return validationMessagesPerson(failures);
    } else {
      this.personService.updatePerson(p);
      return Collections.singletonMap("person", p);
    }
  }

  @RequestMapping(value="remove/{projectid}/", method=RequestMethod.GET)
  public @ResponseBody void removeProjectById(@PathVariable int projectid) {
    this.projectService.removeProject(projectid);
  }

  @RequestMapping(value="person/remove/{personid}/", method=RequestMethod.GET)
  public @ResponseBody void removePersonById(@PathVariable int personid) {
    this.personService.removePerson(personid);
  }

  @RequestMapping(value="add/", method=RequestMethod.POST)
  public @ResponseBody Map<String, ? extends Object> addProject(@RequestBody Project p, HttpServletResponse response) {
    p.setName(p.getName().trim());
    p.setDescription(p.getDescription().trim());
    p.setCreationDate(new Date());
    Set<ConstraintViolation<Project>> failures = validator.validate(p);
    if (!failures.isEmpty()) {
      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
      return validationMessages(failures);
    } else {
      return Collections.singletonMap("project", this.projectService.addProject(p));
    }
  }

  @RequestMapping(value="person/add/{projectid}/", method=RequestMethod.POST)
  public @ResponseBody Map<String, ? extends Object> addPerson(@PathVariable int projectid, @RequestBody Person p, HttpServletResponse response) {
    p.setFirstName(p.getFirstName().trim());
    p.setLastName(p.getLastName().trim());
    p.setEmail(p.getEmail().trim());
    Set<ConstraintViolation<Person>> failures = validator.validate(p);
    if (!failures.isEmpty()) {
      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
      return validationMessagesPerson(failures);
    } else {
      Project project = this.projectService.findProjectById(projectid);
      Person newPerson = this.personService.addPerson(p);
     
      Set<Person> persons = this.personService.getAllPersonsByProjectId(projectid);
      persons.add(newPerson);
      project.setPersons(persons);

      this.projectService.updateProject(project);
      return Collections.singletonMap("person", newPerson);
    }
  }

  // internal helper
  private Map<String, String> validationMessages(Set<ConstraintViolation<Project>> failures) {
    Map<String, String> failureMessages = new HashMap<String, String>();
    for (ConstraintViolation<Project> failure : failures) {
      failureMessages.put(failure.getPropertyPath().toString(), failure.getMessage());
    }
    return failureMessages;
  }
  private Map<String, String> validationMessagesPerson(Set<ConstraintViolation<Person>> failures) {
    Map<String, String> failureMessages = new HashMap<String, String>();
    for (ConstraintViolation<Person> failure : failures) {
      failureMessages.put(failure.getPropertyPath().toString(), failure.getMessage());
    }
    return failureMessages;
  }
}
TOP

Related Classes of ch.bsgroup.scrumit.controller.ProjectPersonController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.