All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aksw.commons.collections.frontier.FrontierImpl Maven / Gradle / Ivy

There is a newer version: 0.9.9
Show newest version
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