Hi,
I'm looking into how to integrate the sql query to feature type
support in GeoServer.
At first I was thinking to use a datastore parameter structured like
a property file, but it's a quite clunky approach.
The definition in the property file would have been something like:
virt=select a, b, c, the_geom from realtable where a > 3
virt.pk=a,b
virt.geom.the_geom=POINT,4326
Basically it's the query, plus information about which attributes
are part of the primary key, plus information about what type the
geometry is.
Instead of this I would like to have a configuration GUI (and
one less parameter in the never-ending list of params for JDBC
data stores).
First approach: starting from the "new layer" panel
-------------------------------------------------------
Ideally, a user would go to the layer list, choose "new layer",
and upon choosing a JDBC data store he would be presented with
the option to create a feature type by SQL using a SQL query
as the definition of it.
The next page would provide the user a text area in which he
could edit the query, and a "test" button which would both
test the query for validity and provide a GUI to setup
the primary key fields and the geometry details (more
or less a table of the attributes, with name, type,
a checkbox to make a field part of the pk and the possibility
to edit what we know about the geometry).
Past that the user would get into the usual layer page, which
would sport a new panel, equal to the contents of the previous
page, to allow editing of the sql and details.
Implementation wise I would like to store the sql query as part
of the FeatureTypeInfo metadata map.
Now, the issue is, what do we do on restart? We'd need to
configure the sql in the data store again, and to do so
we'd need either the resource pool to do so, making it aware
of the sql definitions, or a callback that would configure
the existing sql feature types into it by inspecting the
FeatureTypeInfo associated to the store.
Second approach: starting from the datastore config panel
---------------------------------------------------------
In this case, we make a custom GUI to configure the JDBC data
stores that has a list of the existing sql definitions
and allows to add/edit/remove them.
On add the workflow would be the same as above, but we
won't show an edit panel in the existing layer definition.
The set of sql definitions would be stored in the property
file like parameter I described at the beginning of the mail,
we'd just provide a nicer GUI for it.
The upside is that we would not need to touch the ResourcePool,
the downside is that the workflow would be less natural
to the user imho, especially now that we're about to add the
ability to create a new feature type in the "new layer" page
as well (see GSIP 47)
Oh, in any case the work would be done on trunk only.
What do you think?
Cheers
Andrea
--
Andrea Aime
OpenGeo - http://opengeo.org
Expert service straight from the developers.