package org.openntf.domino.types; import java.util.AbstractSet; import java.util.Iterator; import java.util.Map; import javolution.util.FastMap; public class ConcurrentCaseInsensitiveHashSet extends AbstractSet<String> { private Map<String, String> delegate = new FastMap<String, String>().atomic(); @Override public boolean add(final String e) { if (delegate.containsKey(e.toLowerCase())) return false; delegate.put(e.toLowerCase(), e); return true; } @Override public void clear() { delegate.clear(); } @Override public boolean contains(final Object arg0) { if (arg0 instanceof String) { return delegate.containsKey(((String) arg0).toLowerCase()); } return false; } @Override public boolean isEmpty() { return delegate.isEmpty(); } @Override public boolean remove(final Object arg0) { if (arg0 instanceof String) { return delegate.remove(((String) arg0).toLowerCase()) != null; } return false; } @Override public Iterator<String> iterator() { return delegate.values().iterator(); } @Override public int size() { return delegate.size(); } @Override public Object[] toArray() { return delegate.values().toArray(); } @Override public <T> T[] toArray(final T[] a) { return delegate.values().toArray(a); } @Override public String toString() { return delegate.values().toString(); } }