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

com.googlecode.gwt.test.internal.handlers.TestRemoteServiceCreateHandler Maven / Gradle / Ivy

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

import com.google.gwt.user.client.rpc.RemoteService;
import com.googlecode.gwt.test.exceptions.GwtTestConfigurationException;
import com.googlecode.gwt.test.internal.GwtConfig;
import com.googlecode.gwt.test.internal.ModuleData;
import com.googlecode.gwt.test.rpc.RemoteServiceCreateHandler;
import com.googlecode.gwt.test.utils.GwtReflectionUtils;

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

/**
 * GwtCreateHandler for {@link RemoteService} instances which would have been declared in the module
 * .ui.xml configuration file with the  tag.
 *
 * @author Gael Lazzari
 */
class TestRemoteServiceCreateHandler extends RemoteServiceCreateHandler {

    private static final TestRemoteServiceCreateHandler INSTANCE = new TestRemoteServiceCreateHandler();

    public static TestRemoteServiceCreateHandler get() {
        return INSTANCE;
    }

    private final Map cachedServices = new HashMap();

    public void reset() {
        cachedServices.clear();
    }

    /*
     * (non-Javadoc)
     *
     * @see com.googlecode.gwt.test.server.RemoteServiceCreateHandler#findService(java .lang .Class,
     * java.lang.String)
     */
    @Override
    protected Object findService(Class remoteServiceClass, String remoteServiceRelativePath) {

        Object remoteServiceInstance = cachedServices.get(remoteServiceRelativePath);

        if (remoteServiceInstance == null) {
            remoteServiceInstance = instanciateRemoteServiceInstance(remoteServiceClass,
                    remoteServiceRelativePath);
            cachedServices.put(remoteServiceRelativePath, remoteServiceInstance);
        }

        return remoteServiceInstance;
    }

    @SuppressWarnings("unchecked")
    private  T instanciateRemoteServiceInstance(Class remoteServiceClass,
                                                   String remoteServiceRelativePath) {

        String moduleName = GwtConfig.get().getTestedModuleName();
        Class remoteServiceImplClass = ModuleData.get(moduleName).getRemoteServiceImplClass(
                remoteServiceRelativePath);

        if (remoteServiceImplClass == null) {
            return null;
        } else if (!remoteServiceClass.isAssignableFrom(remoteServiceImplClass)) {
            throw new GwtTestConfigurationException("The servlet class '"
                    + remoteServiceImplClass.getName() + "' setup for path '"
                    + remoteServiceRelativePath + "' does not implement RemoteService interface '"
                    + remoteServiceClass.getName());
        } else {
            try {
                return (T) GwtReflectionUtils.instantiateClass(remoteServiceImplClass);
            } catch (Exception e) {
                throw new GwtTestConfigurationException("Error during the instanciation of "
                        + RemoteService.class.getSimpleName() + " implementation for servlet path '"
                        + remoteServiceRelativePath + "'", e);
            }
        }

    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy