Package name.pehl.karaka.client.activity.presenter

Source Code of name.pehl.karaka.client.activity.presenter.DashboardPresenter$MyProxy

package name.pehl.karaka.client.activity.presenter;

import com.google.gwt.core.client.Scheduler;
import com.google.gwt.core.client.Scheduler.ScheduledCommand;
import com.google.inject.Inject;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.dispatch.shared.DispatchAsync;
import com.gwtplatform.mvp.client.Presenter;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.annotations.NameToken;
import com.gwtplatform.mvp.client.annotations.ProxyStandard;
import com.gwtplatform.mvp.client.proxy.PlaceRequest;
import com.gwtplatform.mvp.client.proxy.ProxyPlace;
import name.pehl.karaka.client.activity.dispatch.ActivitiesRequest;
import name.pehl.karaka.client.activity.dispatch.GetActivitiesAction;
import name.pehl.karaka.client.activity.dispatch.GetActivitiesResult;
import name.pehl.karaka.client.activity.event.ActivitiesLoadedEvent;
import name.pehl.karaka.client.activity.event.ActivitiesNotFoundEvent;
import name.pehl.karaka.client.application.ApplicationPresenter;
import name.pehl.karaka.client.application.Message;
import name.pehl.karaka.client.application.ShowMessageEvent;
import name.pehl.karaka.client.dispatch.KarakaCallback;
import name.pehl.karaka.client.dispatch.RestException;
import name.pehl.karaka.shared.model.LinkHeader;
import name.pehl.karaka.shared.model.LinksParser;

import static java.util.logging.Level.INFO;
import static java.util.logging.Level.WARNING;
import static name.pehl.karaka.client.NameTokens.dashboard;
import static name.pehl.karaka.client.logging.Logger.Category.activity;
import static name.pehl.karaka.client.logging.Logger.warn;

/**
* <p>
* The main presenter in Karaka. This presenter is responsible to init, resume
* and stop activities. Other presenters are notified with appropriate events.
* </p>
* <h3>Events</h3>
* <ol>
* <li>IN</li>
* <ul>
* <li>none</li>
* </ul>
* <li>OUT</li>
* <ul>
* <li>{@linkplain ActivitiesLoadedEvent}</li>
* <li>{@linkplain ActivitiesNotFoundEvent}</li>
* <li>{@linkplain ShowMessageEvent}</li>
* </ul>
* </ol>
* <h3>Dispatcher actions</h3>
* <ul>
* <li>{@linkplain GetActivitiesAction}
* </ul>
*
* @author $Author: harald.pehl $
* @version $Date: 2010-12-23 13:52:44 +0100 (Do, 23. Dez 2010) $ $Revision: 192
*          $
*/
public class DashboardPresenter extends Presenter<DashboardPresenter.MyView, DashboardPresenter.MyProxy>
{
    // ---------------------------------------------------------- inner classes

    @ProxyStandard
    @NameToken(dashboard)
    public interface MyProxy extends ProxyPlace<DashboardPresenter>
    {
    }

    public interface MyView extends View
    {
    }

    // ------------------------------------------------------- (static) members

    public static final Object TYPE_NewActivity = new Object();
    public static final Object TYPE_ActivityNavigation = new Object();
    public static final Object TYPE_ActivityList = new Object();

    final Scheduler scheduler;
    final DispatchAsync dispatcher;
    final NewActivityPresenter newActivityPresenter;
    final ActivityNavigationPresenter activityNavigationPresenter;
    final ActivityListPresenter activityListPresenter;


    // ------------------------------------------------------------------ setup

    @Inject
    public DashboardPresenter(final EventBus eventBus, final MyView view, final MyProxy proxy,
            final Scheduler scheduler, final DispatchAsync dispatcher, final NewActivityPresenter newActivityPresenter,
            final ActivityNavigationPresenter activityNavigationPresenter,
            final ActivityListPresenter activityListPresenter)
    {
        super(eventBus, view, proxy, ApplicationPresenter.TYPE_MainContent);
        this.scheduler = scheduler;
        this.dispatcher = dispatcher;
        this.newActivityPresenter = newActivityPresenter;
        this.activityNavigationPresenter = activityNavigationPresenter;
        this.activityListPresenter = activityListPresenter;
    }


    // ---------------------------------------------------- presenter lifecycle


    @Override
    protected void onBind()
    {
        super.onBind();
        setInSlot(TYPE_NewActivity, newActivityPresenter);
        setInSlot(TYPE_ActivityNavigation, activityNavigationPresenter);
        setInSlot(TYPE_ActivityList, activityListPresenter);
    }

    /**
     * Turns the parameters in the place request into an
     * {@link ActivitiesRequest} instance and calls {@link GetActivitiesAction}.
     *
     * @param placeRequest
     * @see com.gwtplatform.mvp.client.Presenter#prepareFromRequest(com.gwtplatform.mvp.client.proxy.PlaceRequest)
     */
    @Override
    public void prepareFromRequest(final PlaceRequest placeRequest)
    {
        super.prepareFromRequest(placeRequest);
        final ActivitiesRequest activitiesRequest = new ActivitiesRequest(placeRequest);
        ShowMessageEvent.fire(this, new Message(INFO, "Loading activities...", false));
        scheduler.scheduleDeferred(new GetActivitiesCommand(activitiesRequest));
    }


    // --------------------------------------------------- commands & callbacks

    class GetActivitiesCommand implements ScheduledCommand
    {
        final ActivitiesRequest activitiesRequest;


        GetActivitiesCommand(final ActivitiesRequest activitiesRequest)
        {
            this.activitiesRequest = activitiesRequest;
        }


        @Override
        public void execute()
        {
            dispatcher.execute(new GetActivitiesAction(activitiesRequest), new KarakaCallback<GetActivitiesResult>(
                    getEventBus())
            {
                @Override
                public void onSuccess(final GetActivitiesResult result)
                {
                    ShowMessageEvent.fire(DashboardPresenter.this, new Message(INFO, "Activities successfully loaded.", true));
                    ActivitiesLoadedEvent.fire(DashboardPresenter.this, result.getActivities());
                }


                @Override
                public void onNotFound(final RestException caught)
                {
                    String errorMessage = "No activities found";
                    ShowMessageEvent.fire(DashboardPresenter.this, new Message(WARNING, errorMessage, true));
                    warn(activity, errorMessage);

                    String links = caught.getMethod().getResponse().getHeader("Link");
                    LinkHeader linkHeader = new LinkHeader(LinksParser.valueOf(links));
                    ActivitiesNotFoundEvent.fire(DashboardPresenter.this, linkHeader);
                }
            });
        }
    }
}
TOP

Related Classes of name.pehl.karaka.client.activity.presenter.DashboardPresenter$MyProxy

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.