package com.ushahidi.platform.mobile.app.data.database;
import com.ushahidi.platform.mobile.app.data.entity.FormStageEntity;
import com.ushahidi.platform.mobile.app.data.exception.FormStageNotFoundException;
import android.content.Context;
import android.support.annotation.NonNull;
import java.util.List;
import javax.inject.Inject;
import rx.Observable;
import static nl.qbusict.cupboard.CupboardFactory.cupboard;
/**
* Form attribute database helper
*
* @author Henry Addo
*/
public class FormStageDatabaseHelper extends BaseDatabaseHelper {
/**
* Default constructor
*/
@Inject
public FormStageDatabaseHelper(@NonNull Context context) {
super(context);
}
/**
* Gets {@link FormStageEntity} associated with form entity
*
* @param deploymentId The deployment the form entity is attached to
* @param formId The formId to retrieve the form by
* @return Observable that emits a list of {@link FormStageEntity}
*/
public Observable<List<FormStageEntity>> getFormStageEntity(Long deploymentId,
Long formId) {
return Observable.create(subscriber -> {
final List<FormStageEntity> formStageEntities = cupboard()
.withDatabase(getReadableDatabase())
.query(FormStageEntity.class)
.withSelection("mDeploymentId = ?", String.valueOf(deploymentId))
.withSelection("mFormId = ?", String.valueOf(formId)).list();
if (formStageEntities != null && formStageEntities.size() > 0) {
subscriber.onNext(formStageEntities);
subscriber.onCompleted();
} else {
subscriber.onError(new FormStageNotFoundException());
}
});
}
public Observable<Long> putFormStageEntity(List<FormStageEntity> formStageEntity) {
return Observable.create(subscriber -> {
if (!isClosed()) {
try {
cupboard().withDatabase(getWritableDatabase()).put(formStageEntity);
} catch (Exception e) {
subscriber.onError(e);
}
int row = formStageEntity.size();
subscriber.onNext((long) row);
subscriber.onCompleted();
}
});
}
public void put(List<FormStageEntity> formStageEntity) {
cupboard().withDatabase(getWritableDatabase()).put(formStageEntity);
}
/**
* Clears all entries in the table
*/
public void clearEntries() {
cupboard().withDatabase(getWritableDatabase()).delete(FormStageEntity.class, null);
}
}