package br.estacio.contatos.client.activity;
import br.estacio.contatos.client.event.SalvarContatoHandler;
import br.estacio.contatos.client.place.EditarContatoPlace;
import br.estacio.contatos.client.service.ContatoRemoteServiceAsync;
import br.estacio.contatos.client.ui.ContatoView;
import br.estacio.contatos.shared.Contato;
import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.AcceptsOneWidget;
public class EditarContatoActivity extends AbstractActivity implements SalvarContatoHandler {
private Contato contato;
private ContatoView contatoView;
private ContatoRemoteServiceAsync contatoRemoteServiceAsync;
public EditarContatoActivity(EditarContatoPlace place, ContatoView contatoView, ContatoRemoteServiceAsync contatoRemoteServiceAsync) {
this.contatoView = contatoView;
this.contatoRemoteServiceAsync = contatoRemoteServiceAsync;
carregarContatoPorIdOuCriarNovo(obterId(place.getContatoId()));
this.contatoView.setSalvarHandler(this);
}
@Override
public void salvarContato() {
atualizarContatoComEstadoDaView();
contatoRemoteServiceAsync.salvar(contato, new AsyncCallback<Contato>() {
@Override
public void onSuccess(Contato result) {
// TODO notificar sucesso
contato = result;
atualizarViewComEstadoDoContato();
}
@Override
public void onFailure(Throwable caught) {
// TODO notificar sucesso
Window.alert("Erro\n"+caught.getMessage());
}
});
}
private void atualizarViewComEstadoDoContato() {
contatoView.setNome(contato.getNome());
contatoView.setEmail(contato.getEmail());
contatoView.setTelefone(contato.getTelefone());
}
private void atualizarContatoComEstadoDaView() {
contato.setNome(contatoView.getNome());
contato.setEmail(contatoView.getEmail());
contato.setTelefone(contatoView.getTelefone());
}
private void carregarContatoPorIdOuCriarNovo(Integer id) {
if(id == null) {
contato = new Contato();
} else {
throw new RuntimeException("Carregamento de contato exeistente não implementado");
}
}
private Integer obterId(String contatoId) {
try {
return Integer.parseInt(contatoId);
} catch (NumberFormatException e) {
return null;
}
}
@Override
public void start(AcceptsOneWidget panel, EventBus eventBus) {
contatoView.setNome(contato.getNome());
contatoView.setEmail(contato.getEmail());
contatoView.setTelefone(contato.getTelefone());
panel.setWidget(contatoView);
}
}