/**
* <copyright>
*
* Copyright (c) 2005 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*
* </copyright>
*
* $Id: DelegatingSet.java,v 1.1 2009/11/25 09:15:05 tschindl Exp $
*/
package org.eclipse.emf.databinding.internal;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
/**
* {@link Set} which is backed by an {@link List}
* @param <E> the element type
*/
public class DelegatingSet<E> implements Set<E>
{
private List<E> wrappedList;
/**
* Create a new delegating set
* @param wrappedList the wrapped set
*/
public DelegatingSet(List<E> wrappedList)
{
this.wrappedList = wrappedList;
}
public boolean add(E o)
{
return wrappedList.add(o);
}
public boolean addAll(Collection< ? extends E> c)
{
return wrappedList.addAll(c);
}
public void clear()
{
wrappedList.clear();
}
public boolean contains(Object o)
{
return wrappedList.contains(o);
}
public boolean containsAll(Collection< ? > c)
{
return wrappedList.containsAll(c);
}
public boolean isEmpty()
{
return wrappedList.isEmpty();
}
public Iterator<E> iterator()
{
return wrappedList.iterator();
}
public boolean remove(Object o)
{
return wrappedList.remove(o);
}
public boolean removeAll(Collection< ? > c)
{
return wrappedList.removeAll(c);
}
public boolean retainAll(Collection< ? > c)
{
return wrappedList.retainAll(c);
}
public int size()
{
return wrappedList.size();
}
public Object[] toArray()
{
return wrappedList.toArray();
}
public <T> T[] toArray(T[] a)
{
return wrappedList.toArray(a);
}
@Override
public boolean equals(Object obj)
{
boolean rv = false;
if (obj instanceof Set< ? >)
{
Set< ? > tmp = (Set< ? >)obj;
if (wrappedList.size() == tmp.size())
{
if (wrappedList.containsAll(tmp))
{
rv = true;
}
}
}
return rv;
}
@Override
public int hashCode()
{
int rv = 0;
for (Object o : wrappedList)
{
if (o != null)
{
rv += o.hashCode();
}
}
return rv;
}
}