package org.magenta.core;
import org.magenta.DataSet;
import org.magenta.DataStore;
import org.magenta.random.FluentRandom;
import com.google.common.base.Objects;
import com.google.common.base.Supplier;
/**
* Implementation of {@link DataSet} that persist data.
*
* @author ngagnon
*
* @param <D>
*/
public class PersistentDataSet<D> extends AbstractDataSet<D> {
private LazyLoadedList<D> persistedData;
private DataSet<D> source;
private Supplier<DataStore<D>> store;
/**
* Default constructor.
*
* @param dataset the data set to persist
* @param store the store to use for persistence
* @param randomizer the randomizer
*/
public PersistentDataSet(DataSet<D> dataset, Supplier<DataStore<D>> store, FluentRandom randomizer) {
super(dataset.getType(), randomizer);
this.source = dataset;
this.store = store;
this.persistedData = new LazyLoadedList<>(dataset, store);
}
@Override
public boolean isGenerated() {
return source.isGenerated();
}
@Override
public Iterable<D> get() {
return this.persistedData;
}
@Override
public boolean isPersistent() {
return true;
}
@Override
public DataSet<D> toTransient() {
return source;
}
@Override
public PersistentDataSet<D> persist() {
this.persistedData.flagAllAsNotPersisted();
return this;
}
@Override
public String toString() {
return Objects.toStringHelper(this).add("type", getType()).toString();
}
}