com.agnie.gwt.common.client.rpc.LoaderRequestTransport.java Source code

Java tutorial

Introduction

Here is the source code for com.agnie.gwt.common.client.rpc.LoaderRequestTransport.java

Source

/*******************************************************************************
 * Copyright (c) 2014 Agnie Technologies.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v3.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Contributors:
 *     Agnie Technologies - initial API and implementation
 ******************************************************************************/
package com.agnie.gwt.common.client.rpc;

import com.agnie.common.gwt.serverclient.client.enums.QueryString;
import com.agnie.common.gwt.serverclient.client.helper.URLGenerator;
import com.agnie.common.gwt.serverclient.client.helper.URLInfo;
import com.agnie.common.gwt.serverclient.client.injector.CommonServerClientModule;
import com.agnie.gwt.common.client.widget.Loader;
import com.agnie.gwt.common.client.widget.LoaderResources;
import com.google.gwt.core.client.GWT;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.Response;
import com.google.gwt.user.client.Window;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import com.google.inject.name.Named;
import com.google.web.bindery.requestfactory.gwt.client.DefaultRequestTransport;
import com.google.web.bindery.requestfactory.shared.ServerFailure;

/**
 * Request factory intercepter to show loader image while call is under progress and stop it once we recieve the
 * response.
 * 
 */
@Singleton
public class LoaderRequestTransport extends DefaultRequestTransport {

    @Inject
    @Named(CommonServerClientModule.CURRENT_APP_DOMAIN)
    String appDomain;
    @Inject
    URLGenerator urlGenerator;
    @Inject
    URLInfo urlInfo;

    private Loader loader;

    public LoaderRequestTransport(Loader loader) {
        this.loader = loader;
        loader.hide();
    }

    public LoaderRequestTransport() {
        this(new Loader(LoaderResources.INSTANCE.communicating()));
    }

    @Override
    public void send(final String payload, final TransportReceiver receiver) {
        GWT.log("making rpc");
        final TransportReceiver proxy = new TransportReceiver() {
            @Override
            public void onTransportFailure(final ServerFailure failure) {
                GWT.log("rpc returned");
                loader.hide();
                receiver.onTransportFailure(failure);
            }

            @Override
            public void onTransportSuccess(final String payload) {
                loader.hide();
                GWT.log("rpc returned");
                receiver.onTransportSuccess(payload);
            }
        };
        loader.show();
        super.send(payload, proxy);
    }

    protected RequestCallback createRequestCallback(final TransportReceiver receiver) {
        final RequestCallback callback = super.createRequestCallback(receiver);
        RequestCallback newCallback = new RequestCallback() {

            @Override
            public void onResponseReceived(Request request, Response response) {
                if (Response.SC_UNAUTHORIZED == response.getStatusCode()) {
                    GWT.log("User session timed out or user logged out");
                    Window.Location.assign(urlGenerator.getClientSideLoginURL(urlInfo, appDomain,
                            urlInfo.getParameter(QueryString.GWT_DEV_MODE.getKey())));
                } else {
                    callback.onResponseReceived(request, response);
                }
            }

            @Override
            public void onError(Request request, Throwable exception) {
                callback.onError(request, exception);

            }
        };
        return newCallback;
    }
}