package no.niths.application.rest.school;
import javax.servlet.http.HttpServletResponse;
import no.niths.application.rest.AbstractRESTControllerImpl;
import no.niths.application.rest.lists.ListAdapter;
import no.niths.application.rest.lists.school.SubjectList;
import no.niths.application.rest.school.interfaces.SubjectController;
import no.niths.common.constants.DomainConstantNames;
import no.niths.common.constants.SecurityConstants;
import no.niths.domain.school.Subject;
import no.niths.services.interfaces.GenericService;
import no.niths.services.school.interfaces.SubjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
/**
* Controller for subjects
* has the basic CRUD methods and
* methods too add and remove tutors
* and rooms
*
* For the URL too get Subjects add /subjects
* after the {@value no.niths.common.constants.MiscConstants#NITHS_BASE_DOMAIN}
*/
@Controller
@RequestMapping(DomainConstantNames.SUBJECTS)
public class SubjectControllerImpl extends AbstractRESTControllerImpl<Subject>
implements SubjectController {
@Autowired
private SubjectService subjectService;
private SubjectList subjectList = new SubjectList();
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize(SecurityConstants.ADMIN_AND_SR)
@RequestMapping(
value = "{subjectId}/tutor/{studentId}",
method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK, reason = "Tutor added to subject")
public void addTutor(
@PathVariable Long subjectId,
@PathVariable Long studentId) {
subjectService.addTutor(subjectId, studentId);
}
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize(SecurityConstants.ADMIN_AND_SR)
@RequestMapping(
value = "{subjectId}/tutor/{studentId}",
method = RequestMethod.DELETE)
@ResponseStatus(value = HttpStatus.OK, reason = "Tutor removed to subject")
public void removeTutor(
@PathVariable Long subjectId,
@PathVariable Long studentId) {
subjectService.removeTutor(subjectId, studentId);
}
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize(SecurityConstants.ADMIN_AND_SR)
@RequestMapping(
value = "{subjectId}/room/{roomId}",
method = RequestMethod.POST)
@ResponseStatus(value = HttpStatus.OK, reason = "Room added to subject")
public void addRoom(
@PathVariable Long subjectId,
@PathVariable Long roomId) {
subjectService.addRoom(subjectId, roomId);
}
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize(SecurityConstants.ADMIN_AND_SR)
@RequestMapping(
value = "{subjectId}/room",
method = RequestMethod.DELETE)
@ResponseStatus(value = HttpStatus.OK, reason = "Room removed from subject")
public void removeRoom(@PathVariable Long subjectId) {
subjectService.removeRoom(subjectId);
}
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize(SecurityConstants.ADMIN_AND_SR)
public Subject create(@RequestBody Subject domain, HttpServletResponse res) {
return super.create(domain, res);
}
/**
* {@inheritDoc}
*/
@PreAuthorize(SecurityConstants.ADMIN_AND_SR)
public void delete(@PathVariable long id) {
super.delete(id);
}
/**
* {@inheritDoc}
*/
@Override
@PreAuthorize(SecurityConstants.ADMIN_AND_SR)
public void update(@RequestBody Subject domain) {
super.update(domain);
}
/**
* {@inheritDoc}
*/
@Override
public GenericService<Subject> getService() {
return subjectService;
}
/**
* {@inheritDoc}
*/
@Override
public ListAdapter<Subject> getList() {
return subjectList;
}
}