Package com.casamind.adware.client.presenter

Source Code of com.casamind.adware.client.presenter.EntityListPresenter$Display

/**
* Copyright 2010 Daniel Guermeur and Amy Unruh
*
*   Licensed under the Apache License, Version 2.0 (the "License");
*   you may not use this file except in compliance with the License.
*   You may obtain a copy of the License at
*
*       http://www.apache.org/licenses/LICENSE-2.0
*
*   Unless required by applicable law or agreed to in writing, software
*   distributed under the License is distributed on an "AS IS" BASIS,
*   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*   See the License for the specific language governing permissions and
*   limitations under the License.
*
*   See http://connectrapp.appspot.com/ for a demo, and links to more information
*   about this app and the book that it accompanies.
*/
package com.casamind.adware.client.presenter;

import java.util.ArrayList;
import java.util.List;

import com.casamind.adware.client.Adware;
import com.casamind.adware.client.event.EntityAddEvent;
import com.casamind.adware.client.event.EntityDeletedEvent;
import com.casamind.adware.client.event.EntityDeletedEventHandler;
import com.casamind.adware.client.event.EntityEditEvent;
import com.casamind.adware.client.event.EntityListChangedEvent;
import com.casamind.adware.client.event.EntityUpdatedEvent;
import com.casamind.adware.client.event.EntityUpdatedEventHandler;
import com.casamind.adware.client.helper.ClickPoint;
import com.casamind.adware.client.helper.RPCCall;
import com.casamind.adware.client.resources.ErrorMessages;
import com.casamind.adware.client.service.DataServiceAsync;
import com.casamind.adware.shared.EntityTypes;
import com.casamind.adware.shared.model.CompanySummaryDTO;
import com.casamind.adware.shared.model.EntitySummary;
import com.casamind.adware.shared.model.ProductSummaryDTO;
import com.casamind.adware.shared.model.PublisherSummaryDTO;
import com.casamind.adware.shared.model.SlotSummaryDTO;
import com.google.gwt.core.client.GWT;
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.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.HasWidgets;
import com.google.gwt.user.client.ui.Widget;

public class EntityListPresenter implements Presenter {

  private final DataServiceAsync rpcService;
  private final SimpleEventBus eventBus;
  private final Display display;
  private final ErrorMessages errorMessages = GWT.create(ErrorMessages.class);
  private List<EntitySummary> entitySummaries;

  public interface Display {
    HasClickHandlers getAddButton();

    HasClickHandlers getList();

    void setData(List<String> entityNames);

    int getClickedRow(ClickEvent event);

    ClickPoint getClickedPoint(ClickEvent event);

    List<Integer> getSelectedRows();

    Widget asWidget();
  }

  public EntityListPresenter(DataServiceAsync rpcService, SimpleEventBus eventBus, Display view) {
    this.rpcService = rpcService;
    this.eventBus = eventBus;
    this.display = view;
    bind();
  }

  public void bind() {
    display.getAddButton().addClickHandler(new ClickHandler() {
      public void onClick(ClickEvent event) {
        eventBus.fireEvent(new EntityAddEvent(EntityTypes.Entity));
      }
    });
    if (display.getList() != null)
      display.getList().addClickHandler(new ClickHandler() {

        public void onClick(ClickEvent event) {
          int selectedPropertyButtonRow = display.getClickedRow(event);
          if (selectedPropertyButtonRow >= 0) {
            EntitySummary entity = entitySummaries.get(selectedPropertyButtonRow);
            if (entity.getClass().equals(CompanySummaryDTO.class)) {
              eventBus.fireEvent(new EntityEditEvent(entity, EntityTypes.Company));
            } else if (entity.getClass().equals(PublisherSummaryDTO.class)) {
              eventBus.fireEvent(new EntityEditEvent(entity, EntityTypes.Publisher));
            } else if (entity.getClass().equals(ProductSummaryDTO.class)) {
              eventBus.fireEvent(new EntityEditEvent(entity, EntityTypes.Product));
            } else if (entity.getClass().equals(SlotSummaryDTO.class)) {
              eventBus.fireEvent(new EntityEditEvent(entity, EntityTypes.Slot));
            }
          } else {
            eventBus.fireEvent(new EntityListChangedEvent(entitySummaries));
          }
        }

      });

    // Listen to events
    eventBus.addHandler(EntityUpdatedEvent.TYPE, new EntityUpdatedEventHandler() {
      @Override
      public void onEntityUpdated(EntityUpdatedEvent event) {
        fetchEntitySummaryDTO();
      }
    });

    eventBus.addHandler(EntityDeletedEvent.TYPE, new EntityDeletedEventHandler() {
      @Override
      public void onEntityDeleted(EntityDeletedEvent event) {
        fetchEntitySummaryDTO();
      }
    });
  }

  public void go(final HasWidgets container) {
    GWT.log("Loading entities...");
    container.clear();
    container.add(display.asWidget());
    fetchEntitySummaryDTO();
  }

  public void sortEntitySummaryDTO() {
    for (int i = 0; i < entitySummaries.size(); ++i) {
      for (int j = 0; j < entitySummaries.size() - 1; ++j) {
        if (entitySummaries.get(j).getDisplayName().compareToIgnoreCase(entitySummaries.get(j + 1).getDisplayName()) >= 0) {
          EntitySummary tmp = entitySummaries.get(j);
          entitySummaries.set(j, entitySummaries.get(j + 1));
          entitySummaries.set(j + 1, tmp);
        }
      }
    }
  }

  public void setEntitySummaryDTO(List<EntitySummary> EntitySummaryDTO) {
    this.entitySummaries = EntitySummaryDTO;
  }

  public EntitySummary getEntitySummary(int index) {
    return entitySummaries.get(index);
  }

  private void fetchEntitySummaryDTO() {

    new RPCCall<List<EntitySummary>>() {
      @Override
      protected void callService(AsyncCallback<List<EntitySummary>> cb) {
        rpcService.getEntitySummaries(Adware.get().getCurrentUser(), cb);
      }

      @Override
      public void onSuccess(List<EntitySummary> result) {
        entitySummaries = result;
        sortEntitySummaryDTO();
        display.setData(toStringList(entitySummaries));
        eventBus.fireEvent(new EntityListChangedEvent(entitySummaries));
      }

      @Override
      public void onFailure(Throwable caught) {
        Window.alert(errorMessages.rpcError(caught.getMessage()));
      }
    }.retry(3);

  }

  private List<String> toStringList(List<EntitySummary> entitySummaries) {
    List<String> list = new ArrayList<String>();
    for (EntitySummary e : entitySummaries) {
      list.add(e.getDisplayName());
    }
    return list;
  }

  @Override
  public void go(DeckPanel container) {
    // TODO Auto-generated method stub

  }

}
TOP

Related Classes of com.casamind.adware.client.presenter.EntityListPresenter$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.