package net.bible.android.control.mynote; import net.bible.android.activity.R; import net.bible.android.control.ApplicationScope; import net.bible.android.view.activity.base.Dialogs; import net.bible.service.db.mynote.MyNoteDBAdapter; import net.bible.service.db.mynote.MyNoteDto; import org.crosswire.jsword.passage.Key; import org.crosswire.jsword.passage.KeyUtil; import org.crosswire.jsword.passage.Verse; import java.util.Collections; import java.util.Comparator; import java.util.List; import javax.inject.Inject; /** * MYNote Data access object */ @ApplicationScope public class MyNoteDAO { @Inject public MyNoteDAO() { } public String getMyNoteTextByKey(Key verseRange) { // get a dto MyNoteDto myNote = getMyNoteByStartVerse(verseRange); // return an empty note dto String noteText = ""; if (myNote!=null) { noteText = myNote.getNoteText(); } return noteText; } /** * get all myNotes * @param sortOrder */ public List<MyNoteDto> getAllMyNotes(MyNoteSortOrder sortOrder) { MyNoteDBAdapter db = new MyNoteDBAdapter(); List<MyNoteDto> myNoteList = null; try { db.open(); myNoteList = db.getAllMyNotes(); myNoteList = getSortedMyNotes(myNoteList, sortOrder); } finally { db.close(); } return myNoteList; } /** * get user note with this key if it exists or return null */ public MyNoteDto getMyNoteByStartVerse(Key key) { Verse startVerse = KeyUtil.getVerse(key); MyNoteDBAdapter db = new MyNoteDBAdapter(); MyNoteDto myNote = null; try { db.open(); myNote = db.getMyNoteByStartVerse(startVerse.getOsisRef()); } finally { db.close(); } return myNote; } /** * delete this user note (and any links to labels) */ public boolean deleteMyNote(MyNoteDto myNote) { boolean bOk = false; if (myNote != null && myNote.getId() != null) { MyNoteDBAdapter db = new MyNoteDBAdapter(); try { db.open(); bOk = db.removeMyNote(myNote); } finally { db.close(); } } return bOk; } /** * create a new myNote */ MyNoteDto addMyNote(MyNoteDto myNote) { MyNoteDBAdapter db = new MyNoteDBAdapter(); MyNoteDto newMyNote = null; try { db.open(); newMyNote = db.insertMyNote(myNote); } finally { db.close(); } return newMyNote; } /** * create a new myNote */ MyNoteDto updateMyNote(MyNoteDto myNote) { MyNoteDBAdapter db = new MyNoteDBAdapter(); MyNoteDto updatedMyNote = null; try { db.open(); updatedMyNote = db.updateMyNote(myNote); } finally { db.close(); } return updatedMyNote; } private List<MyNoteDto> getSortedMyNotes(List<MyNoteDto> myNoteList, MyNoteSortOrder sortOrder) { Comparator<MyNoteDto> comparator; switch (sortOrder) { case DATE_CREATED: comparator = new MyNoteCreationDateComparator(); break; case BIBLE_BOOK: default: comparator = new MyNoteDtoBibleOrderComparator(myNoteList); break; } // the new Java 7 sort is stricter and occasionally generates errors, so prevent total crash on listing notes try { Collections.sort(myNoteList, comparator); } catch (Exception e) { Dialogs.getInstance().showErrorMsg(R.string.error_occurred, e); } return myNoteList; } }