Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [udig-devel] Server-side uDig

Good stuff! I give you 10 point for creativity. uDig as a servlet does that mean we have to change the name?

Seriously I think this is great. I will do what I can to support your work. Any suggestion you have that will make it better for servers please make a JIRA and we will start a thread there.

WRT the dependency/Null pointer issue.  I will comment on the Jira task.

Jesse

On 4-Aug-06, at 12:12 PM, Aleksander Bandelj wrote:

I think uDig and technologies it builds on constitute a really nice platform for client and server side GIS, so I started experimenting with server part. So far, I am able to run uDig rendering headless inside Eclipse Equinox OSGI container. It requires no modifications to uDig and is also reasonably easy for those familiar with Eclipse PDE. You need eclipse 3.2 and plugins from equinox incubator:

org.eclipse.equinox.http.registry
org.eclipse.equinox.servlet.bridge.http
org.eclipse.equinox.jetty.http

Then you simply create Equinox launch configuration which includes these bundles and a servlet bundle which registers a servlet on http registry extension point:

<extension
        point="org.eclipse.equinox.http.registry.servlets">
        <servlet
              alias="/udig"
              class="test.UdigServlet"
              load-on-startup="true"/>
  </extension>

I've attached a braindead sample servlet in case somebody is interested.

The only problem I've encountered (lost a hour tracking it down) was with UiPlugin activator. It requires net.refractions.udig plugin to parse uDig version and fails with NullPointerException if not present, but net.refractions.udig for some reason isn't available (maybe because it exports no classes, so Lazy-Start doesn't work). Anyway, this is now http://jira.codehaus.org/browse/ UDIG-957

(I think net.refractions.udig.ui should depend on net.refractions.udig, not the opposite. If net.refractions.udig is a central point for version and property information, on which other bundles depend, this dependency should be evident in bundle manifest.)

There is also a rather interesting Rich Server Platform proposal, which talks of server-side Eclipse workbench and OSGI inside web applications:

http://www.eclipse.org/proposals/rsp/

(Note that they are releasing updated demo and tutorial soon)
package test;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.refractions.udig.project.internal.Map;
import net.refractions.udig.project.internal.render.RenderExecutor;
import net.refractions.udig.project.render.IRenderContext;
import net.refractions.udig.project.tests.support.MapTests;
import net.refractions.udig.style.sld.SLDContent;
import net.refractions.udig.ui.tests.support.UDIGTestUtil;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.geotools.feature.Feature;
import org.geotools.styling.Style;
import org.geotools.styling.StyleBuilder;

public class UdigServlet extends HttpServlet {

@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
	res.setContentType("image/png");
	ServletOutputStream out= res.getOutputStream();
	try {
Feature[] features= UDIGTestUtil.createDefaultTestFeatures ("testType", 3); //$NON-NLS-1$ Map map= MapTests.createNonDynamicMapAndRenderer (MapTests.createGeoResource(features, true), new Dimension(512,
				512));
		map.getViewportModelInternal().zoomToExtent();
		StyleBuilder sb= new StyleBuilder();
Style style= sb.createStyle(features[0].getFeatureType ().getTypeName(), sb.createPolygonSymbolizer(Color.BLACK,
				Color.RED, 2));
		SLDContent.apply(map.getLayersInternal().get(0), style, null);
RenderExecutor executor= map.getRenderManagerInternal ().getRenderExecutor();
		try {
			executor.render();
			IRenderContext context= executor.getContext();
			BufferedImage image= context.getImage();
Platform.getJobManager().join(map.getRenderManager(), new NullProgressMonitor());
			ImageIO.write(image, "png", out);
		} finally {
			map.getRenderManagerInternal().stopRendering();
			executor.dispose();
			out.flush();
			out.close();
		}
	} catch (Exception ex) {
		ex.printStackTrace();
	} //$NON-NLS-1$
}
}
_______________________________________________
User-friendly Desktop Internet GIS (uDig)
http://udig.refractions.net
http://lists.refractions.net/mailman/listinfo/udig-devel



Back to the top