/**
* ResultTransformerUtil.java
*
* Mercer Inc.
* JBossMHR
* Copyright 2008 All Rights Reserved
* @since 1.0 May 14, 2008
* =============================================================================================
* $Id: ResultTransformerUtil.java,v 1.1 2008/05/14 14:44:23 abhishekm Exp $
* =============================================================================================
*/
package com.gisgraphy.hibernate.criterion;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.transform.AliasToBeanResultTransformer;
import org.hibernate.transform.ResultTransformer;
import com.gisgraphy.domain.valueobject.GisFeatureDistance;
import com.gisgraphy.domain.valueobject.GisFeatureDistanceFactory;
import com.gisgraphy.domain.valueobject.StreetDistance;
/**
* The Class ResultTransformerUtil.
*
* @author Abhishek Mirge
*/
public class ResultTransformerUtil<T> {
protected static GisFeatureDistanceFactory gisFeatureDistanceFactory = new GisFeatureDistanceFactory();
/**
* Transform to bean. See bug
* http://opensource.atlassian.com/projects/hibernate/browse/HHH-2463
*
* @param aliasList
* the alias list
* @param resultList
* the result list
*
* @return the list of GisFeatureDistance
*/
//TODO tests zip test
public static List<GisFeatureDistance> transformToGisFeatureDistance(String aliasList[], List<?> resultList, Map<Long, Set<String>> featureIdToZipCodesMap,Class clazz) {
List<GisFeatureDistance> results = new ArrayList<GisFeatureDistance>();
if (aliasList != null && !resultList.isEmpty()) {
ResultTransformer tr = new AliasToBeanResultTransformer(GisFeatureDistance.class);
Iterator<?> it = resultList.iterator();
Object[] obj;
GisFeatureDistance gisFeatureDistance;
while (it.hasNext()) {
obj = (Object[]) it.next();
gisFeatureDistance = (GisFeatureDistance) tr.transformTuple(obj, aliasList);
int indexInList = results.indexOf(gisFeatureDistance);
if (indexInList == -1) {
gisFeatureDistanceFactory.updateFields(gisFeatureDistance,clazz);
results.add(gisFeatureDistance);
if (featureIdToZipCodesMap != null){
gisFeatureDistance.setZipCodes(featureIdToZipCodesMap.get(gisFeatureDistance.getId()));
}
}
}
}
return results;
}
/**
* Transform to bean. See bug
* http://opensource.atlassian.com/projects/hibernate/browse/HHH-2463
*
* @param aliasList
* the alias list
* @param resultList
* the result list
*
* @return the list of {@link StreetDistance}
*/
public static List<StreetDistance> transformToStreetDistance(String aliasList[], List<?> resultList) {
List<StreetDistance> transformList = new ArrayList<StreetDistance>();
if (aliasList != null && !resultList.isEmpty()) {
AliasToBeanResultTransformer tr = new AliasToBeanResultTransformer(StreetDistance.class);
Iterator<?> it = resultList.iterator();
Object[] obj;
while (it.hasNext()) {
obj = (Object[]) it.next();
StreetDistance streetDistance = (StreetDistance) tr.transformTuple(obj, aliasList);
streetDistance.updateFields();
transformList.add(streetDistance);
}
}
return transformList;
}
}