Package honeycrm.client.mvp.presenters

Source Code of honeycrm.client.mvp.presenters.DetailPresenter$Display

package honeycrm.client.mvp.presenters;

import honeycrm.client.dto.Dto;
import honeycrm.client.misc.User;
import honeycrm.client.mvp.events.CreateEvent;
import honeycrm.client.mvp.events.CreateEventHandler;
import honeycrm.client.mvp.events.OpenEvent;
import honeycrm.client.mvp.events.OpenEventHandler;
import honeycrm.client.mvp.events.UpdateEvent;
import honeycrm.client.services.CreateServiceAsync;
import honeycrm.client.services.ReadServiceAsync;
import honeycrm.client.services.UpdateServiceAsync;

import java.util.HashMap;
import java.util.Map.Entry;

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.SimpleEventBus;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;

public class DetailPresenter implements Presenter {
  public interface Display {
    void setData(Dto dto);
    Dto getData();
    Widget asWidget();
    void setPresenter(DetailPresenter modulePresenter);
    void startCreate(HashMap<String, Object> prefilledFields);
    HasClickHandlers getCreateBtn();
    HasClickHandlers getSaveBtn();
    HasClickHandlers getEditBtn();
    HasClickHandlers getCancelBtn();
    void startEdit();
    RelationshipsPresenter.Display getRelationshipsView();
  }

  final Display view;
  final String module;
  final SimpleEventBus eventBus;
  final ReadServiceAsync readService;
  final UpdateServiceAsync updateService;
  final CreateServiceAsync createService;

  public DetailPresenter(final SimpleEventBus eventBus, final String module, final ReadServiceAsync readService, final UpdateServiceAsync updateService, final CreateServiceAsync createService, final Display view) {
    this.view = view;
    this.module = module;
    this.eventBus = eventBus;
    this.readService = readService;
    this.updateService = updateService;
    this.createService = createService;
   
    bind();
  }

  private void bind() {
    // Create a presenter that takes care of the RelationshipsView.
    new RelationshipsPresenter(module, view.getRelationshipsView(), readService, eventBus);

    view.getSaveBtn().addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        onSave();
      }
    });
   
    view.getCancelBtn().addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        //view.
      }
    });
    view.getEditBtn().addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        view.startEdit();
      }
    });
    view.getCreateBtn().addClickHandler(new ClickHandler() {
      @Override
      public void onClick(ClickEvent event) {
        view.startCreate(getDefaultPrefilledFields());
      }

    });

    eventBus.addHandler(CreateEvent.TYPE, new CreateEventHandler() {
      @Override
      public void onCreate(CreateEvent event) {
        if (module.equals(event.getModule())) {
          final HashMap<String, Object> prefilledFields = getDefaultPrefilledFields();
         
          // add more prefilled fields
          if (null != event.getPrefilledFields()) {
            for (final Entry<String, Object> entry: event.getPrefilledFields().entrySet()) {
              prefilledFields.put(entry.getKey(), entry.getValue());
            }
          }
         
          view.startCreate(prefilledFields);
        }
      }
    });
    eventBus.addHandler(OpenEvent.TYPE, new OpenEventHandler() {
      @Override
      public void onOpen(OpenEvent event) {
        if (module.equals(event.getDto().getModule())) {
          // get item again from the server.
          // infact we could use the dto object that we received but it may not contain all the necessary fields
          // especially relate fields will not be resolved yet.
          readService.get(event.getDto().getModule(), event.getDto().getId(), new AsyncCallback<Dto>() {
            @Override
            public void onSuccess(Dto result) {
              view.setData(result);
            }
           
            @Override
            public void onFailure(Throwable caught) {
             
            }
          });
        }
      }
    });

    view.setPresenter(this);
  }
 
  protected HashMap<String, Object> getDefaultPrefilledFields() {
    final HashMap<String, Object> prefilledFields = new HashMap<String, Object>();
    prefilledFields.put("assignedTo", User.getUserId());
    return prefilledFields;
  }

  public void onSave() {
    final Dto dto = view.getData();

    // id == -1 indicates that there is no id yet.
    // thus if id != -1 we know the id -> we do an update
    final boolean isUpdate = dto.getId() > 0;

    if (isUpdate) {
      updateService.update(dto, new AsyncCallback<Void>() {
        @Override
        public void onSuccess(Void result) {
          eventBus.fireEvent(new UpdateEvent(module));
          eventBus.fireEvent(new OpenEvent(dto));
        }

        @Override
        public void onFailure(Throwable caught) {

        }
      });
    } else {
      createService.create(dto, new AsyncCallback<Long>() {
        @Override
        public void onSuccess(Long result) {
          dto.setId(result);
          eventBus.fireEvent(new UpdateEvent(module));
          eventBus.fireEvent(new OpenEvent(dto));
        }

        @Override
        public void onFailure(Throwable caught) {

        }
      });
    }
  }

  @Override
  public void go(HasWidgets container) {
    container.clear();
    container.add(view.asWidget());
  }
}
TOP

Related Classes of honeycrm.client.mvp.presenters.DetailPresenter$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.