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

edu.stanford.protege.webprotege.place.ItemSelection Maven / Gradle / Ivy

The newest version!
package edu.stanford.protege.webprotege.place;

import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import org.semanticweb.owlapi.model.*;

import javax.annotation.Nonnull;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;

/**
 * @author Matthew Horridge, Stanford University, Bio-Medical Informatics Research Group, Date: 20/05/2014
 */
public class ItemSelection implements Iterable> {

    private final ImmutableList> items;

    private ItemSelection(Iterable> items) {
        this.items = ImmutableList.copyOf(items);
    }

    private ItemSelection() {
        this.items = ImmutableList.>builder().build();
    }

    public static  ItemSelection empty() {
        return new ItemSelection();
    }

    public List> getItems() {
        return items;
    }

    public int size() {
        return items.size();
    }

    public boolean isEmpty() {
        return items.isEmpty();
    }

    public boolean contains(Item item) {
        return items.contains(item);
    }

    public Optional> getFirst() {
        if(items.isEmpty()) {
            return Optional.empty();
        }
        else {
            return Optional.of(items.get(0));
        }
    }

    public Optional> getLast() {
        if(items.isEmpty()) {
            return Optional.empty();
        }
        else {
            return Optional.of(items.get(items.size() - 1));
        }
    }

    public  void visitItems(Item.Type type, Item.Handler handler) {
        for(Item item : items) {
            item.visit(type, handler);
        }
    }

    public Iterator> iterator() {
        return items.iterator();
    }

    @Override
    public String toString() {
        return MoreObjects.toStringHelper("ItemSelection")
                          .addValue(items).toString();
    }

    @Override
    public boolean equals(Object o) {
        if(o == this) {
            return true;
        }
        if(!(o instanceof ItemSelection)) {
            return false;
        }
        ItemSelection other = (ItemSelection) o;
        return this.items.equals(other.items);
    }

    @Override
    public int hashCode() {
        return "ItemSelection".hashCode() + items.hashCode();
    }


    public static Builder builder() {
        return new Builder();
    }

    public static class Builder {

        private final List> items = Lists.newArrayList();

        public Builder addItem(Item item) {
            items.add(item);
            return this;
        }

        public Builder addEntity(OWLEntity entity) {
            entity.accept(new OWLEntityVisitor() {
                @Override
                public void visit(@Nonnull OWLClass cls) {
                    items.add(new OWLClassItem(cls));
                }

                @Override
                public void visit(@Nonnull OWLObjectProperty property) {
                    items.add(new OWLObjectPropertyItem(property));
                }

                @Override
                public void visit(@Nonnull OWLDataProperty property) {
                    items.add(new OWLDataPropertyItem(property));
                }

                @Override
                public void visit(@Nonnull OWLNamedIndividual individual) {
                    items.add(new OWLNamedIndividualItem(individual));
                }

                @Override
                public void visit(@Nonnull OWLDatatype datatype) {

                }

                @Override
                public void visit(@Nonnull OWLAnnotationProperty property) {
                    items.add(new OWLAnnotationPropertyItem(property));
                }
            });
            return this;
        }

        public Builder addItems(ItemSelection itemSelection) {
            items.addAll(itemSelection.getItems());
            return this;
        }

        public Builder addItems(Collection> items) {
            this.items.addAll(items);
            return this;
        }

        public Builder clear() {
            items.clear();
            return this;
        }

        public ItemSelection build() {
            return new ItemSelection(items);
        }
    }

}