package java.util;
import java.lang.reflect.Array;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2001
* Company:
* @version 1.0
*/
public abstract class AbstractCollection implements Collection
{
protected AbstractCollection()
{
}
public abstract Iterator iterator();
public abstract int size();
public boolean isEmpty()
{
return size()==0;
}
public boolean contains(Object o)
{
Iterator it=iterator();
while(it.hasNext())
{
Object e=it.next();
if(o==null)
{
if(e==null)
return true;
}
else
{
if(o.equals(e))
return true;
}
}
return false;
}
public Object[] toArray()
{
Object[] arObjects=new Object[size()];
Iterator it=iterator();
int i=0;
while(it.hasNext())
{
arObjects[i++]=it.next();
}
return arObjects;
}
public Object[] toArray(Object[] a) throws NullPointerException,ArrayStoreException
//TODO: Check if this is realy compatible to SUN!!!
{
if(a==null)
throw new NullPointerException();
if (isEmpty()) return a;
Object[] arObjects=null;
int size=size();
if(a.length<size)
{
Iterator it=iterator();
Object o=it.next();
if(o==null) //no object or object is null
throw new ArrayStoreException(); //correct ?
arObjects=(Object[])Array.newInstance(o.getClass(),size);
}
else
{
arObjects=a;
if(a.length>size)
arObjects[size]=null;
}
Iterator it=iterator();
int i=0;
while(it.hasNext())
{
Object o=it.next();
arObjects[i++]=o;
}
return arObjects;
}
public boolean add(Object o) throws UnsupportedOperationException,NullPointerException,ClassCastException,IllegalArgumentException
{
throw new UnsupportedOperationException();
}
public boolean remove(Object o) throws UnsupportedOperationException
{
Iterator it=iterator();
while(it.hasNext())
{
Object e=it.next();
if(o==null)
{
if(e==null)
{
try
{
it.remove();
}
catch(UnsupportedOperationException ue)
{
throw ue;
}
return true;
}
}
else
{
if(o.equals(e))
{
try
{
it.remove();
}
catch(UnsupportedOperationException ue)
{
throw ue;
}
return true;
}
}
}
return false;
}
public boolean containsAll(Collection c)
{
Iterator it=c.iterator();
while(it.hasNext())
{
if(!contains(it.next()))
return false;
}
return true;
}
public boolean addAll(Collection c) throws UnsupportedOperationException
{
Iterator it=c.iterator();
boolean ret=false;
while(it.hasNext())
{
try
{
ret|=add(it.next());
}
catch(UnsupportedOperationException ue)
{
throw ue;
}
}
return ret;
}
public boolean removeAll(Collection c) throws UnsupportedOperationException
{
Iterator it=iterator();
boolean ret=false;
while(it.hasNext())
{
if(c.contains(it.next()))
try
{
it.remove();
ret=true;
}
catch(UnsupportedOperationException ue)
{
throw ue;
}
}
return ret;
}
public boolean retainAll(Collection c) throws UnsupportedOperationException
{
Iterator it=iterator();
boolean ret=false;
while(it.hasNext())
{
if(!c.contains(it.next()))
try
{
it.remove();
ret=true;
}
catch(UnsupportedOperationException ue)
{
throw ue;
}
}
return ret;
}
public void clear() throws UnsupportedOperationException
{
Iterator it=iterator();
while(it.hasNext())
{
try
{
it.next();
it.remove();
}
catch(UnsupportedOperationException ue)
{
throw ue;
}
}
}
public String toString()
{
String ret="[";
Iterator it=iterator();
if(it.hasNext())
ret+=String.valueOf(it.next());
while(it.hasNext())
{
ret+=", ";
ret+=String.valueOf(it.next());
}
ret+="]";
return ret;
}
}