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