package com.ushahidi.platform.mobile.app.data.repository;
import com.ushahidi.platform.mobile.app.data.entity.mapper.FormEntityDataMapper;
import com.ushahidi.platform.mobile.app.data.repository.datasource.form.FormDataSource;
import com.ushahidi.platform.mobile.app.data.repository.datasource.form.FormDataSourceFactory;
import com.ushahidi.platform.mobile.app.domain.entity.Form;
import com.ushahidi.platform.mobile.app.domain.entity.From;
import com.ushahidi.platform.mobile.app.domain.repository.FormRepository;
import android.support.annotation.NonNull;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Singleton;
import rx.Observable;
/**
* @author Ushahidi Team <team@ushahidi.com>
*/
@Singleton
public class FormDataRepository implements FormRepository {
private final FormDataSourceFactory mFormDataSourceFactory;
private final FormEntityDataMapper mFormEntityDataMapper;
/**
* Default constructor that creates {@link FormDataRepository}
*
* @param formDataSourceFactory A factory to create the different data source implementations
* @param formEntityDataMapper The @{link FormEntityDataMapper}
*/
@Inject
public FormDataRepository(@NonNull FormDataSourceFactory formDataSourceFactory,
FormEntityDataMapper formEntityDataMapper) {
mFormDataSourceFactory = formDataSourceFactory;
mFormEntityDataMapper = formEntityDataMapper;
}
@Override
public Observable<List<Form>> getForms(Long deploymentId, From from) {
FormDataSource formDataSource = null;
if (from.equals(From.DATABASE)) {
formDataSource = mFormDataSourceFactory.createDatabaseDataSource();
}
return formDataSource.getForms(deploymentId).map(mFormEntityDataMapper::map);
}
@Override
public Observable<Form> getForm(Long deploymentId, Long formId) {
final FormDataSource formDataSource = mFormDataSourceFactory.createDatabaseDataSource();
return formDataSource.getForm(deploymentId, formId).map(mFormEntityDataMapper::map);
}
@Override
public Observable<Long> putForm(Form form) {
final FormDataSource formDataSource = mFormDataSourceFactory.createDatabaseDataSource();
return formDataSource.putForm(mFormEntityDataMapper.map(form));
}
@Override
public Observable<Boolean> deleteForms(Long deploymentId) {
final FormDataSource formDataSource = mFormDataSourceFactory.createDatabaseDataSource();
return formDataSource.deleteForms(deploymentId);
}
}