package org.molgenis.data;
import com.google.common.collect.ForwardingObject;
import org.molgenis.data.aggregation.AggregateQuery;
import org.molgenis.data.aggregation.AggregateResult;
import org.molgenis.data.meta.model.EntityType;
import org.molgenis.data.support.QueryImpl;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.stream.Stream;
/**
* Abstract superclass for {@link Repository} decorators that delegates everything to the
* decorated repository.
*/
public abstract class AbstractRepositoryDecorator<E extends Entity> extends ForwardingObject implements Repository<E>
{
@Override
protected abstract Repository<E> delegate();
@Override
public Iterator<E> iterator()
{
return delegate().iterator();
}
@Override
public void forEachBatched(Fetch fetch, Consumer<List<E>> consumer, int batchSize)
{
delegate().forEachBatched(fetch, consumer, batchSize);
}
@Override
public void close() throws IOException
{
delegate().close();
}
@Override
public String getName()
{
return delegate().getName();
}
@Override
public EntityType getEntityType()
{
return delegate().getEntityType();
}
@Override
public long count()
{
return delegate().count();
}
@Override
public Query<E> query()
{
// do not forward to delegate, since we want for example query.findAll() to be called on this repository
return new QueryImpl<>(this);
}
@Override
public long count(Query<E> q)
{
return delegate().count(q);
}
@Override
public Stream<E> findAll(Query<E> q)
{
return delegate().findAll(q);
}
@Override
public E findOne(Query<E> q)
{
return delegate().findOne(q);
}
@Override
public AggregateResult aggregate(AggregateQuery aggregateQuery)
{
return delegate().aggregate(aggregateQuery);
}
@Override
public E findOneById(Object id)
{
return delegate().findOneById(id);
}
@Override
public E findOneById(Object id, Fetch fetch)
{
return delegate().findOneById(id, fetch);
}
@Override
public Stream<E> findAll(Stream<Object> ids)
{
return delegate().findAll(ids);
}
@Override
public Stream<E> findAll(Stream<Object> ids, Fetch fetch)
{
return delegate().findAll(ids, fetch);
}
@Override
public Set<QueryRule.Operator> getQueryOperators()
{
return delegate().getQueryOperators();
}
@Override
public Set<RepositoryCapability> getCapabilities()
{
return delegate().getCapabilities();
}
@Override
public void update(E entity)
{
delegate().update(entity);
}
@Override
public void delete(E entity)
{
delegate().delete(entity);
}
@Override
public void deleteById(Object id)
{
delegate().deleteById(id);
}
@Override
public void deleteAll()
{
delegate().deleteAll();
}
@Override
public void add(E entity)
{
delegate().add(entity);
}
@Override
public Integer add(Stream<E> entities)
{
return delegate().add(entities);
}
@Override
public void update(Stream<E> entities)
{
delegate().update(entities);
}
@Override
public void delete(Stream<E> entities)
{
delegate().delete(entities);
}
@Override
public void deleteAll(Stream<Object> ids)
{
delegate().deleteAll(ids);
}
}