3030import org .apache .commons .lang3 .tuple .Pair ;
3131
3232import java .io .IOException ;
33- import java .util .Collections ;
34- import java .util .HashMap ;
35- import java .util .List ;
36- import java .util .Map ;
33+ import java .util .*;
3734import java .util .regex .Matcher ;
3835
3936public class PageSectionProcessor {
@@ -94,21 +91,21 @@ private void processSectionRule(PageSection section, StructNode ruleNode) throws
9491 List <StructNode > resultingNodes ;
9592 try {
9693 resultingNodes = rule .getKey ().apply (pageSpecHandler , ruleText , NO_OBJECT_NAME , rule .getValue (), ruleNode .getChildNodes ());
94+ processSection (ruleSection , resultingNodes );
9795 } catch (Exception ex ) {
98- throw new SyntaxException (ruleNode , "Error processing custom rule" , ex );
96+ throw new SyntaxException (ruleNode , "Error processing rule: " + ruleText , ex );
9997 }
100- processSection (ruleSection , resultingNodes );
10198 }
10299
103100 private Pair <PageRule , Map <String , String >> findAndProcessRule (String ruleText , StructNode ruleNode ) {
104- List <Pair <Rule , PageRule >> rulePairs = pageSpecHandler .getPageRules ();
101+ ListIterator <Pair <Rule , PageRule >> iterator = pageSpecHandler .getPageRules (). listIterator ( pageSpecHandler . getPageRules (). size () );
105102 /*
106- It is important to reverse the rules list so that
103+ It is important to make a reversed iteration over all rules so that
107104 it is possible for the end user to override previously defined rules
108105 */
109- Collections .reverse (rulePairs );
110106
111- for (Pair <Rule , PageRule > rulePair : rulePairs ) {
107+ while (iterator .hasPrevious ()) {
108+ Pair <Rule , PageRule > rulePair = iterator .previous ();
112109 Matcher matcher = rulePair .getKey ().getPattern ().matcher (ruleText );
113110 if (matcher .matches ()) {
114111 int index = 1 ;
@@ -133,17 +130,21 @@ private void processObjectLevelRule(ObjectSpecs objectSpecs, StructNode sourceNo
133130 String ruleText = sourceNode .getName ().substring (1 ).trim ();
134131 Pair <PageRule , Map <String , String >> rule = findAndProcessRule (ruleText , sourceNode );
135132
136- pageSpecHandler .setGlobalVariable ("objectName" , objectSpecs .getObjectName (), sourceNode );
133+ try {
134+ pageSpecHandler .setGlobalVariable ("objectName" , objectSpecs .getObjectName (), sourceNode );
137135
138- List <StructNode > specNodes = rule .getKey ().apply (pageSpecHandler , ruleText , objectSpecs .getObjectName (), rule .getValue (), sourceNode .getChildNodes ());
136+ List <StructNode > specNodes = rule .getKey ().apply (pageSpecHandler , ruleText , objectSpecs .getObjectName (), rule .getValue (), sourceNode .getChildNodes ());
139137
140138
141- SpecGroup specGroup = new SpecGroup ();
142- specGroup .setName (ruleText );
143- objectSpecs .addSpecGroup (specGroup );
139+ SpecGroup specGroup = new SpecGroup ();
140+ specGroup .setName (ruleText );
141+ objectSpecs .addSpecGroup (specGroup );
144142
145- for (StructNode specNode : specNodes ) {
146- specGroup .addSpec (pageSpecHandler .getSpecReader ().read (specNode .getName (), pageSpecHandler .getContextPath ()));
143+ for (StructNode specNode : specNodes ) {
144+ specGroup .addSpec (pageSpecHandler .getSpecReader ().read (specNode .getName (), pageSpecHandler .getContextPath ()));
145+ }
146+ } catch (Exception ex ) {
147+ throw new SyntaxException (sourceNode , "Error processing rule: " + ruleText , ex );
147148 }
148149 }
149150
0 commit comments