package org.infinispan.commons.configuration.attributes;
import java.util.HashMap;
import java.util.HashSet;
import org.infinispan.commons.logging.Log;
import org.infinispan.commons.logging.LogFactory;
/**
* CollectionAttributeCopier. This {@link AttributeCopier} can handle a handful of "known"
* collection types ( {@link HashSet}, {@link HashMap} )
*
* @author Tristan Tarrant
* @since 7.2
*/
public class CollectionAttributeCopier<T> implements AttributeCopier<T> {
private static final Log log = LogFactory.getLog(CollectionAttributeCopier.class);
public static final AttributeCopier<Object> INSTANCE = new CollectionAttributeCopier<>();
@SuppressWarnings("unchecked")
@Override
public T copyAttribute(T attribute) {
if (attribute == null) {
return null;
}
Class<?> klass = attribute.getClass();
if (HashSet.class.equals(klass)) {
return (T) new HashSet<>((HashSet<?>)attribute);
} else if (HashMap.class.equals(klass)) {
return (T) new HashMap<>((HashMap<?, ?>)attribute);
} else {
throw log.noAttributeCopierForType(klass);
}
}
}