}
@Override
public Template rewrite( Resolver resolver, Template inputUri, Direction direction, String ruleName ) {
Template outputUri = inputUri;
UrlRewriteStepProcessorHolder stepHolder = null;
String effectiveRuleName = null;
if( ruleName == null || "*".equals( ruleName ) ) {
ruleName = null; // Used for logging later.
Matcher<UrlRewriteRuleProcessorHolder>.Match match = null;
switch( direction ) {
case IN:
match = inbound.match( outputUri );
break;
case OUT:
match = outbound.match( outputUri );
break;
}
if( match != null ) {
stepHolder = match.getValue();
effectiveRuleName = match.getValue().getRuleName();
}
} else if( !ruleName.isEmpty() ) {
stepHolder = rules.get( ruleName );
effectiveRuleName = ruleName;
}
if( stepHolder != null ) {
UrlRewriteContext context = new UrlRewriteContextImpl( environment, resolver, functions, direction, inputUri );
try {
UrlRewriteStepStatus stepStatus = stepHolder.process( context );
if( UrlRewriteStepStatus.SUCCESS == stepStatus ) {
outputUri = context.getCurrentUrl();
if( ruleName == null ) {
LOG.rewroteUrlViaImplicitRule( inputUri, direction, effectiveRuleName, outputUri );
} else {