CommentServiceImpl.java 3.02 KB
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;

/**
 * TODO: complete all these methods
 */
@Service
public class CommentServiceImpl implements CommentService {

    @Autowired
    private CommentRepository commentRepository;
    
    @Override
    @Transactional
    public Comment add(Owner owner, Animal animal, String text) {
        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) {
        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<Comment> findByAnimal(Animal animal) {
        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<Comment> findByReporter(Owner reporter) {
        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<Comment> findByOwner(Owner owner) {
        if(owner == null)
            throw new IllegalArgumentException("owner cannot be null");
        if(owner.getId() == null)
            throw new IllegalArgumentException("owner doesn't exists");
        
        List<Animal> animalsOfOwner = owner.getAnimals();
        List<Comment> comments = new LinkedList<>();
        
        for(Animal a : animalsOfOwner){                            
            comments.addAll(a.getComments());
        }
        
        return comments;
        
    }
    
}