package co.touchlab.droidconandroid.tasks; import android.content.Context; import java.net.HttpURLConnection; import java.sql.SQLException; import co.touchlab.droidconandroid.data.DatabaseHelper; import co.touchlab.droidconandroid.data.UserAccount; import co.touchlab.droidconandroid.network.DataHelper; import co.touchlab.droidconandroid.network.FindUserRequest; import co.touchlab.droidconandroid.network.dao.UserInfoResponse; import co.touchlab.droidconandroid.presenter.AppManager; import retrofit.RestAdapter; import retrofit.RetrofitError; /** * Created by kgalligan on 4/8/16. */ public class FindUserTask extends AbstractFindUserTask { final String code; public FindUserTask(String code) { this.code = code; } @Override protected void run(final Context context) throws Throwable { handleData(context, new LoadFromDb() { @Override public UserAccount load() throws SQLException { DatabaseHelper databaseHelper = DatabaseHelper.getInstance(context); return UserAccount.findByCode(databaseHelper, code); } }, new LoadUserInfo() { @Override public UserInfoResponse load() { RestAdapter restAdapter = DataHelper.makeRequestAdapter(context, AppManager.getPlatformClient()); FindUserRequest findUserRequest = restAdapter .create(FindUserRequest.class); try { return findUserRequest.getUserInfo(code); } catch(RetrofitError e) { if(e.getResponse().getStatus() == HttpURLConnection.HTTP_NOT_FOUND) { errorStringCode = "error_user_not_found"; } else if(e.getKind() == RetrofitError.Kind.NETWORK) { errorStringCode = "network_error"; } else { throw new RuntimeException(e); } } return null; } } ); } }