Package org.onebusaway.webapp.gwt.common

Source Code of org.onebusaway.webapp.gwt.common.AbstractSinglePageApplication

/**
* Copyright (C) 2011 Brian Ferris <bdferris@onebusaway.org>
*
* 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.
*/
package org.onebusaway.webapp.gwt.common;

import org.onebusaway.webapp.gwt.common.context.Context;
import org.onebusaway.webapp.gwt.common.context.ContextImpl;
import org.onebusaway.webapp.gwt.common.context.ContextListener;
import org.onebusaway.webapp.gwt.common.context.ContextManager;
import org.onebusaway.webapp.gwt.common.context.HistoryContextManager;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.Command;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;

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

public class AbstractSinglePageApplication implements EntryPoint, ContextListener, ExceptionListener {

  private ContextManager _contextManager = new HistoryContextManager();

  /*****************************************************************************
   * Private Members
   ****************************************************************************/

  private IPageSource _pageSource;

  private Widget _pageWidget = null;

  private IPageSource _exceptionPage = new ExceptionPage();

  private boolean _hadError = false;

  private RootPanel _panel;

  /*****************************************************************************
   * Public Methods
   ****************************************************************************/

  public void handleException(Throwable ex) {

  }

  public ContextManager getContextManager() {
    return _contextManager;
  }

  public void setContextManager(ContextManager contextManager) {
    _contextManager = contextManager;
  }

  /*****************************************************************************
   * {@link EntryPoint}
   ****************************************************************************/

  public void onModuleLoad() {

    ExceptionSupport.addExceptionListener(this);

    _panel = RootPanel.get("content");

    _contextManager.addContextListener(this);

    Context context = _contextManager.getContext();

    if (context == null)
      context = new ContextImpl();

    final Context finalContext = context;
   
    // We defer execution of the command so that other modules can finish loading before we fire the context change event
    DeferredCommand.addCommand(new Command() {
      public void execute() {
        onContextChanged(finalContext);
      }
    });
  }

  /*****************************************************************************
   * {@link HistoryListener} Interface
   ****************************************************************************/

  public void onContextChanged(Context context) {
    try {

      if (_pageWidget == null || _hadError) {
        _panel.clear();
        _pageWidget = _pageSource.create(context);
        _panel.add(_pageWidget);
      } else {
        Widget widget = _pageSource.update(context);
        if (widget != null) {
          _panel.clear();
          _pageWidget = widget;
          _panel.add(_pageWidget);
        }
      }

    } catch (PageException ex) {
      onException(ex);
    }
  }

  /*****************************************************************************
   * {@link ExceptionListener} Interface
   ****************************************************************************/

  public void onException(Throwable ex) {
    ex.printStackTrace();

    String msg = ex.getMessage();

    Map<String, String> p = new HashMap<String, String>();
    p.put("message", msg);
    ContextImpl c = new ContextImpl(p);

    try {
      _panel.clear();
      Widget widget = _exceptionPage.create(c);
      _panel.add(widget);
      _hadError = true;
    } catch (PageException e) {
      e.printStackTrace();
    }
  }

  /*****************************************************************************
   * Private Methods
   ****************************************************************************/

  protected void setPage(IPageSource page) {
    _pageSource = page;
  }

  protected void setExceptionPage(IPageSource exceptionPage) {
    _exceptionPage = exceptionPage;
  }
}
TOP

Related Classes of org.onebusaway.webapp.gwt.common.AbstractSinglePageApplication

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.