mapserver/tinyows — pull request #3 by fredmorin (2012-05-09 13:42:03+00:00)
Title: Pull request for 3 tickets 

Le premier ticket consiste a supporter gml_exclude_items. Lorsqu'on expose une table avec TinyOWS, il était impossible d'exclure des items. Dans notre cas, certains champs de la table sont remplis par des triggers, il ne fallait donc pas les exposer avec TinyOWS. D'ou le support de gml_exclude_items. https://github.com/mapserver/mapserver/issues/4292 Je résume les changements pour ce ticket, voir le fichier de diff attaché pour plus de détails.
/src/mapfile/mapfile.c
case MAP_LMD_EXCLUDE_ITEMS:
+ map_l->exclude_items = list_explode_str_trim(',', yytext);
+ return;

/src/ows/ows_layer.c
@@ -434,6 +434,7 @@ ows_layer *ows_layer_init()
+ l->exclude_items = NULL;
@@ -459,6 +460,7 @@ void ows_layer_free(ows_layer * l)
+ if (l->exclude_items) list_free(l->exclude_items);
@@ void ows_layer_flush(ows_layer * l, FILE * output)
+
+ if(l->exclude_items){
+ fprintf(output, "exclude_items: ");
+ list_flush(l->exclude_items, output);
+ fprintf(output, "\n");
+ }

/src/ows_api.h
+list *list_explode_str_trim(char separator, const char *value);

/src/ows_struct.h
+ list * exclude_items;

/src/ows/ows_layer.c
+ l->exclude_items = NULL;

/src/struct/list.c
+/*
+ * Trunk an initial string into several pieces upon a separator char
+ * Careful returned list must then be free with list_free()
+ */
+list *list_explode_str_trim(char separator, const char *value)...

/src/wfs/wfs_describe.c
La plupart des changements se situent a cet endroit. Les trois tickets impliquent des modifications a la fonction wfs_complex_type(ows * o, wfs_request * wr, buffer * layer_name)

Le deuxième ticket consiste a exposer la contrainte maxLength lorsqu'il y a une contrainte de longueur de string dans PG. Pour que l'application client puisse valider que la longueur du texte entré par l'utilisateur est valide, la contrainte maxLenght doit être exposé par DescribeFeatureType: https://github.com/mapserver/mapserver/issues/4293 Je résume les changements pour ce ticket, voir le fichier de diff attaché pour plus de détails.
/src/ows_api.h
+buffer *ows_psql_column_character_maximum_length(ows * o, buffer * column_name, buffer * table_name);

/src/ows/ows_psql.c
+/*
+ * Returns the column character_maximum_length value from the database
+ * information schema.
+ * Used to return maxLenght constraint in describe feature type request.
+ */
+buffer *ows_psql_column_character_maximum_length(ows * o, buffer * column_name, buffer * table_name) ...

/src/wfs/wfs_describe.c
La plupart des changements se situent a cet endroit. Les trois tickets impliquent des modifications a la fonction wfs_complex_type(ows * o, wfs_request * wr, buffer * layer_name)

/src/wfs/wfs_get_feature.c
+ /* Avoid to expose elements in mapfile gml_exclude_items */
+ prop_name_buffer = buffer_from_str(prop_name);
+
+ if (in_list(ows_layer_get(o->layers, layer_name)->exclude_items, prop_name_buffer)){ return; }
+
+ buffer_free(prop_name_buffer);
+

Le troisième ticket consiste a exposer les contraintes d'énumérations lorsque disponible. https://github.com/mapserver/mapserver/issues/4311 . Suite a ce ticket, j'ai aussi modifié le code de WFST Feature Editing (form.js) pour prendre cette contrainte en compte et exposer un combobox plutôt qu'un champ texte. Je vais créer le ticket sur le github de geoext plus tard aujourd'hui. Je résume les changements.
/src/ows/ows_psql.c
Ajout de 2 fonctions.
+/*
+ * Returns the constraint name for a table column.
+ * Used to return enumeration constraints in describe feature type request.
+ */
+buffer *ows_psql_column_constraint_name(ows * o, buffer * column_name, buffer * table_name){

+/*
+ * Returns the list of possible values for a column according to the constraint value.
+ * Used to return enumeration constraints in describe feature type request.
+ */
+list *ows_psql_column_check_constraint(ows * o, buffer * constraint_name){

/src/ows_api.h
+buffer *ows_psql_column_constraint_name(ows * o, buffer * column_name, buffer * table_name);
+list *ows_psql_column_check_constraint(ows * o, buffer * constraint_name);

/src/wfs/wfs_describe.c
La plupart des changements se situent a cet endroit. Les trois tickets impliquent des modifications a la fonction wfs_complex_type(ows * o, wfs_request * wr, buffer * layer_name)