package org.transgalactica.management.data.rest.dao.impl; import java.util.List; import javax.inject.Inject; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Repository; import org.springframework.web.client.RestTemplate; import org.transgalactica.management.data.rest.bo.HangarSearchCriteria; import org.transgalactica.management.data.rest.bo.HangarSummaryTo; import org.transgalactica.management.data.rest.bo.HangarTo; import org.transgalactica.management.data.rest.dao.HangarDao; import org.transgalactica.management.data.rest.mapper.LogisticsMapper; import org.transgalactica.management.flux.rest.HangarCommand; import org.transgalactica.management.flux.rest.HangarDetailDto; import org.transgalactica.management.flux.rest.HangarDtos; @Repository public class RestHangarDao implements HangarDao { private static final String HANGARS_URI = "/hangars"; private static final String SEARCH_URI = HANGARS_URI + "/search?localisation={localisation}"; private static final String BY_NUMERO_URI = HANGARS_URI + "/{numero}"; private static final String VAISSEAUX_URI = BY_NUMERO_URI + "/vaisseaux/{immatriculation}"; @Value("${rest.url}") private String restServiceUrl; @Inject private RestTemplate restTemplate; @Inject private LogisticsMapper mapper; protected RestHangarDao() { } @Override public List<HangarSummaryTo> searchByCriteria(HangarSearchCriteria criteres) { HangarDtos hangars = restTemplate.getForObject(restServiceUrl + SEARCH_URI, HangarDtos.class, criteres.getLocalisationHangar()); return mapper.mapToHangarSummaryTo(hangars.getHangar()); } @Override public HangarTo getByNumero(long numero) { HangarDetailDto hangar = restTemplate.getForObject(restServiceUrl + BY_NUMERO_URI, HangarDetailDto.class, numero); return mapper.mapToHangarTo(hangar); } @Override public void persist(HangarTo hangar) { Long id = hangar.getNumero(); HangarCommand command = mapper.mapToHangarCommand(hangar); if (id == null) { restTemplate.postForLocation(restServiceUrl + HANGARS_URI, command); } else { restTemplate.put(restServiceUrl + BY_NUMERO_URI, command, id); } } @Override public void remove(long numero) { restTemplate.delete(restServiceUrl + BY_NUMERO_URI, numero); } @Override public void addVaisseau(long numeroHangar, String immatriculationVaisseau) { restTemplate.postForLocation(restServiceUrl + VAISSEAUX_URI, null, numeroHangar, immatriculationVaisseau); } @Override public void removeVaisseau(long numeroHangar, String immatriculationVaisseau) { restTemplate.delete(restServiceUrl + VAISSEAUX_URI, numeroHangar, immatriculationVaisseau); } }