package org.robobinding.property;
import org.robobinding.itempresentationmodel.DataSetObservable;
import org.robobinding.itempresentationmodel.RefreshableItemPresentationModel;
import org.robobinding.itempresentationmodel.RefreshableItemPresentationModelFactory;
/**
* @since 1.0
* @author Cheng Wei
*
*/
public abstract class AbstractDataSet implements PropertyChangeListener, DataSetObservable {
private final RefreshableItemPresentationModelFactory factory;
private final AbstractGetSet<Object> getSet;
private boolean isDataSetNotInitialized;
private Object dataSet;
@SuppressWarnings("unchecked")
public AbstractDataSet(RefreshableItemPresentationModelFactory factory, AbstractGetSet<?> getSet) {
this.factory = factory;
this.getSet = (AbstractGetSet<Object>)getSet;
isDataSetNotInitialized = true;
}
@SuppressWarnings("unchecked")
protected <DataSetType> DataSetType getDataSet() {
if (isDataSetNotInitialized) {
updateDataSet();
isDataSetNotInitialized = false;
}
return (DataSetType) dataSet;
}
protected void updateDataSet() {
dataSet = getSet.getValue();
}
protected boolean isDataSetNull() {
return getDataSet() == null;
}
public RefreshableItemPresentationModel newRefreshableItemPresentationModel(int itemViewType) {
return factory.create(itemViewType);
}
@Override
public void propertyChanged() {
updateDataSet();
}
}