Package com.casamind.adware.client

Source Code of com.casamind.adware.client.Adware$AdwareUiBinder

package com.casamind.adware.client;

import com.casamind.adware.client.event.ContentAvailableEvent;
import com.casamind.adware.client.event.LoginEvent;
import com.casamind.adware.client.helper.PushService;
import com.casamind.adware.client.helper.RPCCall;
import com.casamind.adware.client.presenter.EntityListPresenter;
import com.casamind.adware.client.presenter.LoginPresenter;
import com.casamind.adware.client.presenter.PopupIndicatorPresenter;
import com.casamind.adware.client.presenter.UserBadgePresenter;
import com.casamind.adware.client.resources.DisplayMessages;
import com.casamind.adware.client.resources.ErrorMessages;
import com.casamind.adware.client.service.DataService;
import com.casamind.adware.client.service.DataServiceAsync;
import com.casamind.adware.client.service.LoginService;
import com.casamind.adware.client.service.LoginServiceAsync;
import com.casamind.adware.client.service.MailService;
import com.casamind.adware.client.service.MailServiceAsync;
import com.casamind.adware.client.view.EntityListView;
import com.casamind.adware.client.view.LoginView;
import com.casamind.adware.client.view.PopupIndicatorView;
import com.casamind.adware.client.view.UserBadgeView;
import com.casamind.adware.shared.InfoTypes;
import com.casamind.adware.shared.messages.ChannelTextMessage;
import com.casamind.adware.shared.messages.Message;
import com.casamind.adware.shared.model.CompanySummaryDTO;
import com.casamind.adware.shared.model.PublisherSummaryDTO;
import com.casamind.adware.shared.model.UserAccountDTO;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.gdata.client.GData;
import com.google.gwt.gdata.client.GDataSystemPackage;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.rpc.SerializationStreamFactory;
import com.google.gwt.user.client.ui.DeckPanel;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class Adware implements EntryPoint {

  interface AdwareUiBinder extends UiBinder<Widget, Adware> {
  }

  SerializationStreamFactory pushServiceStreamFactory;

  @UiField
  HeaderPanel headerPanel;
  @UiField
  DeckPanel mainPanel;
  @UiField
  VerticalPanel entityListPanel;

  RootLayoutPanel root;
  private static GDataSystemPackage defaultPackage = GDataSystemPackage.CALENDAR;
  private final static String GDATA_API_KEY = "ABQIAAAAC8UZOviicgqvPGNqx7sVeRSX7QeMlrl2UyVbTCaQ-Q5VuBPB8BTokEQ7Ddj-wmoyAXCDAr7syb3iVQ";
  // Messages
  private final DisplayMessages displayMessages = GWT.create(DisplayMessages.class);
  private final ErrorMessages errorMessages = GWT.create(ErrorMessages.class);

  private static Adware singleton;
  private UserAccountDTO currentUser;
  private CompanySummaryDTO currentCompany;
  private PublisherSummaryDTO currentPublisher;
  private SimpleEventBus eventBus = new SimpleEventBus();
  private PopupIndicatorPresenter busyIndicator = new PopupIndicatorPresenter(eventBus, new PopupIndicatorView(), displayMessages.loading(), InfoTypes.Wait, 0);
  private PopupIndicatorPresenter errorIndicator = new PopupIndicatorPresenter(eventBus, new PopupIndicatorView(), errorMessages.unknownError(), InfoTypes.Error, 10000);
  private PopupIndicatorPresenter infoIndicator = new PopupIndicatorPresenter(eventBus, new PopupIndicatorView(), displayMessages.saved(), InfoTypes.Info, 5000);

  // Presenters
  private EntityListPresenter entityListPresenter;
  private UserBadgePresenter userBadgePresenter;

  // RPC services
  private LoginServiceAsync loginService = GWT.create(LoginService.class);
  private DataServiceAsync dataService = GWT.create(DataService.class);
  private MailServiceAsync mailService = GWT.create(MailService.class);

  /**
   * Gets the singleton application instance.
   */
  public static Adware get() {
    return singleton;
  }

  private static final AdwareUiBinder binder = GWT.create(AdwareUiBinder.class);

  public void onModuleLoad() {
    pushServiceStreamFactory = (SerializationStreamFactory) PushService.App.getInstance();
    singleton = this;
    if (!GData.isLoaded(defaultPackage)) {
      GData.loadGDataApi(GDATA_API_KEY, new Runnable() {
        public void run() {
          getLoggedInUser();
        }
      }, defaultPackage);
    } else {
      getLoggedInUser();
    }

  }

  private void getLoggedInUser() {
    new RPCCall<UserAccountDTO>() {
      @Override
      protected void callService(AsyncCallback<UserAccountDTO> cb) {
        loginService.getLoggedInUserDTO(GWT.getHostPageBaseURL(), cb);
      }

      @Override
      public void onSuccess(UserAccountDTO loggedInUserDTO) {
        if (loggedInUserDTO.getAccessLevel() == 0) {
          // nobody is logged in
          showLoginView(loggedInUserDTO);
        } else {
          // user is logged in
          setCurrentUser(loggedInUserDTO);
          switch (loggedInUserDTO.getAccessLevel()) {
            case 2:
              doSetCurrentCompany(loggedInUserDTO.getLogin());
              break;
            case 3:
              doSetCurrentPublisher(loggedInUserDTO.getLogin());
              break;
            default:
              buildApp();
          }
        }
      }

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

  }

  protected void doSetCurrentPublisher(final String login) {
    new RPCCall<PublisherSummaryDTO>() {
      @Override
      protected void callService(AsyncCallback<PublisherSummaryDTO> cb) {
        dataService.getPublisherSummaryByLogin(login, cb);
      }

      @Override
      public void onSuccess(final PublisherSummaryDTO publisher) {
        Adware.get().setCurrentPublisher(publisher);
        new RPCCall<CompanySummaryDTO>() {
          @Override
          protected void callService(AsyncCallback<CompanySummaryDTO> cb) {
            dataService.getCompanySummaryByPublisherId(publisher.getId(), cb);
          }

          @Override
          public void onSuccess(CompanySummaryDTO company) {
            Adware.get().setCurrentCompany(company);
            buildApp();
          }

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

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

  }

  protected void doSetCurrentCompany(final String login) {
    new RPCCall<CompanySummaryDTO>() {
      @Override
      protected void callService(AsyncCallback<CompanySummaryDTO> cb) {
        dataService.getCompanySummaryByLogin(login, cb);
      }

      @Override
      public void onSuccess(CompanySummaryDTO company) {
        Adware.get().setCurrentCompany(company);
        buildApp();
      }

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

  }

  public void showLoginView(UserAccountDTO loggedInUserDTO) {
    root = RootLayoutPanel.get();
    root.clear();
    LoginPresenter loginPresenter = new LoginPresenter(eventBus, new LoginView(), loggedInUserDTO);
    loginPresenter.go(root);
  }

  private void goAfterLogin() {

    DockLayoutPanel outer = (DockLayoutPanel) binder.createAndBindUi(this);
    root = RootLayoutPanel.get();
    root.clear();
    root.add(outer);

    // final MessagesServiceAsync messagesService =
    // GWT.create(MessagesService.class);
    // FriendsServiceAsync friendService = GWT.create(FriendsService.class);

    AppController appViewer = new AppController(dataService, mailService, eventBus);
    appViewer.go();

    entityListPresenter = new EntityListPresenter(dataService, eventBus, new EntityListView());
    entityListPresenter.go(entityListPanel);

    userBadgePresenter = new UserBadgePresenter(loginService, eventBus, new UserBadgeView());
    userBadgePresenter.go(headerPanel.getuserBadgePanel());

  }

  public SimpleEventBus getEventBus() {
    return eventBus;
  }

  private void buildApp() {

    GWT.runAsync(new RunAsyncCallback() {
      @Override
      public void onFailure(Throwable reason) {
        Window.alert("Code download error: " + reason.getMessage());
      }

      @Override
      public void onSuccess() {
        goAfterLogin();
        eventBus.fireEvent(new LoginEvent(currentUser));
      }
    });
  }

  void setCurrentUser(UserAccountDTO currentUser) {
    this.currentUser = currentUser;
  }

  public UserAccountDTO getCurrentUser() {
    return currentUser;
  }

  public void setCurrentCompany(CompanySummaryDTO currentCompany) {
    this.currentCompany = currentCompany;
  }

  public CompanySummaryDTO getCurrentCompany() {
    return currentCompany;
  }

  public void setCurrentPublisher(PublisherSummaryDTO currentPublisher) {
    this.currentPublisher = currentPublisher;
  }

  public PublisherSummaryDTO getCurrentPublisher() {
    return currentPublisher;
  }

  /**
   * @return the mainPanel
   */
  DeckPanel getMainPanel() {
    return mainPanel;
  }

  /**
   * @return the friendList
   */
  VerticalPanel getFriendListPanel() {
    return entityListPanel;
  }

  /**
   * Handle messages pushed from the server.
   */
  public void handleMessage(Message msg) {
    switch (msg.getType()) {

      case NEW_CONTENT_AVAILABLE:
        GWT.log("Pushed msg received: NEW_CONTENT_AVAILABLE");
        eventBus.fireEvent(new ContentAvailableEvent());
        break;

      case TEXT_MESSAGE:
        String ttext = ((ChannelTextMessage) msg).get();
        GWT.log("Pushed msg received: TEXT_MESSAGE: " + ttext);
        break;

      default:
        Window.alert("Unknown message type: " + msg.getType());
    }
  }
}
TOP

Related Classes of com.casamind.adware.client.Adware$AdwareUiBinder

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.