int paramIndex = 0;
while (expressionMatcher.find())
{
elPattern = true;
String expression = expressionMatcher.group(1);
PathParameter param = ExpressionProcessorRunner.process(expression);
param.setPosition(paramIndex);
pathParameters.add(param);
expressionMatcher.appendReplacement(segmentableExpressions, Segment.parameterize(paramIndex));
paramIndex++;
}
expressionMatcher.appendTail(segmentableExpressions);
this.pathParameters = Collections.unmodifiableList(pathParameters);
URL segmentedPattern = new URL(segmentableExpressions.toString());
/*
* Extract path segments, overlaying regexes found during parameter
* discovery.
*/
for (String segmentPattern : segmentedPattern.getSegments())
{
Segment segment = new Segment();
segment.setTemplate(segmentPattern);
StringBuffer regex = new StringBuffer();
Matcher parameterMatcher = Segment.getTemplateMatcher(segmentPattern);
while (parameterMatcher.find())
{
String group = parameterMatcher.group(1);
PathParameter parameter = pathParameters.get(Integer.valueOf(group));
segment.addParameter(parameter);
parameterMatcher.appendReplacement(regex, "(" + parameter.getRegex() + ")");
}
parameterMatcher.appendTail(regex);
segment.setRegex(regex.toString());
pathSegments.add(segment);