GrrDTOTransformer.java
package com.tradecloud.repository.goodsreceivedreceipt;
import com.tradecloud.dto.goodsreceivedreceipt.GrrItemValidationDTO;
import com.tradecloud.dto.goodsreceivedreceipt.GrrValidationDTO;
import org.hibernate.transform.ResultTransformer;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import static org.aspectj.runtime.internal.Conversions.longValue;
public class GrrDTOTransformer implements ResultTransformer {
private Map<Long, GrrValidationDTO> postDTOMap = new LinkedHashMap<>();
@Override
public Object transformTuple(
Object[] tuple,
String[] aliases) {
Map<String, Integer> aliasToIndexMap = aliasToIndexMap(aliases);
Long postId = longValue(tuple[aliasToIndexMap.get(GrrValidationDTO.ORDER_ID_ALIAS)]);
GrrValidationDTO postDTO = postDTOMap.computeIfAbsent(
postId,
id -> new GrrValidationDTO(tuple, aliasToIndexMap)
);
postDTO.getItems().add(new GrrItemValidationDTO(tuple, aliasToIndexMap));
return postDTO;
}
public Map<String, Integer> aliasToIndexMap(String[] aliases) {
Map<String, Integer> aliasToIndexMap = new LinkedHashMap<>();
for (int i = 0; i < aliases.length; i++) {
aliasToIndexMap.put(aliases[i], i);
}
return aliasToIndexMap;
}
@Override
public List transformList(List collection) {
return new ArrayList<>(postDTOMap.values());
}
}