package de.axone.equals;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
import de.axone.equals.SynchroMapper.DefaultSynchroMapper;
/**
* This synchromapper is used to handle hibernate runtime replaced lists/sets/maps
*
* This is needed because we have no way of instantiating hibernate's own lists
* which it puts in place instead of the ones we did spezify.
*
* (Hibernate needs this because it uses them to do lazy loading)
*
* Its a pity there is no way to determine Hash/Tree set / Linked/Array Lists
* which have different bahaviours
* because Hibernate has its own Implementations.
* TODO: Think hard!!!
* Evtl. können wir mit Testeinträgen testen???
*
* @author flo
*/
public class HibernateSynchroMapper extends DefaultSynchroMapper {
@Override
@SuppressWarnings( "rawtypes" )
public Object emptyInstanceOf( String name, Object object ) {
if( object instanceof List ){
if( object instanceof ArrayList ){
return new ArrayList();
} else {
return new LinkedList();
}
} else if( object instanceof Set ){
if( object instanceof TreeSet ){
return new TreeSet();
} else {
// Default
return new HashSet();
}
} else if( object instanceof Map ){
if( object instanceof TreeMap ){
return new TreeMap();
} else {
// Default
return new HashMap();
}
} else {
return super.emptyInstanceOf( name, object );
}
}
}