package org.transgalactica.management.rest.hr.mapper.impl;
import java.time.LocalDate;
import java.util.List;
import javax.inject.Inject;
import org.springframework.beans.factory.BeanFactory;
import org.transgalactica.fwk.domain.stereotype.Mapper;
import org.transgalactica.management.data.people.bo.EmployeEntity;
import org.transgalactica.management.data.people.bo.EmployeSearchCriteria;
import org.transgalactica.management.data.people.bo.EmployeSummary;
import org.transgalactica.management.data.people.bo.MecanicienEntity;
import org.transgalactica.management.data.people.bo.PiloteEntity;
import org.transgalactica.management.data.referentiel.bo.EmployeType;
import org.transgalactica.management.rest.hr.data.EmployeCommand;
import org.transgalactica.management.rest.hr.data.EmployeDetailDto;
import org.transgalactica.management.rest.hr.data.EmployeDtos;
import org.transgalactica.management.rest.hr.data.MecanicienDetailDto;
import org.transgalactica.management.rest.hr.data.PiloteCommand;
import org.transgalactica.management.rest.hr.data.PiloteDetailDto;
import org.transgalactica.management.rest.hr.mapper.EmployeMapper;
import org.transgalactica.management.rest.hr.mapper.HrReferentielMapper;
/**
* Implementation par défaut de {@link EmployeMapper}
*
* @author Thierry
*/
@Mapper
public class DozerEmployeMapper implements EmployeMapper {
@Inject
private BeanFactory beanFactory;
@Inject
private org.dozer.Mapper mapper;
@Inject
private HrReferentielMapper hrReferentielMapper;
protected DozerEmployeMapper() {
}
@Override
public EmployeEntity mapEmployeCommandToEntity(EmployeCommand command) {
EmployeEntity entity;
if (command instanceof PiloteCommand) {
entity = beanFactory.getBean(PiloteEntity.class);
}
else {
entity = beanFactory.getBean(MecanicienEntity.class);
}
mapEmployeCommandToEntity(command, entity);
return entity;
}
@Override
public void mapEmployeCommandToEntity(EmployeCommand command, EmployeEntity entity) {
mapper.map(command, entity);
}
@Override
public EmployeDetailDto mapToEmployeDetailDto(EmployeEntity entity) {
if (entity.getType() == EmployeType.MECANICIEN) {
MecanicienDetailDto dto = mapper.map(entity, MecanicienDetailDto.class);
hrReferentielMapper.mapSpecialitesToMecanicienDetailDto(dto, ((MecanicienEntity) entity).getSpecialites());
return dto;
}
if (entity.getType() == EmployeType.PILOTE) {
return mapper.map(entity, PiloteDetailDto.class);
}
throw new IllegalArgumentException("Unkown employe type : " + entity.getType());
}
@Override
public EmployeDtos mapToEmployeDtos(List<EmployeSummary> employes) {
return mapper.map(employes, EmployeDtos.class);
}
@Override
public EmployeSearchCriteria mapToRechercheEmployeCriteres(String nomEmploye, LocalDate dateEmbaucheEmployeDebut,
LocalDate dateEmbaucheEmployeFin, String immatriculationVaisseau) {
EmployeSearchCriteria criteria = beanFactory.getBean(EmployeSearchCriteria.class);
criteria.setNomEmploye(nomEmploye);
criteria.setDateEmbaucheEmployeDebut(dateEmbaucheEmployeDebut);
criteria.setDateEmbaucheEmployeFin(dateEmbaucheEmployeFin);
criteria.setImmatriculationVaisseau(immatriculationVaisseau);
return criteria;
}
}