org.aksw.commons.collections.frontier.FrontierImpl Maven / Gradle / Ivy
package org.aksw.commons.collections.frontier;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import com.google.common.collect.Sets;
public class FrontierImpl
implements Frontier
{
protected Collection open;
protected Collection done;
public FrontierImpl() {
this(new HashSet(), new HashSet());
}
public FrontierImpl(Collection open, Collection done) {
super();
this.open = open;
this.done = done;
}
@Override
public void add(T item) {
//Assert.notNull(item, "Cannot add a null item to frontier");
boolean isAlreadyDone = done.contains(item);
if(!isAlreadyDone) {
open.add(item);
}
}
@Override
public T next() {
T result;
Iterator it = open.iterator();
if(it.hasNext()) {
result = it.next();
done.add(result);
it.remove();
} else {
result = null;
}
return result;
}
@Override
public boolean isEmpty() {
boolean result = open.isEmpty();
return result;
}
public static FrontierImpl createIdentityFrontier() {
FrontierImpl result = new FrontierImpl(Sets.newIdentityHashSet(), Sets.newIdentityHashSet());
return result;
}
@Override
public FrontierStatus getStatus(Object item) {
FrontierStatus result;
boolean isDone = done.contains(item);
boolean isOpen = open.contains(item);
if(isDone) {
if(isOpen) {
throw new IllegalStateException();
} else {
result = FrontierStatus.DONE;
}
} else {
result = isOpen ? FrontierStatus.OPEN : FrontierStatus.UNKNOWN;
}
return result;
}
@Override
public void setStatus(T item, FrontierStatus status) {
switch(status) {
case DONE: {
open.remove(item);
done.add(item);
break;
}
case OPEN: {
done.remove(item);
open.add(item);
break;
}
case UNKNOWN: {
done.remove(item);
open.remove(item);
break;
}
default: {
throw new IllegalStateException();
}
}
}
@Override
public String toString() {
return "FrontierImpl [open=" + open + ", done=" + done + "]";
}
@Override
public boolean contains(Object item) {
boolean result = open.contains(item) || done.contains(item);
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy