package org.rhq.enterprise.server.resource.metadata;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CollectionsUtil {
/**
* Return a set containing those element that are in reference, but not in first. Both input sets are not modified
*
* @param <T>
* @param first
* @param reference
*
* @return
*/
static <T> Set<T> missingInFirstSet(Set<T> first, Set<T> reference) {
Set<T> result = new HashSet<T>();
if (reference != null) {
// First collection is null -> everything is missing
if (first == null) {
result.addAll(reference);
return result;
}
// else loop over the set and sort out the right items.
for (T item : reference) {
// if (!first.contains(item)) {
// result.add(item);
// }
boolean found = false;
Iterator<T> iter = first.iterator();
while (iter.hasNext()) {
T f = iter.next();
if (f.equals(item)) {
found = true;
break;
}
}
if (!found)
result.add(item);
}
}
return result;
}
/**
* Return a new Set with elements that are in the first and second passed collection.
* If one set is null, an empty Set will be returned.
* @param <T> Type of set
* @param first First set
* @param second Second set
*
* @return a new set (depending on input type) with elements in first and second
*/
static <T> Set<T> intersection(Set<T> first, Set<T> second) {
Set<T> result = new HashSet<T>();
if ((first != null) && (second != null)) {
result.addAll(first);
// result.retainAll(second);
Iterator<T> iter = result.iterator();
boolean found;
while (iter.hasNext()) {
T item = iter.next();
found = false;
for (T s : second) {
if (s.equals(item))
found = true;
}
if (!found)
iter.remove();
}
}
return result;
}
}