package no.niths.services.school; import no.niths.application.rest.helper.Status; import no.niths.common.helpers.MessageProvider; import no.niths.common.helpers.ValidationHelper; import no.niths.domain.location.Room; import no.niths.domain.school.Student; import no.niths.domain.school.Subject; import no.niths.infrastructure.interfaces.GenericRepository; import no.niths.infrastructure.location.interfaces.RoomRepository; import no.niths.infrastructure.school.interfaces.StudentRepository; import no.niths.infrastructure.school.interfaces.SubjectRepository; import no.niths.services.AbstractGenericService; import no.niths.services.school.interfaces.SubjectService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * Service Class for Subject * * <p> * Inherits the basic CRUD actions and has methods * for addTutor, removeTutor, addRoom * and removeRoom * </p> */ @Service public class SubjectServiceImpl extends AbstractGenericService<Subject> implements SubjectService { private Logger logger = LoggerFactory.getLogger(SubjectServiceImpl.class); @Autowired private SubjectRepository subjectRepository; @Autowired private StudentRepository studentRepository; @Autowired private RoomRepository roomRepository; @Override public GenericRepository<Subject> getRepository() { return subjectRepository; } /** * {@inheritDoc} */ @Override public void addTutor(Long subjectId, Long studentId) { Subject subject = validate(subjectRepository.getById(subjectId), Subject.class); checkIfObjectIsInCollection(subject.getTutors(), studentId, Student.class); Student tutor = studentRepository.getById(studentId); ValidationHelper.isObjectNull(tutor, Student.class); subject.getTutors().add(tutor); logger.debug(MessageProvider.buildStatusMsg(Student.class, Status.UPDATED)); } /** * {@inheritDoc} */ @Override public void removeTutor(Long subjectId, Long studentId) { Subject subject = validate(subjectRepository.getById(subjectId), Subject.class); checkIfIsRemoved(subject.getTutors().remove(new Student(studentId)), Student.class); } /** * {@inheritDoc} */ @Override public void addRoom(Long subjectId, Long roomId) { Subject subject = validate(subjectRepository.getById(subjectId), Subject.class); checkIfObjectExists(subject.getRoom(), roomId, Room.class); Room room = roomRepository.getById(roomId); ValidationHelper.isObjectNull(room, Room.class); subject.setRoom(room); logger.debug(MessageProvider.buildStatusMsg(Room.class, Status.UPDATED)); } /** * {@inheritDoc} */ @Override public void removeRoom(Long subjectId) { Subject subject = validate(subjectRepository.getById(subjectId), Subject.class); boolean isRemoved = false; if (subject.getRoom() != null) { subject.setRoom(null); isRemoved = true; } checkIfIsRemoved(isRemoved, Room.class); } }