All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.googlecode.gwt.test.guice.GwtGuiceHelper Maven / Gradle / Ivy

There is a newer version: 0.63
Show newest version
package com.googlecode.gwt.test.guice;

import com.google.gwt.core.client.GWT;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;
import com.google.inject.servlet.ServletDefinitionReader;
import com.googlecode.gwt.test.exceptions.GwtTestConfigurationException;
import com.googlecode.gwt.test.internal.utils.WebXmlUtils;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;

/**
 * Helper for gwt-test-utils / Guice integration. For internal use only.
 *
 * @author Alex Dobjanschi
 * @author Gael Lazzari
 */
class GwtGuiceHelper {

    private static final GwtGuiceHelper INSTANCE = new GwtGuiceHelper();
    private boolean hasSearchedInjector = false;
    private Injector injector;
    private ServletDefinitionReader servletDefinitionReader;

    private GwtGuiceHelper() {

    }

    public static GwtGuiceHelper get() {
        return INSTANCE;
    }

    public Injector getInjector() {

        if (this.injector == null && !hasSearchedInjector) {
            for (String listenerClassName : WebXmlUtils.get().getListenerClasses()) {
                try {
                    Class clazz = GwtReflectionUtils.getClass(listenerClassName);

                    if (GuiceServletContextListener.class.isAssignableFrom(clazz)) {
                        Object instance = GwtReflectionUtils.instantiateClass(clazz);
                        this.injector = GwtReflectionUtils.callPrivateMethod(instance, "getInjector");
                    }

                } catch (Exception e) {
                    throw new GwtTestConfigurationException(
                            "Error while parsing web.xml searching for a Guice Injector in a configured GuiceServletContextListener",
                            e);
                }
            }

            hasSearchedInjector = true;
        }
        // can be null
        return this.injector;
    }

    public Object getRpcServiceFromInjector(Injector injector, Class remoteServiceClass,
                                            String remoteServiceRelativePath) {

        if (servletDefinitionReader == null) {
            servletDefinitionReader = new ServletDefinitionReader(injector);
        }

        // Try from Guice injection.
        String moduleName = GWT.getModuleName();
        return servletDefinitionReader.getServletForPath("/" + moduleName + "/" + remoteServiceRelativePath);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy