Package honeycrm.client.mvp

Source Code of honeycrm.client.mvp.AppController

package honeycrm.client.mvp;

import honeycrm.client.LocalizedMessages;
import honeycrm.client.dto.Dto;
import honeycrm.client.misc.NumberParser;
import honeycrm.client.misc.User;
import honeycrm.client.mvp.events.DeleteEvent;
import honeycrm.client.mvp.events.DeleteEventHandler;
import honeycrm.client.mvp.events.LocaleChangeEvent;
import honeycrm.client.mvp.events.LocaleChangeEventHandler;
import honeycrm.client.mvp.events.OpenEvent;
import honeycrm.client.mvp.events.OpenReportEvent;
import honeycrm.client.mvp.events.SuccessfulLoginEvent;
import honeycrm.client.mvp.events.SuccessfulLoginEventHandler;
import honeycrm.client.mvp.presenters.ApplicationPresenter;
import honeycrm.client.mvp.presenters.CsvImportPresenter;
import honeycrm.client.mvp.presenters.LoginPresenter;
import honeycrm.client.mvp.presenters.PluginPresenter;
import honeycrm.client.mvp.presenters.ReportsSuggestionPresenter;
import honeycrm.client.mvp.views.ApplicationView;
import honeycrm.client.mvp.views.CsvImportView;
import honeycrm.client.mvp.views.LoginView;
import honeycrm.client.mvp.views.PluginView;
import honeycrm.client.mvp.views.ReportsSuggestionView;
import honeycrm.client.services.AuthServiceAsync;
import honeycrm.client.services.ConfigServiceAsync;
import honeycrm.client.services.CreateServiceAsync;
import honeycrm.client.services.DeleteServiceAsync;
import honeycrm.client.services.PluginServiceAsync;
import honeycrm.client.services.ReadServiceAsync;
import honeycrm.client.services.ReportServiceAsync;
import honeycrm.client.services.UpdateServiceAsync;
import honeycrm.client.view.ModuleAction;

import com.google.gwt.core.client.GWT;
import com.google.gwt.core.client.RunAsyncCallback;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.event.shared.SimpleEventBus;
import com.google.gwt.http.client.UrlBuilder;
import com.google.gwt.user.client.History;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.Window.Location;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.HasWidgets;

public class AppController implements ValueChangeHandler<String> {
  private final ConfigServiceAsync confService;
  private final ReadServiceAsync readService;
  private final AuthServiceAsync authService;
  private final CreateServiceAsync createService;
  private final UpdateServiceAsync updateService;
  private final DeleteServiceAsync deleteService;
  private final PluginServiceAsync pluginService;
  private final ReportServiceAsync reportService;
  private final SimpleEventBus eventBus;
  private HasWidgets container;
  private boolean initialized = false;
  private LocalizedMessages constants;

  public AppController(final LocalizedMessages constants, final ReadServiceAsync readService, final CreateServiceAsync createService, final UpdateServiceAsync updateService, final DeleteServiceAsync deleteService, final AuthServiceAsync authService, final ConfigServiceAsync confService, final PluginServiceAsync pluginService, final ReportServiceAsync reportService, final SimpleEventBus eventBus) {
    this.authService = authService;
    this.createService = createService;
    this.updateService = updateService;
    this.readService = readService;
    this.deleteService = deleteService;
    this.pluginService = pluginService;
    this.confService = confService;
    this.reportService = reportService;
    this.eventBus = eventBus;
    this.constants = constants;
    bind();
  }

  private void bind() {
    if (GWT.isClient()) {
      History.addValueChangeHandler(this);
    }
   
    eventBus.addHandler(SuccessfulLoginEvent.TYPE, new SuccessfulLoginEventHandler() {
      @Override
      public void onLogin(final SuccessfulLoginEvent event) {
        startInitialisation(event);
      }
    });
    eventBus.addHandler(DeleteEvent.TYPE, new DeleteEventHandler() {
      @Override
      public void onDeleteEvent(DeleteEvent event) {
        doDelete(event);
      }
    });
    eventBus.addHandler(LocaleChangeEvent.TYPE, new LocaleChangeEventHandler() {
      @Override
      public void onLocaleChangeEvent(LocaleChangeEvent event) {
        updateLocale(event.getLocale());
      }
    });
  }

  private void doDelete(DeleteEvent event) {
    deleteService.deleteAll(event.getKind(), event.getDeleteIds(), new AsyncCallback<Void>() {
      @Override
      public void onSuccess(Void result) {

      }

      @Override
      public void onFailure(Throwable caught) {
        Window.alert("Could not delete");
      }
    });
  }

  private void startInitialisation(final SuccessfulLoginEvent event) {
    this.initialized = true;
    User.initUser(event.getUserId(), event.getLogin());
    handleInitialized();
    //History.fireCurrentHistoryState();
  }

  @Override
  public void onValueChange(ValueChangeEvent<String> event) {
    final String token = History.getToken();

    if (null != token) {
      if (token.equals("logout") || !initialized || token.equals("login")) {
        new LoginPresenter(authService, confService, eventBus, new LoginView(constants)).go(container);
      } else if ("misc".equals(token)) {
        handleMisc();
      } else if ("plugins".equals(token)) {
        handlePlugins();
      } else if ("report".equals(token)) {
        handleReports();
      } else if (token.split("\\s+").length == 2 && "report".equals(token.split("\\s+")[0])) {
        eventBus.fireEvent(new OpenReportEvent(NumberParser.convertToInteger(token.split("\\s+")[1])));
      } else if (token.split("\\s+").length == 2) {
        handleImport(token);
      } else if (token.split("\\s+").length == 3) {
        handleOpen(token);
      }
    }
  }

  private void handlePlugins() {
    GWT.runAsync(new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        new PluginPresenter(new PluginView(), readService, pluginService).go(container);
      }
     
      @Override
      public void onFailure(Throwable reason) {
      }
    });
  }

  private void handleMisc() {
  }

  private void handleReports() {
    GWT.runAsync(AppController.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        new ReportsSuggestionPresenter(new ReportsSuggestionView(), eventBus, reportService).go(container);
      }

      @Override
      public void onFailure(Throwable reason) {
      }
    });
  }

  protected void handleInitialized() {
    GWT.runAsync(AppController.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        new ApplicationPresenter(User.getUserId(), readService, createService, updateService, pluginService, eventBus, new ApplicationView(readService, reportService)).go(container);
      }

      @Override
      public void onFailure(Throwable reason) {
      }
    });
  }

  protected void handleImport(final String token) {
    GWT.runAsync(AppController.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        final String[] tokens = token.split("\\s+");
        if ("import".equals(tokens[1])) {
          new CsvImportPresenter(createService, eventBus, new CsvImportView(), tokens[0]).go(container);
        }
      }

      @Override
      public void onFailure(Throwable reason) {
      }
    });
  }

  protected void handleOpen(final String token) {
    GWT.runAsync(AppController.class, new RunAsyncCallback() {
      @Override
      public void onSuccess() {
        final String[] tokens = token.split("\\s+");

        final String module = tokens[0];
        final ModuleAction action = ModuleAction.fromString(tokens[1]);

        if (null != action) {
          switch (action) {
          case DETAIL:
            final Dto dto = new Dto(module);
            dto.setId(NumberParser.convertToLong(tokens[2]));
            eventBus.fireEvent(new OpenEvent(dto));
          }
        }
      }

      @Override
      public void onFailure(Throwable reason) {
      }
    });
  }

  public void go(final HasWidgets container) {
    this.container = container;

    if ("".equals(History.getToken())) {
      History.newItem("login");
    } else {
      History.fireCurrentHistoryState();
    }
  }

  private void updateLocale(final String locale) {
    UrlBuilder builder = Location.createUrlBuilder().setParameter("locale", locale);
    Window.Location.replace(builder.buildString());
  }
}
TOP

Related Classes of honeycrm.client.mvp.AppController

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.