- Parameter supplying an Attribute, needs to know which Parameter is supplying the schema (so we can show a nice drop-down list)
- Parameters that are required to work together in a group
- Parameters that are exclusive (only one can be used in a group)
I would like to propose two simple modifications to the Parameter class, to enhance the semantics of geoprocesses. They both can be implemented as new hints, and made available through the DescribeParameter annotation - A hint describing dependence of one parameter to another. The most typical use for that would be to indicate the relation between a String parameter representign and attribute and a FeatureCollection. That would allow the user interface to make it easier for the user to select the field, as it could be taken from the list of available ones for the selected FC - A hint describing the group of optional one a parameter belongs to. Some processes have a set of 2 or 3 parameters, from which just one has to be used (see the ContourProcess for example). If these grouping is not explicitly described, the UI will let the user fill all parameters or none of them, instead of enforcing using only one of them. As you can see, it is a very simple thing, but I think that would add more robustness to the process semantics. Adapting existing processes to this change is trivial and should take little time to do. Looking forward to knowing your opinion on this. Regards Victor
Here are the code examples.
Parameter<Boolean> SNAPPING = new Parameter<Boolean>("snapping", Boolean.class, "Enable Snapping", "True to enable snapping, requires use of 'distance' parameter", true, 1, 1, new KVP( GROUP ="snap", INTERACTION, "enable" ) ); Parameter<Double> DISTANCE = new Parameter<Double>("distance", Double.class, "Snapping Distance", "Snapping distance used, required when 'snapping' parameter is True.", false, 0, 1, new KVP( GROUP = "snap" ) );
Attribute and Expression
This example is interesting as both DISSOLVE and ATTRIBUTE "look up" in their group for the parameter providing a "schema". Attribute allows more than one attribute to be defined, using the same Transform Definition thing as the transform process.
Parameter<FeatureCollection> FEATURES = new Parameter<FeatureCollection>("features", FeatureCollection.class, "Features", "Features being disolved", true, 1, 1, new KVP( GROUP ="dissolve", INTERACTION, "schema" ) ); Parameter<String> DISSOLVE = new Parameter<String>("dissolve", String.class, "Dissolve Attribute", "Attribute used to form groups when dissolving", true, 0, 1, new KVP( GROUP = "dissolve" ) ); Parameter<TransformDefinition> ATTRIBUTE = new Parameter<TransformDefinition>("attribute", TransformDefinition.class, "Attribute", "Attribute defined using an aggregate function (sum, min, max, first, average)", false, 0, Integer.MAX_INTEGER, new KVP( GROUP = "dissolve" ) );