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.fwk.validation.exception.BusinessException; import org.transgalactica.management.business.logistics.exception.HangarInexistantException; import org.transgalactica.management.business.logistics.service.HangarService; import org.transgalactica.management.data.materiel.bo.HangarEntity; import org.transgalactica.management.data.materiel.bo.HangarSearchCriteria; import org.transgalactica.management.data.materiel.bo.HangarSummary; import org.transgalactica.management.data.materiel.bo.VaisseauEntity; import org.transgalactica.management.data.materiel.dao.HangarDao; import org.transgalactica.management.data.materiel.dao.VaisseauDao; @Service @Validated public class DaoHangarService implements HangarService { @Inject private HangarDao hangarDao; @Inject private VaisseauDao vaisseauDao; protected DaoHangarService() { } @Override @Secured({ "ROLE_GESTIONNAIRE", "ROLE_SUPER_GESTIONNAIRE" }) public HangarEntity chargerHangar(@NotNull Long numero) { HangarEntity hangar = hangarDao.findByNumero(numero); if (hangar == null) { throw new HangarInexistantException(numero); } return hangar; } @Override @Secured("ROLE_SUPER_GESTIONNAIRE") @Transactional public void enregistrerHangar(@NotNull @Valid HangarEntity hangar) { hangarDao.save(hangar); } @Override @Secured({ "ROLE_ANONYMOUS", "ROLE_GESTIONNAIRE", "ROLE_SUPER_GESTIONNAIRE" }) public List<HangarSummary> rechercherHangars() { return hangarDao.findAllOrderByNumero(); } @Override @Secured({ "ROLE_ANONYMOUS", "ROLE_GESTIONNAIRE", "ROLE_SUPER_GESTIONNAIRE" }) public List<HangarSummary> rechercherHangars(@NotNull @Valid HangarSearchCriteria criteresRechercheHangar) { return hangarDao.findByLocalisationOrderByNumero(criteresRechercheHangar.getLocalisationHangar()); } @Override @Secured("ROLE_SUPER_GESTIONNAIRE") @Transactional public void supprimerHangar(@NotNull HangarEntity hangar) { int nbVaisseaux = vaisseauDao.countByHangar(hangar); if (nbVaisseaux > 0) { throw new BusinessException("HANGAR_VALIDATION_2"); } hangarDao.delete(hangar); } @Override @Secured({ "ROLE_GESTIONNAIRE", "ROLE_SUPER_GESTIONNAIRE" }) @Transactional public void affecterVaisseauAuHangar(@NotNull VaisseauEntity vaisseau, @NotNull HangarEntity hangar) { // reste t'il des places dans le Hangar cible int nbVaisseaux = vaisseauDao.countByHangar(hangar); if (nbVaisseaux >= hangar.getNombreEmplacements()) { throw new BusinessException("HANGAR_VALIDATION_4"); } // le vaisseau était'il parqué dans un hangar. HangarEntity fromHangar = vaisseau.getHangar(); if (fromHangar != null && !fromHangar.equals(hangar)) { fromHangar.remove(vaisseau); hangarDao.save(fromHangar); } hangar.add(vaisseau); hangarDao.save(hangar); } }