package de.fau.cs.mad.fablab.android.model; import com.j256.ormlite.dao.RuntimeExceptionDao; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import de.fau.cs.mad.fablab.android.model.entities.AutoCompleteWords; import de.fau.cs.mad.fablab.rest.myapi.ProductApi; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; public class AutoCompleteModel { private RuntimeExceptionDao<AutoCompleteWords, Long> mAutoCompleteWordsDao; private ProductApi mProductApi; private Callback<List<String>> mAutocompleteCallback = new Callback<List<String>>() { @Override public void success(List<String> strings, Response response) { mAutoCompleteWordsDao.createOrUpdate(new AutoCompleteWords(strings.toArray( new String[strings.size()]))); } @Override public void failure(RetrofitError error) { //autocomplete does not work } }; public AutoCompleteModel(RuntimeExceptionDao<AutoCompleteWords, Long> autoCompleteWordsDao, ProductApi productApi) { mAutoCompleteWordsDao = autoCompleteWordsDao; mProductApi = productApi; loadProductNames(); } public void loadProductNames(){ AutoCompleteWords autoCompleteWords = mAutoCompleteWordsDao.queryForId(0L); if(autoCompleteWords == null || autoCompleteWords.needsRefresh()){ mProductApi.getAutoCompletions(mAutocompleteCallback); } } public void forceReloadProductNames() { if(mAutoCompleteWordsDao.queryForId(0L) != null) { mAutoCompleteWordsDao.deleteById(0L); } loadProductNames(); } public String[] getAutoCompleteWords(){ AutoCompleteWords autoCompleteWords = mAutoCompleteWordsDao.queryForId(0L); if(autoCompleteWords != null) { String[] words = autoCompleteWords.getPossibleAutoCompleteWords(); Collections.sort(Arrays.asList(words), new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareToIgnoreCase(o2); } }); return words; } return new String[0]; } }