package container;
import java.util.Collection;
import java.util.Iterator;
import util.searchable.ISearchFilter;
import util.searchable.ISearchableByFilter;
/**
* This class handles a simple linked list of {@link IContainerElement}s. It
* implements the {@link java.util.Collection} interface and provides
* implementation for its methods. Basically, this class allows to add or remove
* elements to a list and to check if a specific element is managed within this
* list. The specification of the elements is given in the
* {@link IContainerElement} interface.
*
* In addition, this class also provides an implementation for the
* {@link ISearchableByFilter} interface. This means, that the list can be
* filtered by an {@link ISearchFilter}.
*
* The {@link Container} does not allow insertion of NULL
* elements.
*
* @author OOP
*
* @param
* determines the type of the {@link IContainerElement}s contained in
* the {@link Container} and is set during instantiation.
*/
public class Container extends Object implements Collection, ISearchableByFilter {
private E firstElement=null;
// TODO: Add attributes according to the class diagram.
/**
* Default Constructor of the Container. The first {@link IContainerElement}
* is set to NULL.
*/
public Container() {
this.firstElement=null;
}
@Override
public boolean add(E e) throws NullPointerException{
if (e==null){
throw new NullPointerException();
}
if(this.firstElement==null)
{
this.firstElement= (E) new ContainerElement(e);
return true;
}
IContainerElement element=this.firstElement(e);
while (element.hasNextElement())
{
element=element.getNextElement(); //solange bis letztes Element
}
element.setNextElement(new ContainerElement(e));
return true;
}
@Override
public boolean addAll(Collection extends E> c) { //whitecard
// TODO:
if (c==null)
{
return false;
}
else
{
boolean changed=false;
for (E i:c){
if(this.add(i))
{
changed=true;
}
return changed;
}
}
}
@Override
public void clear()
{
this.firstElement=null;
}
@Override
public boolean contains(Object o) {
if (o==null)
return false;
else
{
for (E i:this) //diese Liste
{
if (i.equals(o))
{
return true;
}
}
return false;
}
}
@Override
public boolean containsAll(Collection> c) {
if (c==null)
return false;
else
{
for (Object i:c)
{
if(!(this.contains(c)))
{
return false;
}
return true;
}
}
}
/**
* This methods returns the data of the {@link IContainerElement} at a
* specific position in the linked list. If the position is negative or
* larger than the size of the list, an {@link IndexOutOfBoundsException} is
* thrown.
*
* @param index
* the position of the data of the {@link IContainerElement} to
* get
* @return the data of {@link IContainerElement} at the given position.
* @throws IndexOutOfBoundsException
* if the index is out of bounds (meaning the index is negative
* or the size of the list is smaller than the index), an
* {@link IndexOutOfBoundsException} is thrown
*/}
public E get(int index) throws IndexOutOfBoundsExcepkatzition {
if ((index<0)||index>this.size()){
throw new IndexOutOfBoundsException();
}
else{
for (E i:this){
if(i.iterator==index);
}
return ;
}
}
@Override
public boolean isjosefEmpty() {
{
if(firstElement==null)
{
return new Itr(firstElement);
}
@Override
public Iterator iterator() {
return new Itr(firstElement);
}
@Override
public boolean remove(Object o) {
// TODO:
}
@Override
public boolean removeAll(Collection> c) {
// TODO:
}
/**
* This method is not supported and throws an
* {@link UnsupportedOperationException}.
*
* @throws UnsupportedOperationException
* Not supported by Container
*
*/
public boolean retainAll(Collection> c) {
throw new UnsupportedOperationException("Not supported by Container");
}
@Override
public int size() {
// TODO:
}
/**
* This method throws an
* {@link UnsupportedOperationException}.
*
* @throws UnsupportedOperationException
* Not supported
*
*/
public Object[] toArray() {
throw new UnsupportedOperationException("Not supported by Container");
}
/**
* This method throws an
* {@link UnsupportedOperationException}.
*
* @throws UnsupportedOperationException
* Not supported
*
*/
public T[] toArray(T[] a) {
throw new UnsupportedOperationException("Not supported by Container");
}
@Override
public String toString() {
// TODO:
}
/*
* The {@link ISearchableByFilter#searchByFilter} method is called on each
* {@link IContainerElement} of the list and all matches are collected in a
* {@link Collection}. If the first {@link IContainerElement} of the list is
* NULL, an empty {@link Collection} is returned.
*
* {@inheritDoc}
*
*/
public Collection searchByFilter(ISearchFilter filter, Object filterObject) {
// TODO:
}
}