package org.transgalactica.management.rest.hr.mapper.impl; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.HashSet; import java.util.Set; import javax.inject.Inject; import org.apache.commons.lang3.reflect.MethodUtils; import org.springframework.beans.factory.BeanFactory; import org.transgalactica.fwk.domain.stereotype.Mapper; import org.transgalactica.management.data.referentiel.bo.EmployeType; import org.transgalactica.management.data.referentiel.bo.MecanicienSpecialiteEntity; import org.transgalactica.management.rest.hr.data.EmployeTypeDtos; import org.transgalactica.management.rest.hr.data.MecanicienDetailDto; import org.transgalactica.management.rest.hr.data.MecanicienSpecialiteDtos; import org.transgalactica.management.rest.hr.mapper.HrReferentielMapper; /** * Implementation par défaut de * {@link org.transgalactica.management.rest.hr.mapper.EmployeMapper} * * @author Thierry */ @Mapper public class BasicHrReferentielMapper implements HrReferentielMapper { @Inject private BeanFactory beanFactory; protected BasicHrReferentielMapper() { } @Override public MecanicienSpecialiteDtos mapToMecanicienSpecialiteDtos(Collection<MecanicienSpecialiteEntity> specialites) { MecanicienSpecialiteDtos dtos = beanFactory.getBean(MecanicienSpecialiteDtos.class); for (MecanicienSpecialiteEntity specialite : specialites) { invokeMethod(dtos, "add", specialite.getNomSpecialite()); } return dtos; } @Override public void mapSpecialitesToMecanicienDetailDto(MecanicienDetailDto dto, Collection<MecanicienSpecialiteEntity> specialitesEntities) { Set<String> specialites = new HashSet<>(); for (MecanicienSpecialiteEntity specialite : specialitesEntities) { specialites.add(specialite.getNomSpecialite()); } invokeMethod(dto, "setSpecialites", specialites); } @Override public EmployeTypeDtos mapToEmployeTypeDtos(EmployeType[] employeTypes) { EmployeTypeDtos dtos = beanFactory.getBean(EmployeTypeDtos.class); for (EmployeType type : employeTypes) { invokeMethod(dtos, "add", type.name()); } return dtos; } private void invokeMethod(Object target, String method, Object value) { try { MethodUtils.invokeMethod(target, method, value); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { throw new IllegalArgumentException("Can't map bean: check target type declare '" + method + "' method.", e); } } }