[Geoserver-devel] WPS processes

Hi all,
I have been spending some time ploughing through GeoServer and GeoTools
code to get a big picture of how services are usually designed in
GeoServer. I can't say I know it inside-out, but think I have a pretty
good idea now how a WPS could be implemented GeoServer-style (the needed
classes etc, see below). However, any recommendations would be great!
Initially the WPS will support:
GET-Kvp for GetCapabilities request
GET-Kvp for DescribeProcess request
POST-XML for Execute request

One question is on my mind:
I have seen the use of Factory for, for example, the WFS to check if a
producer of a certain output-format is available. If I understand things
correctly, the use of Factory allows for nice things like adding new
supported output-formats at run-time. I think this could also be nice to
use for adding new processes to the WPS. That is, an Process interface
could be defined and a ProcessFactorySpi (what does Spi stand for
anyway?) could provide the supported processes upon request. Would this
be sensible at all?

In GeoServer-style, I think that these are at least the new classes that
are needed in a WPS-module (and there are some classes in the main
module that needs some editing):
********************************
org.vfny.geoserver.wps
   Process (interface for all processes that this WPS supports)
   ProcessFactory
   WpsException
   WpsExceptionHandler
org.vfny.geoserver.wps.requests
   DescribeProcessRequest
   ExecuteHandler
   ExecuteRequest
   WPSRequest
org.vfny.geoserver.wps.requests.readers
   CapabilitiesKvpReader
   DescribeProcessKvpReader
   ExecuteXmlReader
org.vfny.geoserver.wps.responses
   WPSCapabilitiesResponse
   DescribeProcessResponse
   ExecuteResponse
org.vfny.geoserver.wps.responses.helpers
   WPSCapsTransformer
   WPSDescTransformer
   WPSExecTransformer
org.vfny.geoserver.wps.servlets
   Capabilities
   DescribeProcess
   Execute
   WPSDispatcher
   WPService

Jonas

Comments inline.

Brent Owens
(The Open Planning Project)

Jonas Johansson wrote:

Hi all,
I have been spending some time ploughing through GeoServer and GeoTools
code to get a big picture of how services are usually designed in
GeoServer. I can't say I know it inside-out, but think I have a pretty
good idea now how a WPS could be implemented GeoServer-style (the needed
classes etc, see below). However, any recommendations would be great!
Initially the WPS will support:
GET-Kvp for GetCapabilities request
GET-Kvp for DescribeProcess request
POST-XML for Execute request

One question is on my mind:
I have seen the use of Factory for, for example, the WFS to check if a
producer of a certain output-format is available. If I understand things
correctly, the use of Factory allows for nice things like adding new
supported output-formats at run-time. I think this could also be nice to
use for adding new processes to the WPS. That is, an Process interface
could be defined and a ProcessFactorySpi (what does Spi stand for
anyway?) could provide the supported processes upon request. Would this
be sensible at all?

The factories were designed just for that. It is definitely a good idea to design yours to allow for different WPS processes.
Spi stands for Service Provider Interface (I think).

In GeoServer-style, I think that these are at least the new classes that
are needed in a WPS-module (and there are some classes in the main
module that needs some editing):
********************************
org.vfny.geoserver.wps
   Process (interface for all processes that this WPS supports)
   ProcessFactory
   WpsException
   WpsExceptionHandler
org.vfny.geoserver.wps.requests
   DescribeProcessRequest
   ExecuteHandler
   ExecuteRequest
   WPSRequest
org.vfny.geoserver.wps.requests.readers
   CapabilitiesKvpReader
   DescribeProcessKvpReader
   ExecuteXmlReader
org.vfny.geoserver.wps.responses
   WPSCapabilitiesResponse
   DescribeProcessResponse
   ExecuteResponse
org.vfny.geoserver.wps.responses.helpers
   WPSCapsTransformer
   WPSDescTransformer
   WPSExecTransformer
org.vfny.geoserver.wps.servlets
   Capabilities
   DescribeProcess
   Execute
   WPSDispatcher
   WPService
  

I don't know too much about WPS, so I don't have any tips yet on what may be needed. But it looks like you are on the right track.

Jonas

-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

Hi Jonas,

It looks like you are making some serious progress. It sounds like you are getting close to implementaiton. It would probably be a good idea for you to attend next weeks IRC meeting.

http://docs.codehaus.org/display/GEOS/IRC

Additional comments inline.

Jonas Johansson wrote:

Hi all,
I have been spending some time ploughing through GeoServer and GeoTools
code to get a big picture of how services are usually designed in
GeoServer. I can't say I know it inside-out, but think I have a pretty
good idea now how a WPS could be implemented GeoServer-style (the needed
classes etc, see below). However, any recommendations would be great!
Initially the WPS will support:
GET-Kvp for GetCapabilities request
GET-Kvp for DescribeProcess request
POST-XML for Execute request

One question is on my mind:
I have seen the use of Factory for, for example, the WFS to check if a
producer of a certain output-format is available. If I understand things
correctly, the use of Factory allows for nice things like adding new
supported output-formats at run-time. I think this could also be nice to
use for adding new processes to the WPS. That is, an Process interface
could be defined and a ProcessFactorySpi (what does Spi stand for
anyway?) could provide the supported processes upon request. Would this
be sensible at all?

It sure is, what you need is something similar to how the validation plugins work. Each "process" could be its own plugin.

Some food for thought. Spring has some nice utilities for doing stuff like looking up all implementations of a particular class or interface. Its an alternative to the FactorySPI mechanism.

In GeoServer-style, I think that these are at least the new classes that
are needed in a WPS-module (and there are some classes in the main
module that needs some editing):
********************************
org.vfny.geoserver.wps
   Process (interface for all processes that this WPS supports)
   ProcessFactory
   WpsException
   WpsExceptionHandler
org.vfny.geoserver.wps.requests
   DescribeProcessRequest
   ExecuteHandler
   ExecuteRequest
   WPSRequest
org.vfny.geoserver.wps.requests.readers
   CapabilitiesKvpReader
   DescribeProcessKvpReader
   ExecuteXmlReader
org.vfny.geoserver.wps.responses
   WPSCapabilitiesResponse
   DescribeProcessResponse
   ExecuteResponse
org.vfny.geoserver.wps.responses.helpers
   WPSCapsTransformer
   WPSDescTransformer
   WPSExecTransformer
org.vfny.geoserver.wps.servlets
   Capabilities
   DescribeProcess
   Execute
   WPSDispatcher
   WPService

It looks like you have hit all the high points, nice work on figuring out the codebase by the way. One thing that may be missing is on the persitance side of things. You will probably need to play with the configuration reading / writing.

-Justin

Jonas

-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel