package jp.vmi.selenium.selenese.result;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import jp.vmi.selenium.selenese.command.ICommand;
import static jp.vmi.selenium.selenese.result.Unexecuted.*;
/**
* List of command result.
*/
public class CommandResultList implements List<CommandResult> {
private final List<CommandResult> list = new ArrayList<>();
private Result result = UNEXECUTED;
private long endTime = System.currentTimeMillis();
private CommandResultMap map = null;
@Override
public int size() {
return list.size();
}
@Override
public boolean isEmpty() {
return list.isEmpty();
}
@Override
public boolean add(CommandResult cresult) {
if (result.compareTo(cresult.getResult()) < 0)
result = cresult.getResult();
list.add(cresult);
long endTime = cresult.getEndTime();
if (this.endTime < endTime)
this.endTime = endTime;
return true;
}
@Override
public boolean addAll(Collection<? extends CommandResult> cresults) {
for (CommandResult cresult : cresults)
add(cresult);
return true;
}
@Override
public CommandResult get(int index) {
return list.get(index);
}
/**
* Set result.
*
* @param result result.
* @return same as result.
*/
public Result setResult(Result result) {
return this.result = result;
}
/**
* Get latest result.
*
* @return latest result.
*/
public Result getResult() {
return result;
}
@Override
public Iterator<CommandResult> iterator() {
return list.iterator();
}
@Override
public ListIterator<CommandResult> listIterator() {
return list.listIterator();
}
@Override
public ListIterator<CommandResult> listIterator(int index) {
return list.listIterator(index);
}
@Override
public List<CommandResult> subList(int fromIndex, int toIndex) {
return list.subList(fromIndex, toIndex);
}
@Override
public Object[] toArray() {
return list.toArray();
}
@Override
public <T> T[] toArray(T[] a) {
return list.toArray(a);
}
/**
* Get end time of last command.
*
* @return end time. (ms)
*/
public long getEndTime() {
return endTime;
}
/**
* Get results of the command.
*
* @param command command.
* @return results.
*/
public List<CommandResult> getResults(ICommand command) {
if (map == null)
map = new CommandResultMap(this);
return map.get(command);
}
/**
* Set end time.
*
* @param endTime end time.
*/
public void setEndTime(long endTime) {
this.endTime = endTime;
}
// The following methods are not implemented.
@Override
public CommandResult set(int index, CommandResult element) {
throw new UnsupportedOperationException();
}
@Override
public void add(int index, CommandResult element) {
throw new UnsupportedOperationException();
}
@Override
public int indexOf(Object o) {
throw new UnsupportedOperationException();
}
@Override
public int lastIndexOf(Object o) {
throw new UnsupportedOperationException();
}
@Override
public boolean contains(Object o) {
throw new UnsupportedOperationException();
}
@Override
public boolean containsAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
@Override
public boolean addAll(int index, Collection<? extends CommandResult> c) {
throw new UnsupportedOperationException();
}
@Override
public boolean retainAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
@Override
public CommandResult remove(int index) {
throw new UnsupportedOperationException();
}
@Override
public boolean remove(Object o) {
throw new UnsupportedOperationException();
}
@Override
public boolean removeAll(Collection<?> c) {
throw new UnsupportedOperationException();
}
@Override
public void clear() {
throw new UnsupportedOperationException();
}
}