[
https://issues.apache.org/jira/browse/DIGESTER-131?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12648033#action_12648033
]
Volker Karlmeier commented on DIGESTER-131:
-------------------------------------------
The above patch for ExtendedBaseRules provides the possibility of matching
recursive patterns in subnodes.
> [PATCH] commons-digester / Allow recursive match in ExtendedBaseRules.java
> (see comments to patch)
> --------------------------------------------------------------------------------------------------
>
> Key: DIGESTER-131
> URL: https://issues.apache.org/jira/browse/DIGESTER-131
> Project: Commons Digester
> Issue Type: Improvement
> Environment: all
> Reporter: Volker Karlmeier
> Original Estimate: 0.17h
> Remaining Estimate: 0.17h
>
> Index:
> /home/volker/workspace/commons-digester/src/java/org/apache/commons/digester/ExtendedBaseRules.java
> ===================================================================
> - ---
> /home/volker/workspace/commons-digester/src/java/org/apache/commons/digester/ExtendedBaseRules.java
> (revision 718060)
> +++
> /home/volker/workspace/commons-digester/src/java/org/apache/commons/digester/ExtendedBaseRules.java
> (working copy)
> @@ -234,6 +234,32 @@
> ~ // we keep the list of universal matches separate
> ~ List universalList = new ArrayList(counter);
> + // Universal wildcards ('*') in the middle of the pattern-string
> + List recList = null;
> + int parentLastIndex=-1;
> + // temporary parentPattern
> + // we don't want to change anything....
> + String tempParentPattern = parentPattern;
> + // look for pattern. Here, we search the whole
> + // parent.
> + while ((parentLastIndex = tempParentPattern.lastIndexOf('/')) > -1
> && recList == null) {
> + recList = (List)
> this.cache.get(tempParentPattern+"/*/"+pattern.substring(lastIndex+1));
> + if (recList != null) {
> + // when /*/-pattern-string is found, add method
> + // list to universalList.
> + // Digester will do the rest
> + universalList.addAll(recList);
> + } else {
> + // if not, shorten tempParent to move /*/ one position
> + // to the left.
> + // as last part of patttern is always added
> + // we make sure pattern is allowed anywhere.
> + tempParentPattern=parentPattern.substring(0,
> parentLastIndex);
> + }
> + + }
> + + ~ // Universal all wildards ('!*')
> ~ // These are always matched so always add them
> ~ List tempList = (List) this.cache.get("!*");
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.