package co.infinum.pokemon.mvp.presenters.impl;
import javax.inject.Inject;
import co.infinum.pokemon.models.Pokemon;
import co.infinum.pokemon.mvp.interactors.PokemonDetailsInteractor;
import co.infinum.pokemon.mvp.listeners.PokemonDetailsListener;
import co.infinum.pokemon.mvp.presenters.PokemonDetailsPresenter;
import co.infinum.pokemon.mvp.views.PokemonDetailsView;
/**
* Created by dino on 21/03/15.
*/
public class PokemonDetailsPresenterImpl implements PokemonDetailsPresenter, PokemonDetailsListener {
private final PokemonDetailsView pokemonDetailsView;
private final PokemonDetailsInteractor pokemonDetailsInteractor;
@Inject
public PokemonDetailsPresenterImpl(PokemonDetailsView pokemonDetailsView, PokemonDetailsInteractor pokemonDetailsInteractor) {
this.pokemonDetailsView = pokemonDetailsView;
this.pokemonDetailsInteractor = pokemonDetailsInteractor;
}
@Override
public void loadDetails(Pokemon pokemon) {
pokemonDetailsView.showProgress();
pokemonDetailsInteractor.loadPokemonDetails(pokemon.getResourceUri(), this);
}
@Override
public void cancel() {
pokemonDetailsView.hideProgress();
pokemonDetailsInteractor.cancel();
}
@Override
public void onSuccess(Pokemon pokemon) {
// APIs are not to be trusted so we wrap interaction with data from API in try/catch
try {
pokemonDetailsView.showName(pokemon.getName());
pokemonDetailsView.showHp(String.valueOf(pokemon.getHp()));
pokemonDetailsView.showWeight(pokemon.getWeight());
pokemonDetailsView.showHeight(pokemon.getHeight());
pokemonDetailsView.showAttack(String.valueOf(pokemon.getAttack()));
pokemonDetailsView.showDefense(String.valueOf(pokemon.getDefense()));
} catch (Exception e) {
e.printStackTrace();
pokemonDetailsView.showError("Unknown error while using data from API!");
} finally {
pokemonDetailsView.hideProgress();
}
}
@Override
public void onFailure(String message) {
pokemonDetailsView.hideProgress();
pokemonDetailsView.showError(message);
}
}