001package io.ebeaninternal.xmlmapping;
002
003import io.ebeaninternal.xmapping.api.XmapDto;
004import io.ebeaninternal.xmapping.api.XmapEbean;
005import io.ebeaninternal.xmapping.api.XmapEntity;
006import io.ebeaninternal.xmapping.api.XmapNamedQuery;
007import io.ebeaninternal.xmapping.api.XmapRawSql;
008import io.ebeaninternal.xmlmapping.model.XmAliasMapping;
009import io.ebeaninternal.xmlmapping.model.XmColumnMapping;
010import io.ebeaninternal.xmlmapping.model.XmDto;
011import io.ebeaninternal.xmlmapping.model.XmEbean;
012import io.ebeaninternal.xmlmapping.model.XmEntity;
013import io.ebeaninternal.xmlmapping.model.XmNamedQuery;
014import io.ebeaninternal.xmlmapping.model.XmRawSql;
015
016import java.util.List;
017
018import static java.util.stream.Collectors.toList;
019
020public class ToXmapEbean {
021
022  public List<XmapEbean> toBeans(List<XmEbean> xmBeans) {
023    return xmBeans.stream()
024      .map(this::toBean)
025      .collect(toList());
026  }
027
028  private XmapEbean toBean(XmEbean bean) {
029    XmapEbean xmap = new XmapEbean();
030    xmap.getDto().addAll(toDto(bean.getDto()));
031    xmap.getEntity().addAll(toEntity(bean.getEntity()));
032    return xmap;
033  }
034
035  private List<XmapEntity> toEntity(List<XmEntity> xmEntity) {
036    return xmEntity.stream()
037      .map(this::toEntity)
038      .collect(toList());
039  }
040
041  private XmapEntity toEntity(XmEntity xmEntity) {
042    XmapEntity entity = new XmapEntity(xmEntity.getClazz());
043    for (XmNamedQuery named : xmEntity.getNamedQuery()) {
044      entity.getNamedQuery().add(toNamed(named));
045    }
046    for (XmRawSql xmRawSql : xmEntity.getRawSql()) {
047      entity.getRawSql().add(toRaw(xmRawSql));
048    }
049    return entity;
050  }
051
052  private XmapNamedQuery toNamed(XmNamedQuery named) {
053    return new XmapNamedQuery(named.getName(), named.getQuery().getValue());
054  }
055
056  private List<XmapDto> toDto(List<XmDto> dto) {
057    return dto.stream()
058      .map(this::toDto)
059      .collect(toList());
060  }
061
062  private XmapDto toDto(XmDto xmapDto) {
063    XmapDto dto = new XmapDto(xmapDto.getClazz());
064    dto.getRawSql().addAll(toRaw(xmapDto.getRawSql()));
065    return dto;
066  }
067
068  private List<XmapRawSql> toRaw(List<XmRawSql> rawSql) {
069    return rawSql.stream()
070      .map(this::toRaw)
071      .collect(toList());
072  }
073
074  private XmapRawSql toRaw(XmRawSql xmRawSql) {
075    XmapRawSql rawSql = new XmapRawSql(xmRawSql.getName(), xmRawSql.getQuery().getValue());
076    for (XmColumnMapping xmCol : xmRawSql.getColumnMapping()) {
077      rawSql.addColumnMapping(xmCol.getColumn(), xmCol.getProperty());
078    }
079    for (XmAliasMapping xmAlias : xmRawSql.getAliasMapping()) {
080      rawSql.addAliasMapping(xmAlias.getAlias(), xmAlias.getProperty());
081    }
082    return rawSql;
083  }
084
085}