From 575ff2e829e2f445933ceddadfaddba13ecb5637 Mon Sep 17 00:00:00 2001 From: msahmane Date: Fri, 14 Oct 2016 12:10:25 +0200 Subject: [PATCH] Examen terminé. --- src/main/java/fr/plil/sio/examen/api/Animal.java | 15 +++++++++++++++ src/main/java/fr/plil/sio/examen/api/Comment.java | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ src/main/java/fr/plil/sio/examen/api/Owner.java | 11 +++++++++++ src/main/java/fr/plil/sio/examen/repositories/CommentRepository.java | 16 ++++++++++++++++ src/main/java/fr/plil/sio/examen/services/AnimalServiceImpl.java | 16 +++++++++++++++- src/main/java/fr/plil/sio/examen/services/CommentServiceImpl.java | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++----- src/main/java/fr/plil/sio/examen/services/OwnerServiceImpl.java | 16 +++++++++++++++- 7 files changed, 173 insertions(+), 7 deletions(-) diff --git a/src/main/java/fr/plil/sio/examen/api/Animal.java b/src/main/java/fr/plil/sio/examen/api/Animal.java index c8b8da9..1a2fc4d 100644 --- a/src/main/java/fr/plil/sio/examen/api/Animal.java +++ b/src/main/java/fr/plil/sio/examen/api/Animal.java @@ -1,12 +1,15 @@ package fr.plil.sio.examen.api; import java.io.Serializable; +import java.util.LinkedList; +import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; /** * An animal must have a name one and only one owner @@ -24,6 +27,10 @@ public class Animal implements Serializable { @ManyToOne(optional = false) private Owner owner; + @OneToMany(mappedBy = "reporter") + List comments = new LinkedList<>(); + + public Long getId() { return id; } @@ -48,5 +55,13 @@ public class Animal implements Serializable { this.owner = owner; } + public List getComments(){ + return this.comments; + } + + public void setComments(List comments){ + this.comments = comments; + } + } diff --git a/src/main/java/fr/plil/sio/examen/api/Comment.java b/src/main/java/fr/plil/sio/examen/api/Comment.java index df00e44..35fe03c 100644 --- a/src/main/java/fr/plil/sio/examen/api/Comment.java +++ b/src/main/java/fr/plil/sio/examen/api/Comment.java @@ -1,5 +1,13 @@ package fr.plil.sio.examen.api; +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; + /** * A comment is made by an reporter (i.e. an owner) on ANY animal * (not only the ones he owns). @@ -11,11 +19,52 @@ package fr.plil.sio.examen.api; * TODO: complete the classes in API to support comment serialization in the * database. */ +@Entity public class Comment { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @ManyToOne(optional = false) private Owner reporter; + @ManyToOne(optional = false) private Animal animal; + @Column(nullable = false) private String message; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Owner getReporter() { + return this.reporter; + } + + public void setReporter(Owner owner) { + this.reporter = owner; + } + + public Animal getAnimal() { + return animal; + } + + public void setAnimal(Animal animal) { + this.animal = animal; + } + + public String getMessage(){ + return this.message; + } + + public void setMessage(String message){ + this.message = message; + } + } diff --git a/src/main/java/fr/plil/sio/examen/api/Owner.java b/src/main/java/fr/plil/sio/examen/api/Owner.java index 4583923..3a6aa8d 100644 --- a/src/main/java/fr/plil/sio/examen/api/Owner.java +++ b/src/main/java/fr/plil/sio/examen/api/Owner.java @@ -25,6 +25,9 @@ public class Owner { @OneToMany(mappedBy = "owner") private List animals = new LinkedList<>(); + @OneToMany(mappedBy = "reporter") + private List comments = new LinkedList<>(); + public Long getId() { return id; } @@ -48,4 +51,12 @@ public class Owner { public void setAnimals(List animals) { this.animals = animals; } + + public List getComments(){ + return this.comments; + } + + public void setComments(List comments){ + this.comments = comments; + } } diff --git a/src/main/java/fr/plil/sio/examen/repositories/CommentRepository.java b/src/main/java/fr/plil/sio/examen/repositories/CommentRepository.java index 84fe1fe..525d0bd 100644 --- a/src/main/java/fr/plil/sio/examen/repositories/CommentRepository.java +++ b/src/main/java/fr/plil/sio/examen/repositories/CommentRepository.java @@ -1,10 +1,26 @@ package fr.plil.sio.examen.repositories; +import fr.plil.sio.examen.api.Animal; import fr.plil.sio.examen.api.Comment; +import fr.plil.sio.examen.api.Owner; +import java.util.List; import org.springframework.data.jpa.repository.JpaRepository; /** * TODO: complete this interface for new find methods. */ public interface CommentRepository extends JpaRepository{ + + /** + * List all messages about an animal + */ + List findByAnimal(Animal animal); + + /** + * List all messages reported by one owner + */ + List findByReporter(Owner reporter); + + + } diff --git a/src/main/java/fr/plil/sio/examen/services/AnimalServiceImpl.java b/src/main/java/fr/plil/sio/examen/services/AnimalServiceImpl.java index 3d66cdd..dc146d5 100644 --- a/src/main/java/fr/plil/sio/examen/services/AnimalServiceImpl.java +++ b/src/main/java/fr/plil/sio/examen/services/AnimalServiceImpl.java @@ -1,8 +1,10 @@ package fr.plil.sio.examen.services; import fr.plil.sio.examen.api.Animal; +import fr.plil.sio.examen.api.Comment; import fr.plil.sio.examen.api.Owner; import fr.plil.sio.examen.repositories.AnimalRepository; +import fr.plil.sio.examen.repositories.CommentRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -12,6 +14,9 @@ public class AnimalServiceImpl implements AnimalService { @Autowired private AnimalRepository animalRepository; + + @Autowired + private CommentRepository commentRepository; @Override @Transactional @@ -33,7 +38,16 @@ public class AnimalServiceImpl implements AnimalService { @Override @Transactional public void delete(Animal animal) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if(animal == null) + throw new IllegalArgumentException("Animal must not be null"); + + if(animal.getId() == null) + throw new IllegalArgumentException("Animal doesn't exist"); + + for(Comment c : animal.getComments()) + commentRepository.delete(c); + + animalRepository.delete(animal); } } diff --git a/src/main/java/fr/plil/sio/examen/services/CommentServiceImpl.java b/src/main/java/fr/plil/sio/examen/services/CommentServiceImpl.java index cc60c48..1548813 100644 --- a/src/main/java/fr/plil/sio/examen/services/CommentServiceImpl.java +++ b/src/main/java/fr/plil/sio/examen/services/CommentServiceImpl.java @@ -3,7 +3,10 @@ package fr.plil.sio.examen.services; import fr.plil.sio.examen.api.Animal; import fr.plil.sio.examen.api.Comment; import fr.plil.sio.examen.api.Owner; +import fr.plil.sio.examen.repositories.CommentRepository; +import java.util.LinkedList; import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -13,34 +16,78 @@ import org.springframework.transaction.annotation.Transactional; @Service public class CommentServiceImpl implements CommentService { + @Autowired + private CommentRepository commentRepository; + @Override @Transactional public Comment add(Owner owner, Animal animal, String text) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if(owner == null) + throw new IllegalArgumentException("Owner cannot be null"); + if(animal == null) + throw new IllegalArgumentException("Animal Cannot be null"); + if(text == null) + throw new IllegalArgumentException("Text cannot be null"); + + Comment comment = new Comment(); + comment.setReporter(owner); + comment.setAnimal(animal); + comment.setMessage(text); + commentRepository.save(comment); + + return comment; } @Override @Transactional public void delete(Comment comment) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if(comment == null) + throw new IllegalArgumentException("comment cannot be null"); + if(comment.getId() == null) + throw new IllegalArgumentException("Comment doesn't exists"); + + commentRepository.delete(comment); } @Override @Transactional(readOnly = true) public List findByAnimal(Animal animal) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if(animal == null) + throw new IllegalArgumentException("Animal cannot be null"); + if(animal.getId() == null) + throw new IllegalArgumentException("Animal doesn't exists"); + + return commentRepository.findByAnimal(animal); } @Override @Transactional(readOnly = true) public List findByReporter(Owner reporter) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if(reporter == null) + throw new IllegalArgumentException("reporter cannot be null"); + if(reporter.getId() == null) + throw new IllegalArgumentException("reporter doesn't exists"); + + return commentRepository.findByReporter(reporter); } @Override @Transactional(readOnly = true) public List findByOwner(Owner owner) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if(owner == null) + throw new IllegalArgumentException("owner cannot be null"); + if(owner.getId() == null) + throw new IllegalArgumentException("owner doesn't exists"); + + List animalsOfOwner = owner.getAnimals(); + List comments = new LinkedList<>(); + + for(Animal a : animalsOfOwner){ + comments.addAll(a.getComments()); + } + + return comments; + } } diff --git a/src/main/java/fr/plil/sio/examen/services/OwnerServiceImpl.java b/src/main/java/fr/plil/sio/examen/services/OwnerServiceImpl.java index 8ee654c..71f4b0b 100644 --- a/src/main/java/fr/plil/sio/examen/services/OwnerServiceImpl.java +++ b/src/main/java/fr/plil/sio/examen/services/OwnerServiceImpl.java @@ -1,6 +1,8 @@ package fr.plil.sio.examen.services; +import fr.plil.sio.examen.api.Comment; import fr.plil.sio.examen.api.Owner; +import fr.plil.sio.examen.repositories.CommentRepository; import fr.plil.sio.examen.repositories.OwnerRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -10,10 +12,22 @@ public class OwnerServiceImpl implements OwnerService { @Autowired private OwnerRepository ownerRepository; + + @Autowired + private CommentRepository commentRepository; @Override public void delete(Owner owner) { - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. + if(owner == null) + throw new IllegalArgumentException("Owner must be not null"); + + if(owner.getId() == null) + throw new IllegalArgumentException("Owner doesn't exist"); + + for(Comment c : owner.getComments()) + commentRepository.delete(c); + + ownerRepository.delete(owner); } @Override -- libgit2 0.21.2