package org.maepaysoh.maepaysohsdk; import android.content.Context; import android.database.SQLException; import android.os.AsyncTask; import java.util.HashMap; import java.util.List; import java.util.Map; import org.maepaysoh.maepaysohsdk.api.CandidateService; import org.maepaysoh.maepaysohsdk.api.RetrofitHelper; import org.maepaysoh.maepaysohsdk.db.CandidateDao; import org.maepaysoh.maepaysohsdk.models.Candidate; import org.maepaysoh.maepaysohsdk.models.CandidateDetailReturnObject; import org.maepaysoh.maepaysohsdk.models.CandidateListReturnObject; import org.maepaysoh.maepaysohsdk.models.Constituency; import org.maepaysoh.maepaysohsdk.utils.CandidateAPIProperties; import org.maepaysoh.maepaysohsdk.utils.CandidateAPIPropertiesMap; import retrofit.Callback; import retrofit.RestAdapter; /** * Created by yemyatthu on 8/11/15. */ public class CandidateAPIHelper { private RestAdapter mCandidateRestAdapter; private CandidateService mCandidateService; private CandidateDao mCandidateDao; private Context mContext; public CandidateAPIHelper(String token, Context context) { mCandidateRestAdapter = RetrofitHelper.getResAdapter(token); mCandidateService = mCandidateRestAdapter.create(CandidateService.class); mContext = context; } /** * Get the List of {@link Candidate} asynchronously. * * @param callback - Retrofit {@link Callback} */ public void getCandidatesAsync(Callback<CandidateListReturnObject> callback) { getCandidatesAsync(new CandidateAPIPropertiesMap(), callback); } /** * Get the List of {@link Candidate} asynchronously. * * @param propertiesMap - {@link CandidateAPIPropertiesMap} to call with {@link * CandidateAPIProperties} * @param callback - Retrofit {@link Callback} */ public void getCandidatesAsync(CandidateAPIPropertiesMap propertiesMap, Callback<CandidateListReturnObject> callback) { String gender = propertiesMap.getString(CandidateAPIProperties.GENDER, ""); String religion = propertiesMap.getString(CandidateAPIProperties.RELIGION, ""); String legislature = propertiesMap.getString(CandidateAPIProperties.LEGISLATURE, ""); boolean withParty = propertiesMap.getBoolean(CandidateAPIProperties.WITH_PARTY, false); boolean unicode = propertiesMap.getBoolean(CandidateAPIProperties.IS_UNICODE, Utils.isUniCode(mContext)); int firstPage = propertiesMap.getInteger(CandidateAPIProperties.FIRST_PAGE, 1); int perPage = propertiesMap.getInteger(CandidateAPIProperties.PER_PAGE, 15); Map<CandidateService.PARAM_FIELD, String> optionParams = new HashMap<>(); if (withParty) { optionParams.put(CandidateService.PARAM_FIELD._with, Constants.WITH_PARTY); } if (unicode) { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.UNICODE); } else { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.ZAWGYI); } optionParams.put(CandidateService.PARAM_FIELD.gender, gender); optionParams.put(CandidateService.PARAM_FIELD.religion, religion); optionParams.put(CandidateService.PARAM_FIELD.page, String.valueOf(firstPage)); optionParams.put(CandidateService.PARAM_FIELD.per_page, String.valueOf(perPage)); optionParams.put(CandidateService.PARAM_FIELD.legislature, legislature); mCandidateService.listCandidatesAsync(optionParams, callback); } public List<Candidate> getCandidates() { return getCandidates(new CandidateAPIPropertiesMap()); } /** * Get the List of {@link Candidate} synchronously. * Please note that Network calls in Android needs to be run with a background thread. * Therefore, you might want to call this method with e.g {@link AsyncTask}. * * @param propertiesMap - {@link CandidateAPIPropertiesMap} to call with {@link * CandidateAPIProperties} * @return List of {@link Candidate} */ public List<Candidate> getCandidates(CandidateAPIPropertiesMap propertiesMap) { String gender = propertiesMap.getString(CandidateAPIProperties.GENDER, ""); String religion = propertiesMap.getString(CandidateAPIProperties.RELIGION, ""); String legislature = propertiesMap.getString(CandidateAPIProperties.LEGISLATURE, ""); boolean withParty = propertiesMap.getBoolean(CandidateAPIProperties.WITH_PARTY, false); boolean unicode = propertiesMap.getBoolean(CandidateAPIProperties.IS_UNICODE, Utils.isUniCode(mContext)); int firstPage = propertiesMap.getInteger(CandidateAPIProperties.FIRST_PAGE, 1); int perPage = propertiesMap.getInteger(CandidateAPIProperties.PER_PAGE, 15); boolean cache = propertiesMap.getBoolean(CandidateAPIProperties.CACHE, true); mCandidateDao = new CandidateDao(mContext); Map<CandidateService.PARAM_FIELD, String> optionParams = new HashMap<>(); if (withParty) { optionParams.put(CandidateService.PARAM_FIELD._with, Constants.WITH_PARTY); } if (unicode) { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.UNICODE); } else { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.ZAWGYI); } optionParams.put(CandidateService.PARAM_FIELD.page, String.valueOf(firstPage)); optionParams.put(CandidateService.PARAM_FIELD.per_page, String.valueOf(perPage)); optionParams.put(CandidateService.PARAM_FIELD.gender, gender); optionParams.put(CandidateService.PARAM_FIELD.religion, religion); optionParams.put(CandidateService.PARAM_FIELD.legislature, legislature); CandidateListReturnObject returnObject = mCandidateService.listCandidates(optionParams); if (cache) { for (Candidate data : returnObject.getData()) { try { mCandidateDao.createCandidate(data); } catch (SQLException e) { e.printStackTrace(); } } } return returnObject.getData(); } public void getCandidateByIdAsync(String candidateId, Callback<CandidateDetailReturnObject> returnObjectCallback) { getCandidateByIdAsync(candidateId, new CandidateAPIPropertiesMap(), returnObjectCallback); } /** * Get the specific {@link Candidate} by Id asynchronously. * * @param candidateId - Candidate Id * @param candidateAPIPropertiesMap - {@link CandidateAPIPropertiesMap} to call with {@link * CandidateAPIProperties} * @param callback - Retrofit {@link Callback} */ public void getCandidateByIdAsync(String candidateId, CandidateAPIPropertiesMap candidateAPIPropertiesMap, Callback<CandidateDetailReturnObject> callback) { boolean withParty = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.WITH_PARTY, false); boolean unicode = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.IS_UNICODE, Utils.isUniCode(mContext)); Map<CandidateService.PARAM_FIELD, String> optionParams = new HashMap<>(); if (withParty) { optionParams.put(CandidateService.PARAM_FIELD._with, Constants.WITH_PARTY); } if (unicode) { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.UNICODE); } else { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.ZAWGYI); } mCandidateService.getCandidateByIdAsync(candidateId, optionParams, callback); } public Candidate getCandidateById(String candidateId) { return getCandidateById(candidateId, new CandidateAPIPropertiesMap()); } /** * Get the specific {@link Candidate} by Id synchronously. * * @param candidateId - Candidate Id * @param candidateAPIPropertiesMap - {@link CandidateAPIPropertiesMap} to call with {@link * CandidateAPIProperties} * @return The requested {@link Candidate} */ public Candidate getCandidateById(String candidateId, CandidateAPIPropertiesMap candidateAPIPropertiesMap) { boolean withParty = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.WITH_PARTY, false); boolean unicode = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.IS_UNICODE, Utils.isUniCode(mContext)); boolean cache = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.CACHE, true); Map<CandidateService.PARAM_FIELD, String> optionParams = new HashMap<>(); if (withParty) { optionParams.put(CandidateService.PARAM_FIELD._with, Constants.WITH_PARTY); } if (unicode) { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.UNICODE); } else { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.ZAWGYI); } CandidateDetailReturnObject returnObject = mCandidateService.getCandidateById(candidateId, optionParams); Candidate candidate = returnObject.getCandidate(); if (cache) { mCandidateDao.createCandidate(candidate); } return candidate; } /** * Get the cached Candidates from Db * * @return List of {@link Candidate} */ public List<Candidate> getCandidatesFromCache() { mCandidateDao = new CandidateDao(mContext); return mCandidateDao.getAllCandidateData(); } /** * Get a cached Candidate by Id from Db * * @return The requested {@link Candidate} */ public Candidate getCandidateByIdFromCache(String candidateId) { mCandidateDao = new CandidateDao(mContext); return mCandidateDao.getCandidateById(candidateId); } /** * Search {@link Candidate} by a keyword * * @param keyword - the keyword you want to search * @return - List of Candidate matches with the keyword */ public List<Candidate> searchCandidateFromCache(String keyword) { mCandidateDao = new CandidateDao(mContext); try { return mCandidateDao.searchCandidatesFromDb(keyword); } catch (SQLException e) { e.printStackTrace(); return null; } } /** * Get List the {@link Candidate} by {@link Constituency} * * @param stPcode - {@link Constituency} street code * @param dtPcode - {@link Constituency} district code * @param candidateAPIPropertiesMap - {@link CandidateAPIPropertiesMap} to call with {@link * CandidateAPIProperties} * @return List of {@link Candidate} */ public List<Candidate> getCandidatesByConstituency(String stPcode, String dtPcode, CandidateAPIPropertiesMap candidateAPIPropertiesMap) { boolean withParty = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.WITH_PARTY, false); boolean unicode = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.IS_UNICODE, Utils.isUniCode(mContext)); Map<CandidateService.PARAM_FIELD, String> optionParams = new HashMap<>(); if (withParty) { optionParams.put(CandidateService.PARAM_FIELD._with, Constants.WITH_PARTY); } if (unicode) { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.UNICODE); } else { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.ZAWGYI); } optionParams.put(CandidateService.PARAM_FIELD.constituency_st_pcode, stPcode); optionParams.put(CandidateService.PARAM_FIELD.constituency_dt_pcode, dtPcode); CandidateListReturnObject returnObject = mCandidateService.listCandidates(optionParams); return returnObject.getData(); } public List<Candidate> searchCandidateByName(String name,CandidateAPIPropertiesMap candidateAPIPropertiesMap){ boolean withParty = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.WITH_PARTY,false); boolean unicode = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.IS_UNICODE, Utils.isUniCode(mContext)); Map<CandidateService.PARAM_FIELD, String> optionParams = new HashMap<>(); if (withParty) { optionParams.put(CandidateService.PARAM_FIELD._with, Constants.WITH_PARTY); } if (unicode) { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.UNICODE); } else { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.ZAWGYI); } CandidateListReturnObject returnObject = mCandidateService.searchCandidateByName(name, optionParams); return returnObject.getData(); } public List<Candidate> searchCandidateByName(String name){ return searchCandidateByName(name, new CandidateAPIPropertiesMap()); } public void searchCandidateByNameAsync(String name,CandidateAPIPropertiesMap candidateAPIPropertiesMap ,Callback<CandidateListReturnObject> callback){ boolean withParty = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.WITH_PARTY,false); boolean unicode = candidateAPIPropertiesMap.getBoolean(CandidateAPIProperties.IS_UNICODE, Utils.isUniCode(mContext)); Map<CandidateService.PARAM_FIELD, String> optionParams = new HashMap<>(); if (withParty) { optionParams.put(CandidateService.PARAM_FIELD._with, Constants.WITH_PARTY); } if (unicode) { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.UNICODE); } else { optionParams.put(CandidateService.PARAM_FIELD.font, Constants.ZAWGYI); } mCandidateService.searchCandidateByNameAsync(name, optionParams,callback); } public void searchCandidateByNameAsync(String name,Callback<CandidateListReturnObject> callback){ searchCandidateByNameAsync(name,new CandidateAPIPropertiesMap(),callback); } }