|
|
|
@ -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
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public VariableFetcher createFetcher(Object ctx, String name) {
|
|
|
|
|
VariableFetcher fetcher = super.createFetcher(ctx, name);
|
|
|
|
|
if (fetcher != null) {
|
|
|
|
|
return fetcher;
|
|
|
|
|
VariableFetcher nativeFetcher = super.createFetcher(ctx, name);
|
|
|
|
|
if (nativeFetcher != 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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|