package org.transgalactica.management.business.logistics.service.impl;
import java.util.List;
import javax.inject.Inject;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import org.springframework.security.access.annotation.Secured;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
import org.transgalactica.management.business.logistics.exception.VaisseauInexistantException;
import org.transgalactica.management.business.logistics.service.VaisseauService;
import org.transgalactica.management.data.materiel.bo.VaisseauEntity;
import org.transgalactica.management.data.materiel.bo.VaisseauSearchCriteria;
import org.transgalactica.management.data.materiel.bo.VaisseauSummary;
import org.transgalactica.management.data.materiel.dao.VaisseauDao;
@Service
@Validated
public class DaoVaisseauService implements VaisseauService {
@Inject
private VaisseauDao vaisseauDao;
protected DaoVaisseauService() {
}
@Override
@Secured({ "ROLE_GESTIONNAIRE", "ROLE_SUPER_GESTIONNAIRE" })
public VaisseauEntity chargerVaisseau(@NotNull String immatriculation) {
VaisseauEntity vaisseau = vaisseauDao.findByImmatriculation(immatriculation);
if (vaisseau == null) {
throw new VaisseauInexistantException(immatriculation);
}
return vaisseau;
}
@Override
@Secured("ROLE_SUPER_GESTIONNAIRE")
@Transactional
public void enregistrerVaisseau(@NotNull @Valid VaisseauEntity vaisseau) {
vaisseauDao.save(vaisseau);
}
@Override
@Secured({ "ROLE_ANONYMOUS", "ROLE_GESTIONNAIRE", "ROLE_SUPER_GESTIONNAIRE" })
public List<VaisseauSummary> rechercherVaisseaux(@NotNull @Valid VaisseauSearchCriteria criteres) {
return vaisseauDao.findByCriteria(criteres);
}
@Override
@Secured({ "ROLE_ANONYMOUS", "ROLE_GESTIONNAIRE", "ROLE_SUPER_GESTIONNAIRE" })
public List<VaisseauSummary> rechercherVaisseauxEnTransit() {
return vaisseauDao.findByHangarIsNullOrderByImmatriculation();
}
@Override
@Transactional
@Secured("ROLE_SUPER_GESTIONNAIRE")
public void supprimerVaisseau(@NotNull VaisseauEntity vaisseau) {
vaisseauDao.delete(vaisseau);
}
}