package org.openmrs.mobile.dao;
import net.sqlcipher.Cursor;
import net.sqlcipher.DatabaseUtils;
import net.sqlcipher.database.SQLiteDatabase;
import org.openmrs.mobile.databases.DBOpenHelper;
import org.openmrs.mobile.databases.OpenMRSDBOpenHelper;
import org.openmrs.mobile.databases.tables.ConceptTable;
import org.openmrs.mobile.models.Concept;
import java.util.ArrayList;
import java.util.List;
public class ConceptDAO {
public long saveOrUpdate(Concept concept) {
Concept foundConcept = findConceptsByUUID(concept.getUuid());
if (foundConcept != null) {
updateConcept(foundConcept.getId(), concept);
return foundConcept.getId();
}
else {
return saveConcept(concept);
}
}
public long saveConcept(Concept concept) {
return new ConceptTable().insert(concept);
}
public boolean updateConcept(long conceptID, Concept concept) {
return new ConceptTable().update(conceptID, concept) > 0;
}
public List<Concept> findConceptsByName(String name) {
List<Concept> result = new ArrayList<>();
String where = String.format("%s like ?", ConceptTable.Column.DISPLAY);
String[] whereArgs = new String[]{name + "%"};
DBOpenHelper helper = OpenMRSDBOpenHelper.getInstance().getDBOpenHelper();
final Cursor cursor = helper.getReadableDatabase().query(ConceptTable.TABLE_NAME, null, where, whereArgs, null, null, null);
if (null != cursor) {
try {
while (cursor.moveToNext()) {
result.add(cursorToConcept(cursor));
}
} finally {
cursor.close();
}
}
return result;
}
public Concept findConceptsByUUID(String uuid) {
String where = String.format("%s = ?", ConceptTable.Column.UUID);
String[] whereArgs = new String[]{uuid};
DBOpenHelper helper = OpenMRSDBOpenHelper.getInstance().getDBOpenHelper();
final Cursor cursor = helper.getReadableDatabase().query(ConceptTable.TABLE_NAME, null, where, whereArgs, null, null, null);
if (null != cursor) {
try {
if (cursor.moveToFirst()) {
return cursorToConcept(cursor);
}
} finally {
cursor.close();
}
}
return null;
}
public long getConceptsCount() {
SQLiteDatabase db = OpenMRSDBOpenHelper.getInstance().getDBOpenHelper().getReadableDatabase();
long cnt = DatabaseUtils.queryNumEntries(db, ConceptTable.TABLE_NAME);
db.close();
return cnt;
}
private Concept cursorToConcept(Cursor cursor) {
Concept concept = new Concept();
concept.setId(cursor.getLong(cursor.getColumnIndex(ConceptTable.Column.ID)));
concept.setDisplay(cursor.getString(cursor.getColumnIndex(ConceptTable.Column.DISPLAY)));
concept.setUuid(cursor.getString(cursor.getColumnIndex(ConceptTable.Column.UUID)));
return concept;
}
}