@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.mustache;
@@ -19,6 +19,7 @@ package org.springframework.boot.autoconfigure.mustache;
import com.samskivert.mustache.DefaultCollector ;
import com.samskivert.mustache.Mustache.Collector ;
import com.samskivert.mustache.Mustache.VariableFetcher ;
import com.samskivert.mustache.Template ;
import org.springframework.context.EnvironmentAware ;
import org.springframework.core.env.ConfigurableEnvironment ;
@ -35,8 +36,6 @@ public class MustacheEnvironmentCollector extends DefaultCollector implements En
@@ -35,8 +36,6 @@ public class MustacheEnvironmentCollector extends DefaultCollector implements En
private ConfigurableEnvironment environment ;
private final VariableFetcher propertyFetcher = new PropertyVariableFetcher ( ) ;
@Override
public void setEnvironment ( Environment environment ) {
this . environment = ( ConfigurableEnvironment ) environment ;
@ -44,20 +43,49 @@ public class MustacheEnvironmentCollector extends DefaultCollector implements En
@@ -44,20 +43,49 @@ public class MustacheEnvironmentCollector extends DefaultCollector implements En
@Override
public VariableFetcher createFetcher ( Object ctx , String name ) {
VariableFetcher f etcher = super . createFetcher ( ctx , name ) ;
if ( f etcher ! = null ) {
return fetcher ;
VariableFetcher nativeF etcher = super . createFetcher ( ctx , name ) ;
if ( nativeF etcher ! = null ) {
return new PropertyVariableFetcher ( nativeFetcher ) ;
}
if ( this . environment . containsProperty ( name ) ) {
return this . propertyFetcher ;
return new PropertyVariableFetcher ( ) ;
}
return null ;
}
/ * *
* { @link VariableFetcher } that also checks the { @link Environment } .
* /
private class PropertyVariableFetcher implements VariableFetcher {
private final VariableFetcher nativeFetcher ;
PropertyVariableFetcher ( ) {
this . nativeFetcher = null ;
}
PropertyVariableFetcher ( VariableFetcher delegate ) {
this . nativeFetcher = delegate ;
}
@Override
public Object get ( Object ctx , String name ) {
Object result = getFromNativeFetcher ( ctx , name ) ;
result = ( result ! = null ) ? result : getFromEnvironment ( name ) ;
return ( result ! = null ) ? result : Template . NO_FETCHER_FOUND ;
}
private Object getFromNativeFetcher ( Object ctx , String name ) {
try {
Object result = ( this . nativeFetcher ! = null ) ? this . nativeFetcher . get ( ctx , name ) : null ;
return ( result ! = Template . NO_FETCHER_FOUND ) ? result : null ;
}
catch ( Exception ex ) {
return null ;
}
}
private Object getFromEnvironment ( String name ) {
return MustacheEnvironmentCollector . this . environment . getProperty ( name ) ;
}