From eeb03fedd2781e179b4c6db78c1a435338cedc89 Mon Sep 17 00:00:00 2001 From: Lucas Espindola Date: Sat, 21 Dec 2013 19:03:42 -0200 Subject: [PATCH 1/3] new Grade entity to represent Student's grade --- .../com/viktor/javawebpoc/entity/Grade.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/entity/Grade.java diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/entity/Grade.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/entity/Grade.java new file mode 100644 index 0000000..a046672 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/entity/Grade.java @@ -0,0 +1,35 @@ +package br.com.viktor.javawebpoc.entity; + +import javax.persistence.Entity; +import javax.persistence.FetchType; +import javax.persistence.ManyToOne; +import javax.persistence.Table; + +import br.com.viktor.javawebpoc.entity.base.AbstractEntity; + +@Entity +@Table(name = "TB_GRADE") +public class Grade extends AbstractEntity { + + @ManyToOne(fetch = FetchType.EAGER) + private Student student; + + private Float score; + + public Float getScore() { + return score; + } + + public void setScore(Float score) { + this.score = score; + } + + public Student getStudent() { + return student; + } + + public void setStudent(Student student) { + this.student = student; + } + +} \ No newline at end of file From f812d5a566c400e99bb8ac9f2f764e77820956c3 Mon Sep 17 00:00:00 2001 From: Lucas Espindola Date: Sat, 21 Dec 2013 19:06:14 -0200 Subject: [PATCH 2/3] new Grade repo, service and facade --- .../viktor/javawebpoc/facade/GradeFacade.java | 26 +++++++++ .../repository/GradeRepositoryContract.java | 14 +++++ .../contract/GradeServiceContract.java | 11 ++++ .../javawebpoc/service/impl/GradeService.java | 53 +++++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/GradeFacade.java create mode 100644 javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/repository/GradeRepositoryContract.java create mode 100644 javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/contract/GradeServiceContract.java create mode 100644 javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/impl/GradeService.java diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/GradeFacade.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/GradeFacade.java new file mode 100644 index 0000000..840faa0 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/GradeFacade.java @@ -0,0 +1,26 @@ +package br.com.viktor.javawebpoc.facade; + +import javax.inject.Inject; + +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.facade.base.AbstractCrudFacade; +import br.com.viktor.javawebpoc.service.contract.GradeServiceContract; + +@Component +@Transactional +public class GradeFacade extends AbstractCrudFacade{ + + public GradeFacade(){ + super(null); + } + + @Inject + public GradeFacade(GradeServiceContract gradeService) { + super(gradeService); + + } + +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/repository/GradeRepositoryContract.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/repository/GradeRepositoryContract.java new file mode 100644 index 0000000..2cbbd63 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/repository/GradeRepositoryContract.java @@ -0,0 +1,14 @@ +package br.com.viktor.javawebpoc.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.entity.Student; + +@Repository +public interface GradeRepositoryContract extends JpaRepository { + public List findAllByStudent(Student student); +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/contract/GradeServiceContract.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/contract/GradeServiceContract.java new file mode 100644 index 0000000..e3e332e --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/contract/GradeServiceContract.java @@ -0,0 +1,11 @@ +package br.com.viktor.javawebpoc.service.contract; + +import java.util.List; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.service.contract.base.AbstractCrudContract; + +public interface GradeServiceContract extends AbstractCrudContract { + public List findAllByStudent(Student student); +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/impl/GradeService.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/impl/GradeService.java new file mode 100644 index 0000000..b473a0d --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/service/impl/GradeService.java @@ -0,0 +1,53 @@ +package br.com.viktor.javawebpoc.service.impl; + +import java.util.List; + +import javax.inject.Inject; +import javax.persistence.EntityExistsException; + +import org.springframework.stereotype.Service; + +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.exception.alreadyExists.AlreadyExistsException; +import br.com.viktor.javawebpoc.exception.invalidArgument.InvalidArgumentException; +import br.com.viktor.javawebpoc.exception.notFound.NotFoundException; +import br.com.viktor.javawebpoc.repository.GradeRepositoryContract; +import br.com.viktor.javawebpoc.service.contract.GradeServiceContract; +import br.com.viktor.javawebpoc.service.impl.base.AbstractCrudService; + +@Service +public class GradeService extends AbstractCrudService implements GradeServiceContract { + + private GradeRepositoryContract gradeRepository; + + @Inject + public GradeService(GradeRepositoryContract gradeRepository) { + super(gradeRepository); + this.gradeRepository = gradeRepository; + } + + @Override + protected void checkIfValid(Grade entity) throws InvalidArgumentException { + if(entity.getScore() > 10 || entity.getScore() < 0){ + throw new InvalidArgumentException(); + } + + } + + @Override + protected void checkBussinessKey(Grade entity) + throws AlreadyExistsException { + try { + if(this.find(entity.getId()) != null) + throw new EntityExistsException(); + } catch (NotFoundException e) {} + + } + + @Override + public List findAllByStudent(Student student) { + return gradeRepository.findAllByStudent(student); + } + +} From 01208b431f56a4cc72d3cb6adcdd185a0a0b097e Mon Sep 17 00:00:00 2001 From: Lucas Espindola Date: Sat, 21 Dec 2013 19:08:05 -0200 Subject: [PATCH 3/3] included new Grade entity operations in Student and Grade controller --- .../controller/GradeController.java | 21 +++++++++++++ .../controller/StudentController.java | 20 +++++++++++-- .../javawebpoc/facade/StudentFacade.java | 30 +++++++++++++++---- 3 files changed, 64 insertions(+), 7 deletions(-) create mode 100644 javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/GradeController.java diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/GradeController.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/GradeController.java new file mode 100644 index 0000000..dcfa6e0 --- /dev/null +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/GradeController.java @@ -0,0 +1,21 @@ +package br.com.viktor.javawebpoc.controller; + +import javax.inject.Inject; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +import br.com.viktor.javawebpoc.controller.base.AbstractCrudController; +import br.com.viktor.javawebpoc.entity.Grade; +import br.com.viktor.javawebpoc.facade.GradeFacade; + +@Controller +@RequestMapping("/grade") +public class GradeController extends AbstractCrudController { + + @Inject + public GradeController(GradeFacade gradeFacade) { + super(gradeFacade); + } + +} diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java index 97d078b..06fd1f6 100644 --- a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/controller/StudentController.java @@ -1,21 +1,37 @@ package br.com.viktor.javawebpoc.controller; +import java.util.List; + import javax.inject.Inject; import org.springframework.stereotype.Controller; +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.bind.annotation.ResponseBody; import br.com.viktor.javawebpoc.controller.base.AbstractCrudController; +import br.com.viktor.javawebpoc.entity.Grade; import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.exception.invalidArgument.NullArgumentException; +import br.com.viktor.javawebpoc.exception.notFound.NotFoundException; import br.com.viktor.javawebpoc.facade.StudentFacade; @Controller @RequestMapping("/student") public class StudentController extends AbstractCrudController { + private StudentFacade studentFacade; + @Inject - public StudentController(StudentFacade facade) { - super(facade); + public StudentController(StudentFacade studentFacade) { + super(studentFacade); + this.studentFacade = studentFacade; } + @RequestMapping(value = "/{studentId}/grade", method = RequestMethod.GET) + @ResponseBody + public List findAllGradeByStudentId(@PathVariable Long studentId) throws NotFoundException, NullArgumentException{ + return studentFacade.findAllByStudentId(studentId); + } } diff --git a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java index 4a3bf37..890426c 100644 --- a/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java +++ b/javawebpoc-web/src/main/java/br/com/viktor/javawebpoc/facade/StudentFacade.java @@ -1,20 +1,40 @@ package br.com.viktor.javawebpoc.facade; -import org.springframework.beans.factory.annotation.Autowired; +import java.util.List; + +import javax.inject.Inject; + import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import br.com.viktor.javawebpoc.entity.Grade; import br.com.viktor.javawebpoc.entity.Student; +import br.com.viktor.javawebpoc.exception.invalidArgument.NullArgumentException; +import br.com.viktor.javawebpoc.exception.notFound.NotFoundException; import br.com.viktor.javawebpoc.facade.base.AbstractCrudFacade; -import br.com.viktor.javawebpoc.service.contract.base.AbstractCrudContract; +import br.com.viktor.javawebpoc.service.contract.GradeServiceContract; +import br.com.viktor.javawebpoc.service.contract.StudentServiceContract; @Component @Transactional public class StudentFacade extends AbstractCrudFacade { - @Autowired - public StudentFacade(AbstractCrudContract abstractCrud) { - super(abstractCrud); + private StudentServiceContract studentService; + private GradeServiceContract gradeService; + + public StudentFacade(){ + super(null); + } + + @Inject + public StudentFacade(StudentServiceContract studentService, GradeServiceContract gradeService) { + super(studentService); + this.studentService = studentService; + this.gradeService = gradeService; + } + + public List findAllByStudentId(Long studentId) throws NotFoundException, NullArgumentException{ + return this.gradeService.findAllByStudent(this.studentService.find(studentId)); } } \ No newline at end of file