/*
* Copyright (c) 2015-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
package com.facebook.datasource;
import com.facebook.common.internal.Preconditions;
/**
* Settable {@link DataSource}.
*/
public class SimpleDataSource<T> extends AbstractDataSource<T> {
private SimpleDataSource() {
}
/**
* Creates a new {@link SimpleDataSource}.
*/
public static <T> SimpleDataSource<T> create() {
return new SimpleDataSource<T>();
}
/**
* Sets the result to {@code value}.
*
* <p> This method will return {@code true} if the value was successfully set, or
* {@code false} if the data source has already been set, failed or closed.
*
* <p> If the value was successfully set and {@code isLast} is {@code true}, state of the
* data source will be set to {@link AbstractDataSource.DataSourceStatus#SUCCESS}.
*
* <p> This will also notify the subscribers if the value was successfully set.
*
* @param value the value to be set
* @param isLast whether or not the value is last.
* @return true if the value was successfully set.
*/
@Override
public boolean setResult(T value, boolean isLast) {
return super.setResult(Preconditions.checkNotNull(value), isLast);
}
/**
* Sets the value as the last result.
* <p> See {@link #setResult(T value, boolean isLast)}.
*/
public boolean setResult(T value) {
return super.setResult(Preconditions.checkNotNull(value), /* isLast */ true);
}
/**
* Sets the failure.
*
* <p> This method will return {@code true} if the failure was successfully set, or
* {@code false} if the data source has already been set, failed or closed.
*
* <p> If the failure was successfully set, state of the data source will be set to
* {@link AbstractDataSource.DataSourceStatus#FAILURE}.
*
* <p> This will also notify the subscribers if the failure was successfully set.
*
* @param throwable the failure cause to be set.
* @return true if the failure was successfully set.
*/
@Override
public boolean setFailure(Throwable throwable) {
return super.setFailure(Preconditions.checkNotNull(throwable));
}
/**
* Sets the progress.
*
* @param progress the progress in range [0, 1] to be set.
* @return true if the progress was successfully set.
*/
@Override
public boolean setProgress(float progress) {
return super.setProgress(progress);
}
}