/ msSLDGetFilter */ / Get the corresponding ogc Filter based on the class */ expression. TODO : move function to mapogcfilter.c when */ finished. */ /
| 5608 | /* finished. */ |
| 5609 | /************************************************************************/ |
| 5610 | char *msSLDGetFilter(classObj *psClass, const char *pszWfsFilter) |
| 5611 | { |
| 5612 | char *pszFilter = NULL; |
| 5613 | char szBuffer[500]; |
| 5614 | char *pszOgcFilter = NULL; |
| 5615 | |
| 5616 | if (psClass && psClass->expression.string) |
| 5617 | { |
| 5618 | /* string expression */ |
| 5619 | if (psClass->expression.type == MS_STRING) |
| 5620 | { |
| 5621 | if (psClass->layer && psClass->layer->classitem) |
| 5622 | { |
| 5623 | if (pszWfsFilter) |
| 5624 | snprintf(szBuffer, sizeof(szBuffer), "<ogc:Filter><ogc:And>%s<ogc:PropertyIsEqualTo><ogc:PropertyName>%s</ogc:PropertyName><ogc:Literal>%s</ogc:Literal></ogc:PropertyIsEqualTo></ogc:And></ogc:Filter>\n", |
| 5625 | pszWfsFilter, psClass->layer->classitem, psClass->expression.string); |
| 5626 | else |
| 5627 | snprintf(szBuffer, sizeof(szBuffer), "<ogc:Filter><ogc:PropertyIsEqualTo><ogc:PropertyName>%s</ogc:PropertyName><ogc:Literal>%s</ogc:Literal></ogc:PropertyIsEqualTo></ogc:Filter>\n", |
| 5628 | psClass->layer->classitem, psClass->expression.string); |
| 5629 | pszFilter = msStrdup(szBuffer); |
| 5630 | } |
| 5631 | } |
| 5632 | else if (psClass->expression.type == MS_EXPRESSION) |
| 5633 | { |
| 5634 | pszFilter = msSLDParseLogicalExpression(psClass->expression.string, |
| 5635 | pszWfsFilter); |
| 5636 | } |
| 5637 | else if (psClass->expression.type == MS_REGEX) |
| 5638 | { |
| 5639 | if (psClass->layer && psClass->layer->classitem && psClass->expression.string) |
| 5640 | { |
| 5641 | pszOgcFilter = msSLDConvertRegexExpToOgcIsLike(psClass->expression.string); |
| 5642 | |
| 5643 | if (pszWfsFilter) |
| 5644 | snprintf(szBuffer, sizeof(szBuffer), "<ogc:Filter><ogc:And>%s<ogc:PropertyIsLike wildCard=\"*\" singleChar=\".\" escape=\"\\\"><ogc:PropertyName>%s</ogc:PropertyName><ogc:Literal>%s</ogc:Literal></ogc:PropertyIsLike></ogc:And></ogc:Filter>\n", |
| 5645 | pszWfsFilter, psClass->layer->classitem, pszOgcFilter); |
| 5646 | else |
| 5647 | snprintf(szBuffer, sizeof(szBuffer), "<ogc:Filter><ogc:PropertyIsLike wildCard=\"*\" singleChar=\".\" escape=\"\\\"><ogc:PropertyName>%s</ogc:PropertyName><ogc:Literal>%s</ogc:Literal></ogc:PropertyIsLike></ogc:Filter>\n", |
| 5648 | psClass->layer->classitem, pszOgcFilter); |
| 5649 | |
| 5650 | free(pszOgcFilter); |
| 5651 | |
| 5652 | pszFilter = msStrdup(szBuffer); |
| 5653 | } |
| 5654 | } |
| 5655 | } |
| 5656 | else if (pszWfsFilter) |
| 5657 | { |
| 5658 | snprintf(szBuffer, sizeof(szBuffer), "<ogc:Filter>%s</ogc:Filter>\n", pszWfsFilter); |
| 5659 | pszFilter = msStrdup(szBuffer); |
| 5660 | } |
| 5661 | return pszFilter; |
| 5662 | } |
| 5663 | |
| 5664 | #endif |
no test coverage detected