Commit 575ff2e829e2f445933ceddadfaddba13ecb5637
1 parent
24e5d678
Examen terminé.
Showing
7 changed files
with
173 additions
and
7 deletions
Show diff stats
src/main/java/fr/plil/sio/examen/api/Animal.java
1 | package fr.plil.sio.examen.api; | 1 | package fr.plil.sio.examen.api; |
2 | 2 | ||
3 | import java.io.Serializable; | 3 | import java.io.Serializable; |
4 | +import java.util.LinkedList; | ||
5 | +import java.util.List; | ||
4 | import javax.persistence.Column; | 6 | import javax.persistence.Column; |
5 | import javax.persistence.Entity; | 7 | import javax.persistence.Entity; |
6 | import javax.persistence.GeneratedValue; | 8 | import javax.persistence.GeneratedValue; |
7 | import javax.persistence.GenerationType; | 9 | import javax.persistence.GenerationType; |
8 | import javax.persistence.Id; | 10 | import javax.persistence.Id; |
9 | import javax.persistence.ManyToOne; | 11 | import javax.persistence.ManyToOne; |
12 | +import javax.persistence.OneToMany; | ||
10 | 13 | ||
11 | /** | 14 | /** |
12 | * An animal must have a name one and only one owner | 15 | * An animal must have a name one and only one owner |
@@ -24,6 +27,10 @@ public class Animal implements Serializable { | @@ -24,6 +27,10 @@ public class Animal implements Serializable { | ||
24 | @ManyToOne(optional = false) | 27 | @ManyToOne(optional = false) |
25 | private Owner owner; | 28 | private Owner owner; |
26 | 29 | ||
30 | + @OneToMany(mappedBy = "reporter") | ||
31 | + List<Comment> comments = new LinkedList<>(); | ||
32 | + | ||
33 | + | ||
27 | public Long getId() { | 34 | public Long getId() { |
28 | return id; | 35 | return id; |
29 | } | 36 | } |
@@ -48,5 +55,13 @@ public class Animal implements Serializable { | @@ -48,5 +55,13 @@ public class Animal implements Serializable { | ||
48 | this.owner = owner; | 55 | this.owner = owner; |
49 | } | 56 | } |
50 | 57 | ||
58 | + public List<Comment> getComments(){ | ||
59 | + return this.comments; | ||
60 | + } | ||
61 | + | ||
62 | + public void setComments(List<Comment> comments){ | ||
63 | + this.comments = comments; | ||
64 | + } | ||
65 | + | ||
51 | 66 | ||
52 | } | 67 | } |
src/main/java/fr/plil/sio/examen/api/Comment.java
1 | package fr.plil.sio.examen.api; | 1 | package fr.plil.sio.examen.api; |
2 | 2 | ||
3 | +import javax.persistence.Column; | ||
4 | +import javax.persistence.Entity; | ||
5 | +import javax.persistence.GeneratedValue; | ||
6 | +import javax.persistence.GenerationType; | ||
7 | +import javax.persistence.Id; | ||
8 | +import javax.persistence.JoinColumn; | ||
9 | +import javax.persistence.ManyToOne; | ||
10 | + | ||
3 | /** | 11 | /** |
4 | * A comment is made by an reporter (i.e. an owner) on ANY animal | 12 | * A comment is made by an reporter (i.e. an owner) on ANY animal |
5 | * (not only the ones he owns). | 13 | * (not only the ones he owns). |
@@ -11,11 +19,52 @@ package fr.plil.sio.examen.api; | @@ -11,11 +19,52 @@ package fr.plil.sio.examen.api; | ||
11 | * TODO: complete the classes in API to support comment serialization in the | 19 | * TODO: complete the classes in API to support comment serialization in the |
12 | * database. | 20 | * database. |
13 | */ | 21 | */ |
22 | +@Entity | ||
14 | public class Comment { | 23 | public class Comment { |
15 | 24 | ||
25 | + @Id | ||
26 | + @GeneratedValue(strategy = GenerationType.AUTO) | ||
27 | + private Long id; | ||
28 | + | ||
29 | + @ManyToOne(optional = false) | ||
16 | private Owner reporter; | 30 | private Owner reporter; |
17 | 31 | ||
32 | + @ManyToOne(optional = false) | ||
18 | private Animal animal; | 33 | private Animal animal; |
19 | 34 | ||
35 | + @Column(nullable = false) | ||
20 | private String message; | 36 | private String message; |
37 | + | ||
38 | + public Long getId() { | ||
39 | + return id; | ||
40 | + } | ||
41 | + | ||
42 | + public void setId(Long id) { | ||
43 | + this.id = id; | ||
44 | + } | ||
45 | + | ||
46 | + public Owner getReporter() { | ||
47 | + return this.reporter; | ||
48 | + } | ||
49 | + | ||
50 | + public void setReporter(Owner owner) { | ||
51 | + this.reporter = owner; | ||
52 | + } | ||
53 | + | ||
54 | + public Animal getAnimal() { | ||
55 | + return animal; | ||
56 | + } | ||
57 | + | ||
58 | + public void setAnimal(Animal animal) { | ||
59 | + this.animal = animal; | ||
60 | + } | ||
61 | + | ||
62 | + public String getMessage(){ | ||
63 | + return this.message; | ||
64 | + } | ||
65 | + | ||
66 | + public void setMessage(String message){ | ||
67 | + this.message = message; | ||
68 | + } | ||
69 | + | ||
21 | } | 70 | } |
src/main/java/fr/plil/sio/examen/api/Owner.java
@@ -25,6 +25,9 @@ public class Owner { | @@ -25,6 +25,9 @@ public class Owner { | ||
25 | @OneToMany(mappedBy = "owner") | 25 | @OneToMany(mappedBy = "owner") |
26 | private List<Animal> animals = new LinkedList<>(); | 26 | private List<Animal> animals = new LinkedList<>(); |
27 | 27 | ||
28 | + @OneToMany(mappedBy = "reporter") | ||
29 | + private List<Comment> comments = new LinkedList<>(); | ||
30 | + | ||
28 | public Long getId() { | 31 | public Long getId() { |
29 | return id; | 32 | return id; |
30 | } | 33 | } |
@@ -48,4 +51,12 @@ public class Owner { | @@ -48,4 +51,12 @@ public class Owner { | ||
48 | public void setAnimals(List<Animal> animals) { | 51 | public void setAnimals(List<Animal> animals) { |
49 | this.animals = animals; | 52 | this.animals = animals; |
50 | } | 53 | } |
54 | + | ||
55 | + public List<Comment> getComments(){ | ||
56 | + return this.comments; | ||
57 | + } | ||
58 | + | ||
59 | + public void setComments(List<Comment> comments){ | ||
60 | + this.comments = comments; | ||
61 | + } | ||
51 | } | 62 | } |
src/main/java/fr/plil/sio/examen/repositories/CommentRepository.java
1 | package fr.plil.sio.examen.repositories; | 1 | package fr.plil.sio.examen.repositories; |
2 | 2 | ||
3 | +import fr.plil.sio.examen.api.Animal; | ||
3 | import fr.plil.sio.examen.api.Comment; | 4 | import fr.plil.sio.examen.api.Comment; |
5 | +import fr.plil.sio.examen.api.Owner; | ||
6 | +import java.util.List; | ||
4 | import org.springframework.data.jpa.repository.JpaRepository; | 7 | import org.springframework.data.jpa.repository.JpaRepository; |
5 | 8 | ||
6 | /** | 9 | /** |
7 | * TODO: complete this interface for new find methods. | 10 | * TODO: complete this interface for new find methods. |
8 | */ | 11 | */ |
9 | public interface CommentRepository extends JpaRepository<Comment, Long>{ | 12 | public interface CommentRepository extends JpaRepository<Comment, Long>{ |
13 | + | ||
14 | + /** | ||
15 | + * List all messages about an animal | ||
16 | + */ | ||
17 | + List<Comment> findByAnimal(Animal animal); | ||
18 | + | ||
19 | + /** | ||
20 | + * List all messages reported by one owner | ||
21 | + */ | ||
22 | + List<Comment> findByReporter(Owner reporter); | ||
23 | + | ||
24 | + | ||
25 | + | ||
10 | } | 26 | } |
src/main/java/fr/plil/sio/examen/services/AnimalServiceImpl.java
1 | package fr.plil.sio.examen.services; | 1 | package fr.plil.sio.examen.services; |
2 | 2 | ||
3 | import fr.plil.sio.examen.api.Animal; | 3 | import fr.plil.sio.examen.api.Animal; |
4 | +import fr.plil.sio.examen.api.Comment; | ||
4 | import fr.plil.sio.examen.api.Owner; | 5 | import fr.plil.sio.examen.api.Owner; |
5 | import fr.plil.sio.examen.repositories.AnimalRepository; | 6 | import fr.plil.sio.examen.repositories.AnimalRepository; |
7 | +import fr.plil.sio.examen.repositories.CommentRepository; | ||
6 | import org.springframework.beans.factory.annotation.Autowired; | 8 | import org.springframework.beans.factory.annotation.Autowired; |
7 | import org.springframework.stereotype.Service; | 9 | import org.springframework.stereotype.Service; |
8 | import org.springframework.transaction.annotation.Transactional; | 10 | import org.springframework.transaction.annotation.Transactional; |
@@ -12,6 +14,9 @@ public class AnimalServiceImpl implements AnimalService { | @@ -12,6 +14,9 @@ public class AnimalServiceImpl implements AnimalService { | ||
12 | 14 | ||
13 | @Autowired | 15 | @Autowired |
14 | private AnimalRepository animalRepository; | 16 | private AnimalRepository animalRepository; |
17 | + | ||
18 | + @Autowired | ||
19 | + private CommentRepository commentRepository; | ||
15 | 20 | ||
16 | @Override | 21 | @Override |
17 | @Transactional | 22 | @Transactional |
@@ -33,7 +38,16 @@ public class AnimalServiceImpl implements AnimalService { | @@ -33,7 +38,16 @@ public class AnimalServiceImpl implements AnimalService { | ||
33 | @Override | 38 | @Override |
34 | @Transactional | 39 | @Transactional |
35 | public void delete(Animal animal) { | 40 | public void delete(Animal animal) { |
36 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | 41 | + if(animal == null) |
42 | + throw new IllegalArgumentException("Animal must not be null"); | ||
43 | + | ||
44 | + if(animal.getId() == null) | ||
45 | + throw new IllegalArgumentException("Animal doesn't exist"); | ||
46 | + | ||
47 | + for(Comment c : animal.getComments()) | ||
48 | + commentRepository.delete(c); | ||
49 | + | ||
50 | + animalRepository.delete(animal); | ||
37 | } | 51 | } |
38 | 52 | ||
39 | } | 53 | } |
src/main/java/fr/plil/sio/examen/services/CommentServiceImpl.java
@@ -3,7 +3,10 @@ package fr.plil.sio.examen.services; | @@ -3,7 +3,10 @@ package fr.plil.sio.examen.services; | ||
3 | import fr.plil.sio.examen.api.Animal; | 3 | import fr.plil.sio.examen.api.Animal; |
4 | import fr.plil.sio.examen.api.Comment; | 4 | import fr.plil.sio.examen.api.Comment; |
5 | import fr.plil.sio.examen.api.Owner; | 5 | import fr.plil.sio.examen.api.Owner; |
6 | +import fr.plil.sio.examen.repositories.CommentRepository; | ||
7 | +import java.util.LinkedList; | ||
6 | import java.util.List; | 8 | import java.util.List; |
9 | +import org.springframework.beans.factory.annotation.Autowired; | ||
7 | import org.springframework.stereotype.Service; | 10 | import org.springframework.stereotype.Service; |
8 | import org.springframework.transaction.annotation.Transactional; | 11 | import org.springframework.transaction.annotation.Transactional; |
9 | 12 | ||
@@ -13,34 +16,78 @@ import org.springframework.transaction.annotation.Transactional; | @@ -13,34 +16,78 @@ import org.springframework.transaction.annotation.Transactional; | ||
13 | @Service | 16 | @Service |
14 | public class CommentServiceImpl implements CommentService { | 17 | public class CommentServiceImpl implements CommentService { |
15 | 18 | ||
19 | + @Autowired | ||
20 | + private CommentRepository commentRepository; | ||
21 | + | ||
16 | @Override | 22 | @Override |
17 | @Transactional | 23 | @Transactional |
18 | public Comment add(Owner owner, Animal animal, String text) { | 24 | public Comment add(Owner owner, Animal animal, String text) { |
19 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | 25 | + if(owner == null) |
26 | + throw new IllegalArgumentException("Owner cannot be null"); | ||
27 | + if(animal == null) | ||
28 | + throw new IllegalArgumentException("Animal Cannot be null"); | ||
29 | + if(text == null) | ||
30 | + throw new IllegalArgumentException("Text cannot be null"); | ||
31 | + | ||
32 | + Comment comment = new Comment(); | ||
33 | + comment.setReporter(owner); | ||
34 | + comment.setAnimal(animal); | ||
35 | + comment.setMessage(text); | ||
36 | + commentRepository.save(comment); | ||
37 | + | ||
38 | + return comment; | ||
20 | } | 39 | } |
21 | 40 | ||
22 | @Override | 41 | @Override |
23 | @Transactional | 42 | @Transactional |
24 | public void delete(Comment comment) { | 43 | public void delete(Comment comment) { |
25 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | 44 | + if(comment == null) |
45 | + throw new IllegalArgumentException("comment cannot be null"); | ||
46 | + if(comment.getId() == null) | ||
47 | + throw new IllegalArgumentException("Comment doesn't exists"); | ||
48 | + | ||
49 | + commentRepository.delete(comment); | ||
26 | } | 50 | } |
27 | 51 | ||
28 | @Override | 52 | @Override |
29 | @Transactional(readOnly = true) | 53 | @Transactional(readOnly = true) |
30 | public List<Comment> findByAnimal(Animal animal) { | 54 | public List<Comment> findByAnimal(Animal animal) { |
31 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | 55 | + if(animal == null) |
56 | + throw new IllegalArgumentException("Animal cannot be null"); | ||
57 | + if(animal.getId() == null) | ||
58 | + throw new IllegalArgumentException("Animal doesn't exists"); | ||
59 | + | ||
60 | + return commentRepository.findByAnimal(animal); | ||
32 | } | 61 | } |
33 | 62 | ||
34 | @Override | 63 | @Override |
35 | @Transactional(readOnly = true) | 64 | @Transactional(readOnly = true) |
36 | public List<Comment> findByReporter(Owner reporter) { | 65 | public List<Comment> findByReporter(Owner reporter) { |
37 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | 66 | + if(reporter == null) |
67 | + throw new IllegalArgumentException("reporter cannot be null"); | ||
68 | + if(reporter.getId() == null) | ||
69 | + throw new IllegalArgumentException("reporter doesn't exists"); | ||
70 | + | ||
71 | + return commentRepository.findByReporter(reporter); | ||
38 | } | 72 | } |
39 | 73 | ||
40 | @Override | 74 | @Override |
41 | @Transactional(readOnly = true) | 75 | @Transactional(readOnly = true) |
42 | public List<Comment> findByOwner(Owner owner) { | 76 | public List<Comment> findByOwner(Owner owner) { |
43 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | 77 | + if(owner == null) |
78 | + throw new IllegalArgumentException("owner cannot be null"); | ||
79 | + if(owner.getId() == null) | ||
80 | + throw new IllegalArgumentException("owner doesn't exists"); | ||
81 | + | ||
82 | + List<Animal> animalsOfOwner = owner.getAnimals(); | ||
83 | + List<Comment> comments = new LinkedList<>(); | ||
84 | + | ||
85 | + for(Animal a : animalsOfOwner){ | ||
86 | + comments.addAll(a.getComments()); | ||
87 | + } | ||
88 | + | ||
89 | + return comments; | ||
90 | + | ||
44 | } | 91 | } |
45 | 92 | ||
46 | } | 93 | } |
src/main/java/fr/plil/sio/examen/services/OwnerServiceImpl.java
1 | package fr.plil.sio.examen.services; | 1 | package fr.plil.sio.examen.services; |
2 | 2 | ||
3 | +import fr.plil.sio.examen.api.Comment; | ||
3 | import fr.plil.sio.examen.api.Owner; | 4 | import fr.plil.sio.examen.api.Owner; |
5 | +import fr.plil.sio.examen.repositories.CommentRepository; | ||
4 | import fr.plil.sio.examen.repositories.OwnerRepository; | 6 | import fr.plil.sio.examen.repositories.OwnerRepository; |
5 | import org.springframework.beans.factory.annotation.Autowired; | 7 | import org.springframework.beans.factory.annotation.Autowired; |
6 | import org.springframework.stereotype.Service; | 8 | import org.springframework.stereotype.Service; |
@@ -10,10 +12,22 @@ public class OwnerServiceImpl implements OwnerService { | @@ -10,10 +12,22 @@ public class OwnerServiceImpl implements OwnerService { | ||
10 | 12 | ||
11 | @Autowired | 13 | @Autowired |
12 | private OwnerRepository ownerRepository; | 14 | private OwnerRepository ownerRepository; |
15 | + | ||
16 | + @Autowired | ||
17 | + private CommentRepository commentRepository; | ||
13 | 18 | ||
14 | @Override | 19 | @Override |
15 | public void delete(Owner owner) { | 20 | public void delete(Owner owner) { |
16 | - throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. | 21 | + if(owner == null) |
22 | + throw new IllegalArgumentException("Owner must be not null"); | ||
23 | + | ||
24 | + if(owner.getId() == null) | ||
25 | + throw new IllegalArgumentException("Owner doesn't exist"); | ||
26 | + | ||
27 | + for(Comment c : owner.getComments()) | ||
28 | + commentRepository.delete(c); | ||
29 | + | ||
30 | + ownerRepository.delete(owner); | ||
17 | } | 31 | } |
18 | 32 | ||
19 | @Override | 33 | @Override |