private void processObjectLevelRule(ObjectSpecs objectSpecs, StructNode sourceNode) throws IOException { String ruleText = sourceNode.getName().substring(1).trim(); Pair<PageRule, Map<String, String>> rule = findAndProcessRule(ruleText, sourceNode); pageSpecHandler.setGlobalVariable("objectName", objectSpecs.getObjectName(), sourceNode); List<StructNode> specNodes = rule.getKey() .apply(pageSpecHandler, ruleText, objectSpecs.getObjectName(), rule.getValue()); SpecGroup specGroup = new SpecGroup(); specGroup.setName(ruleText); objectSpecs.addSpecGroup(specGroup); for (StructNode specNode : specNodes) { specGroup.addSpec( pageSpecHandler .getSpecReader() .read(specNode.getName(), pageSpecHandler.getContextPath())); } }
private Pair<PageRule, Map<String, String>> findAndProcessRule( String ruleText, StructNode ruleNode) { for (Pair<Rule, PageRule> rulePair : pageSpecHandler.getPageRules()) { Matcher matcher = rulePair.getKey().getPattern().matcher(ruleText); if (matcher.matches()) { int index = 1; Map<String, String> parameters = new HashMap<String, String>(); for (String parameterName : rulePair.getKey().getParameters()) { String value = matcher.group(index); pageSpecHandler.setGlobalVariable(parameterName, value, ruleNode); parameters.put(parameterName, value); index += 1; } return new ImmutablePair<PageRule, Map<String, String>>(rulePair.getValue(), parameters); } } throw new SyntaxException(ruleNode, "Could find rule matching: " + ruleText); }