On Fri, Feb 17, 2012 at 12:19 AM, Mike Benowitz
<michael.benow...@gdit.com>wrote:
> Andrea,
>
> Thanks for your reply. Regarding the three concerns you expressed:
>
> 1) I think distinguishing dimension metadata from other random metadata can
> be handled without changing the API or relying on a naming convention. From
> what I can tell, dimension entries in the coverage.xml file are
> distinguished by the dimensionInfo element, which gets translated to a
> DimensionInfo (or more specifically,
> org.geoserver.catalog.impl.DimensionInfoImpl) value in the corresponding
> entry in the MetadataMap received by DimensionHelper. The modified
> DimensionHelper should be able to scan the MetadataMap for all entries
> whose
> values are assignable to type DimensionInfo, and process only those entries
> as dimensions.
>
> 2) It's true that the core logic would not be able to assume the data type
> for non-standard dimensions, but this does not seem particularly
> problematic. We could include processing to recognize whether strings are
> numeric and if so convert them to Double, or whether they are in a
> recognizable date/time format and if so convert them to Date. In any case,
> it seems reasonable that values that are not in a recognized format would
> just be treated as strings, and the interpretation left to the custom
> plugin/client.
>
That works once things are configured, but how does a user configure
dimensions from the GUI or from REST config, which mind, are the
only supported configuration mechanisms? (you directly writing the files
is not a supported way, the on disk file format can and will change without
warning).
GUI wise, when you are configuring the custom dimensions, how do you
provide a list of valid values to the end user?
If you look at the DimensionEditor class you'll see there is a check like
the
following that enables/disables the possibility to configure dimensions;
GridCoverageReader reader = ((CoverageInfo)
resource).getGridCoverageReader(null, null);
if(Number.class.isAssignableFrom(type)) {
String elev =
reader.getMetadataValue(AbstractGridCoverage2DReader.HAS_ELEVATION_DOMAIN);
if(!Boolean.parseBoolean(elev)) {
disableDimension(type, configs, noAttributeMessage);
}
} else if(Date.class.isAssignableFrom(type)) {
String time =
reader.getMetadataValue(AbstractGridCoverage2DReader.HAS_TIME_DOMAIN);
if(!Boolean.parseBoolean(time)) {
disableDimension(type, configs, noAttributeMessage);
}
}
The GUI must have a way to list the available dimensions, out of the
canonical
ones, and allow the user to enable them.
An acceptable approach is to mimick the existing metadata keys:
/**
* The time domain (comma separated list of values)
*/
public static final String TIME_DOMAIN = "TIME_DOMAIN";
/**
* Time domain resolution (when using min/max/resolution)
*/
public static final String TIME_DOMAIN_RESOLUTION =
"TIME_DOMAIN_RESOLUTION";
/**
* If the time domain is available (or if a min/max/resolution approach
has been chosen)
*/
public static final String HAS_TIME_DOMAIN = "HAS_TIME_DOMAIN";
/**
* The time domain max value
*/
public static final String TIME_DOMAIN_MAXIMUM = "TIME_DOMAIN_MAXIMUM";
/**
* The time domain min value
*/
public static final String TIME_DOMAIN_MINIMUM = "TIME_DOMAIN_MINIMUM";
For a custom dimensions we could have the following keys:
CUSTOM_DIMENSIONS (a comma separated list of the dimensions)
<MYDIMENSION>_TYPE (Date,Number,String?)
HAS_<MYDIMENSION>_DOMAIN
<MYDIMENSION>_DOMAIN (the only solution for string dimensions)
<MYDIMENSION>_RESOLUTION (makes sense only for numeric/time)
<MYDIMENSION>_MINIMUM (makes sense only for numeric/time)
<MYDIMENSION>_MAXIMUM (makes sense only for numeric/time)
Around the above it should be possible to build all the configuration
machinery and
also make meaningful choices when working against the requests coming down
(e.g., you give me a range request with resolution against a dimension with
string values and we can throw back a meaningful service exception)
Mind, whilst there is basically nothing left in core that does not have
a GUI I'm not saying that you have to build the GUI yourself, I'm saying
that whatever solution is chosen it has to allow the construction of a
meaningful
GUI.
Speaking of requirements, the changes you are proposing are core ones,
they _must_ be compounded with unit/integration
tests checking that the code is doing the right thing also with the custom
dimensions. See all the Dimensions*Test test classes here:
http://svn.codehaus.org/geoserver/trunk/src/wms/src/test/java/org/geoserver/wms/wms_1_1_1/
http://svn.codehaus.org/geoserver/trunk/src/wms/src/test/java/org/geoserver/wms/wms_1_3/
I don't mean you have to build that many tests, but there must be some
covering
custom dimensions handling. Which also means there must be a reader (even
a mocked up one) in the classpath that reports such dimensions.
If it sounds like a lot of work, consider that if you try to contribute
to the core code you also have to play by the same rules as a core
developer.
>
> 3) I believe the modified DefaultWebCoverageService100.getCoverage method
> can handle custom dimensions regardless of whether they are numeric. As it
> is now, the axis subset list items (created from the axisSubset elements in
> the request document) that are processed by this method are of type
> TypedLiteralType, which specifies all values as strings. The ELEVATION
> processing assumes that the values can be parsed to numbers, but I don't
> see
> anything requiring the custom dimension processing to make such an
> assumption.
>
Read the WCS 1.0 spec quickly, the spec only cites numeric cases for
custom dimensions, but yeah, I don't see it negating the possibility
for non numeric axes.
Cheers
Andrea
--
-------------------------------------------------------
Ing. Andrea Aime
GeoSolutions S.A.S.
Tech lead
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 962313
mob: +39 339 8844549
http://www.geo-solutions.it
http://geo-solutions.blogspot.com/
http://www.youtube.com/user/GeoSolutionsIT
http://www.linkedin.com/in/andreaaime
http://twitter.com/geowolf
-------------------------------------------------------
------------------------------------------------------------------------------
Virtualization & Cloud Management Using Capacity Planning
Cloud computing makes use of virtualization - but cloud computing
also focuses on allowing computing to be delivered as a service.
http://www.accelacomm.com/jaw/sfnl/114/51521223/
_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel