/** * */ package net.conselldemallorca.helium.core.helper; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import ma.glasnost.orika.CustomConverter; import ma.glasnost.orika.MapperFacade; import ma.glasnost.orika.MapperFactory; import ma.glasnost.orika.impl.DefaultMapperFactory; import ma.glasnost.orika.metadata.Type; import net.conselldemallorca.helium.core.model.hibernate.Camp; import net.conselldemallorca.helium.core.model.hibernate.CampTasca; import net.conselldemallorca.helium.core.model.hibernate.Consulta; import net.conselldemallorca.helium.core.model.hibernate.Document; import net.conselldemallorca.helium.core.model.hibernate.Entorn; import net.conselldemallorca.helium.core.model.hibernate.Estat; import net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus; import net.conselldemallorca.helium.core.model.hibernate.SequenciaAny; import net.conselldemallorca.helium.core.model.hibernate.SequenciaDefaultAny; import net.conselldemallorca.helium.v3.core.api.dto.CampDto; import net.conselldemallorca.helium.v3.core.api.dto.CampTascaDto; import net.conselldemallorca.helium.v3.core.api.dto.CampTipusDto; import net.conselldemallorca.helium.v3.core.api.dto.ConsultaDto; import net.conselldemallorca.helium.v3.core.api.dto.DocumentDto; import net.conselldemallorca.helium.v3.core.api.dto.EntornDto; import net.conselldemallorca.helium.v3.core.api.dto.EstatDto; import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTipusDto; import net.conselldemallorca.helium.v3.core.api.dto.SequenciaAnyDto; import net.conselldemallorca.helium.v3.core.api.dto.SequenciaDefaultAnyDto; import org.springframework.stereotype.Component; /** * Helper per a convertir entre diferents formats de documents. * * @author Limit Tecnologies <limit@limit.es> */ @Component public class ConversioTipusHelper { private MapperFactory mapperFactory; public ConversioTipusHelper() { mapperFactory = new DefaultMapperFactory.Builder().build(); mapperFactory.getConverterFactory().registerConverter( new CustomConverter<Document, DocumentDto>() { @Override public DocumentDto convert(Document source, Type<? extends DocumentDto> destinationClass) { DocumentDto target = new DocumentDto(); target.setId(source.getId()); target.setCodi(source.getCodi()); target.setArxiuNom(source.getArxiuNom()); target.setDocumentNom(source.getNom()); target.setPlantilla(source.isPlantilla()); return target; } }); mapperFactory.getConverterFactory().registerConverter( new CustomConverter<Camp, CampDto>() { @Override public CampDto convert(Camp source, Type<? extends CampDto> destinationClass) { CampDto target = new CampDto(); target.setId(source.getId()); target.setCodi(source.getCodi()); target.setEtiqueta(source.getEtiqueta()); target.setObservacions(source.getObservacions()); target.setTipus( CampTipusDto.valueOf( source.getTipus().toString())); return target; } }); mapperFactory.getConverterFactory().registerConverter( new CustomConverter<CampTasca, CampTascaDto>() { public CampTascaDto convert(CampTasca source, Type<? extends CampTascaDto> destinationClass) { CampTascaDto target = new CampTascaDto(); target.setId(source.getId()); target.setReadFrom(source.isReadFrom()); target.setWriteTo(source.isWriteTo()); target.setRequired(source.isRequired()); target.setReadOnly(source.isReadOnly()); target.setOrder(source.getOrder()); if (source.getCamp() != null) { target.setCamp(convertir(source.getCamp(), CampDto.class)); } return target; } }); mapperFactory.getConverterFactory().registerConverter( new CustomConverter<Consulta, ConsultaDto>() { @Override public ConsultaDto convert(Consulta source, Type<? extends ConsultaDto> destinationType) { ConsultaDto target = new ConsultaDto(); target.setCodi(source.getCodi()); target.setDescripcio(source.getDescripcio()); target.setExpedientTipus(convertir(source.getExpedientTipus(), ExpedientTipusDto.class)); target.setExportarActiu(source.isExportarActiu()); target.setFormatExport(source.getFormatExport()); target.setGenerica(source.isGenerica()); target.setId(source.getId()); target.setInformeContingut(source.getInformeContingut()); target.setInformeNom(source.getInformeNom()); target.setNom(source.getNom()); target.setOcultarActiu(source.isOcultarActiu()); target.setOrdre(source.getOrdre()); target.setValorsPredefinits(source.getValorsPredefinits()); return target; } }); mapperFactory.getConverterFactory().registerConverter( new CustomConverter<ExpedientTipus, ExpedientTipusDto>() { @Override public ExpedientTipusDto convert(ExpedientTipus source, Type<? extends ExpedientTipusDto> destinationType) { ExpedientTipusDto target = new ExpedientTipusDto(); target.setAnyActual(source.getAnyActual()); target.setCodi(source.getCodi()); target.setDemanaNumero(source.getDemanaNumero()); target.setDemanaTitol(source.getDemanaTitol()); target.setEntorn(convertir(source.getEntorn(), EntornDto.class)); if (source.getEstats() != null) target.setEstats(convertirList(source.getEstats(), EstatDto.class)); target.setExpressioNumero(source.getExpressioNumero()); target.setId(source.getId()); for (Consulta consulta : source.getConsultes()) { if (!consulta.isOcultarActiu()) { ConsultaDto consulte = new ConsultaDto(); consulte.setId(consulta.getId()); consulte.setNom(consulta.getNom()); target.getConsultes().add(consulte); } } target.setJbpmProcessDefinitionKey(source.getJbpmProcessDefinitionKey()); target.setNom(source.getNom()); target.setReiniciarCadaAny(source.isReiniciarCadaAny()); target.setResponsableDefecteCodi(source.getResponsableDefecteCodi()); target.setRestringirPerGrup(source.isRestringirPerGrup()); target.setSeleccionarAny(source.isSeleccionarAny()); target.setAmbRetroaccio(source.isAmbRetroaccio()); target.setReindexacioAsincrona(source.isReindexacioAsincrona()); target.setSequencia(source.getSequencia()); target.setSequenciaDefault(source.getSequenciaDefault()); target.setTeNumero(source.getTeNumero()); target.setTeTitol(source.getTeTitol()); target.setTramitacioMassiva(source.isTramitacioMassiva()); Map<Integer,SequenciaAnyDto> sequenciaAnyMap = new HashMap<Integer, SequenciaAnyDto>(); for (Entry<Integer, SequenciaAny> entry : source.getSequenciaAny().entrySet()) { SequenciaAny value = entry.getValue(); SequenciaAnyDto valueDto = new SequenciaAnyDto(); valueDto.setAny(value.getAny()); valueDto.setId(value.getId()); valueDto.setSequencia(value.getSequencia()); sequenciaAnyMap.put(entry.getKey(), valueDto); } target.setSequenciaAny(sequenciaAnyMap); Map<Integer,SequenciaDefaultAnyDto> sequenciaAnyDefaultMap = new HashMap<Integer, SequenciaDefaultAnyDto>(); for (Entry<Integer, SequenciaDefaultAny> entry : source.getSequenciaDefaultAny().entrySet()) { SequenciaDefaultAny value = entry.getValue(); SequenciaDefaultAnyDto valueDto = new SequenciaDefaultAnyDto(); valueDto.setAny(value.getAny()); valueDto.setId(value.getId()); valueDto.setSequenciaDefault(value.getSequenciaDefault()); sequenciaAnyDefaultMap.put(entry.getKey(), valueDto); } target.setSequenciaDefaultAny(sequenciaAnyDefaultMap); return target; } }); mapperFactory.getConverterFactory().registerConverter( new CustomConverter<ExpedientTipusDto, ExpedientTipus>() { @Override public ExpedientTipus convert(ExpedientTipusDto source, Type<? extends ExpedientTipus> destinationType) { ExpedientTipus target = new ExpedientTipus(); target.setAnyActual(source.getAnyActual()); target.setCodi(source.getCodi()); target.setDemanaNumero(source.isDemanaNumero()); target.setDemanaTitol(source.isDemanaTitol()); target.setEntorn(convertir(source.getEntorn(), Entorn.class)); target.setEstats(convertirList(source.getEstats(), Estat.class)); target.setExpressioNumero(source.getExpressioNumero()); target.setId(source.getId()); target.setJbpmProcessDefinitionKey(source.getJbpmProcessDefinitionKey()); target.setNom(source.getNom()); target.setReiniciarCadaAny(source.isReiniciarCadaAny()); target.setResponsableDefecteCodi(source.getResponsableDefecteCodi()); target.setRestringirPerGrup(source.isRestringirPerGrup()); target.setSeleccionarAny(source.isSeleccionarAny()); target.setAmbRetroaccio(source.isAmbRetroaccio()); target.setReindexacioAsincrona(source.isReindexacioAsincrona()); target.setSequencia(source.getSequencia()); target.setSequenciaDefault(source.getSequenciaDefault()); target.setTeNumero(source.isTeNumero()); target.setTeTitol(source.isTeTitol()); target.setTramitacioMassiva(source.isTramitacioMassiva()); SortedMap<Integer, SequenciaAny> sequenciaAnySorted = new TreeMap<Integer, SequenciaAny>(); for (Entry<Integer, SequenciaAnyDto> entry : source.getSequenciaAny().entrySet()) { SequenciaAnyDto valueDto = entry.getValue(); SequenciaAny value = new SequenciaAny(); value.setAny(valueDto.getAny()); value.setId(valueDto.getId()); value.setSequencia(valueDto.getSequencia()); sequenciaAnySorted.put(entry.getKey(), value); } target.setSequenciaAny(sequenciaAnySorted); SortedMap<Integer, SequenciaDefaultAny> sequenciaAnyDefaultSorted = new TreeMap<Integer, SequenciaDefaultAny>(); for (Entry<Integer, SequenciaDefaultAnyDto> entry : source.getSequenciaDefaultAny().entrySet()) { SequenciaDefaultAnyDto valueDto = entry.getValue(); SequenciaDefaultAny value = new SequenciaDefaultAny(); value.setAny(valueDto.getAny()); value.setId(valueDto.getId()); value.setSequenciaDefault(valueDto.getSequenciaDefault()); sequenciaAnyDefaultSorted.put(entry.getKey(), value); } target.setSequenciaDefaultAny(sequenciaAnyDefaultSorted); return target; } }); } public <T> T convertir(Object source, Class<T> targetType) { if (source == null) return null; return getMapperFacade().map(source, targetType); } public <T> List<T> convertirList(List<?> items, Class<T> targetType) { if (items == null) return null; return getMapperFacade().mapAsList(items, targetType); } public <T> Set<T> convertirSet(Set<?> items, Class<T> targetType) { if (items == null) return null; return getMapperFacade().mapAsSet(items, targetType); } private MapperFacade getMapperFacade() { return mapperFactory.getMapperFacade(); } }