Package org.jboss.errai.cdi.demo.mvp.client.local.presenter

Source Code of org.jboss.errai.cdi.demo.mvp.client.local.presenter.EditContactPresenter$Display

package org.jboss.errai.cdi.demo.mvp.client.local.presenter;

import javax.enterprise.context.Dependent;
import javax.inject.Inject;

import org.jboss.errai.cdi.demo.mvp.client.local.event.ContactUpdatedEvent;
import org.jboss.errai.cdi.demo.mvp.client.local.event.EditContactCancelledEvent;
import org.jboss.errai.cdi.demo.mvp.client.shared.Contact;
import org.jboss.errai.cdi.demo.mvp.client.shared.ContactsService;
import org.jboss.errai.common.client.api.Caller;
import org.jboss.errai.common.client.api.RemoteCallback;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.shared.HandlerManager;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;

@Dependent
public class EditContactPresenter implements Presenter {
  public interface Display {
    HasClickHandlers getSaveButton();

    HasClickHandlers getCancelButton();

    HasValue<String> getFirstName();

    HasValue<String> getLastName();

    HasValue<String> getEmailAddress();

    Widget asWidget();
  }

  private Contact contact;

  @Inject
  private Caller<ContactsService> contactsService;

  @Inject
  private HandlerManager eventBus;

  @Inject
  private Display display;

  public EditContactPresenter() {
    this.contact = new Contact();
  }

  private void setContact(String id) {
    contactsService.call(new RemoteCallback<Contact>() {
      @Override
      public void callback(Contact result) {
        contact = result;
        EditContactPresenter.this.display.getFirstName().setValue(
            contact.getFirstName());
        EditContactPresenter.this.display.getLastName().setValue(
            contact.getLastName());
        EditContactPresenter.this.display.getEmailAddress().setValue(
            contact.getEmailAddress());
      }
    }).getContact(id);
  }

  public void bind() {
    this.display.getSaveButton().addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        doSave();
      }
    });

    this.display.getCancelButton().addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        eventBus.fireEvent(new EditContactCancelledEvent());
      }
    });
  }

  @Override
  public void go(final HasWidgets container) {
    bind();
    container.clear();
    container.add(display.asWidget());
  }

  public void go(final HasWidgets container, String id) {
    setContact(id);
    go(container);
  }

  private void doSave() {
    contact.setFirstName(display.getFirstName().getValue());
    contact.setLastName(display.getLastName().getValue());
    contact.setEmailAddress(display.getEmailAddress().getValue());

    if (contact.getId() != null) {
      contactsService.call(new RemoteCallback<Contact>() {
        @Override
        public void callback(Contact result) {
          eventBus.fireEvent(new ContactUpdatedEvent(result));
        }
      }).updateContact(contact);
    }
    else {
      contactsService.call(new RemoteCallback<Contact>() {
        @Override
        public void callback(Contact result) {
          eventBus.fireEvent(new ContactUpdatedEvent(result));
        }
      }).addContact(contact);
    }
  }
}
TOP

Related Classes of org.jboss.errai.cdi.demo.mvp.client.local.presenter.EditContactPresenter$Display

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.