1   package com.trendmicro.grid.acl.ds;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.List;
6   
7   /**
8    * Utilities to work with the data source api.
9    *
10   * @author juergen_kellerer, 2010-06-01
11   * @version 1.0
12   */
13  public class DSUtil {
14  
15  	/**
16  	 * Shortens casting the given source collection to a collection of the specified class.
17  	 *
18  	 * @param source the source to cast.
19  	 * @param cls	the class of the target collections elements.
20  	 * @param <E>    the class of the target collections elements.
21  	 * @return the given collection instance without any modification.
22  	 */
23  	@SuppressWarnings("unchecked")
24  	public static <E> Collection<E> cast(Collection<? extends E> source, Class<E> cls) {
25  		return (Collection<E>) source;
26  	}
27  
28  	/**
29  	 * Shortens casting the given source collection to a collection of the specified class.
30  	 *
31  	 * @param source the source to cast.
32  	 * @param cls	the class of the target collections elements.
33  	 * @param <E>    the class of the target collections elements.
34  	 * @return the given collection instance without any modification.
35  	 */
36  	@SuppressWarnings("unchecked")
37  	public static <E> List<E> cast(List<? extends E> source, Class<E> cls) {
38  		return (List<E>) source;
39  	}
40  
41  	/**
42  	 * Replaces all 'null' entries in the given collection with the specified value.
43  	 *
44  	 * @param source the source list.
45  	 * @param with   the replacement of 'null'.
46  	 * @param <E>    the type of the list elements.
47  	 * @return a collection that does not contain 'null' values.
48  	 */
49  	public static <E> Collection<E> replaceNulls(Collection<E> source, E with) {
50  		Collection<E> replacedList = source;
51  
52  		if (source != null && source.contains(null)) {
53  			replacedList = new ArrayList<E>(source.size());
54  			for (E e : source)
55  				replacedList.add(e == null ? with : e);
56  		}
57  
58  		return replacedList;
59  	}
60  
61  	private DSUtil() {
62  	}
63  }