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

org.geomajas.gwt.server.GeomajasServiceImpl Maven / Gradle / Ivy

There is a newer version: 2.4.3
Show newest version
/*
 * This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
 *
 * Copyright 2008-2014 Geosparc nv, http://www.geosparc.com/, Belgium.
 *
 * The program is available in open source according to the GNU Affero
 * General Public License. All contributions in this program are covered
 * by the Geomajas Contributors License Agreement. For full licensing
 * details, see LICENSE.txt in the project root.
 */

package org.geomajas.gwt.server;

import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.geomajas.command.CommandDispatcher;
import org.geomajas.command.CommandResponse;
import org.geomajas.annotation.Api;
import org.geomajas.gwt.client.GeomajasService;
import org.geomajas.gwt.client.command.GwtCommand;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.web.context.support.WebApplicationContextUtils;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * Geomajas GWT service, implements communication between GWT face and back-end.
 * 
 * @author Pieter De Graef
 * @author Joachim Van der Auwera
 * @author Jan De Moerloose
 * @since 2.0.0
 */
@Api(allMethods = true)
public class GeomajasServiceImpl extends RemoteServiceServlet implements GeomajasService,
		ApplicationListener {

	private static final long serialVersionUID = -4388317165048891159L;

	private ApplicationContext applicationContext;

	private CommandDispatcher commandDispatcher;

	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);

		// register the controller object
		applicationContext = WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
		if (applicationContext instanceof ConfigurableApplicationContext) {
			((ConfigurableApplicationContext) applicationContext).addApplicationListener(this);
		}
		initDispatcher();
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		super.service(req, resp);
	}

	/**
	 * Execute a GWT RPC command request, and return the response. These request come from the client, and the response
	 * is sent back to the client. We use a {@link CommandDispatcher} to actually execute the command.
	 */
	public CommandResponse execute(GwtCommand request) {
		if (request != null) {
			return commandDispatcher.execute(request.getCommandName(), request.getCommandRequest(),
					request.getUserToken(), request.getLocale());
		}
		return null;
	}

	@Override
	public void onApplicationEvent(ContextRefreshedEvent event) {
		initDispatcher();
	}

	/**
	 * Initialize dispatcher.
	 */
	protected void initDispatcher() {
		commandDispatcher = applicationContext.getBean("command.CommandDispatcher", CommandDispatcher.class);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy