package org.activityinfo.server.branding;
import com.google.common.base.Strings;
import com.google.inject.Inject;
import com.google.inject.Provider;
import freemarker.core.Environment;
import freemarker.template.*;
import org.activityinfo.server.database.hibernate.entity.Domain;
import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;
public class ScaffoldingDirective implements TemplateDirectiveModel {
private Provider<Domain> domainProvider;
private Configuration templateConfiguration;
private Template defaultScaffoldingTemplate;
@Inject
public ScaffoldingDirective(Provider<Domain> domainProvider,
Configuration templateConfiguration) throws IOException {
super();
this.domainProvider = domainProvider;
this.templateConfiguration = templateConfiguration;
this.defaultScaffoldingTemplate = templateConfiguration.getTemplate("/page/DefaultScaffolding.ftl");
}
@Override
public void execute(Environment env,
Map params,
TemplateModel[] loopVars,
TemplateDirectiveBody body) throws TemplateException, IOException {
// write out the inner body to a string
StringWriter bodyWriter = new StringWriter();
body.render(bodyWriter);
env.setVariable("body", new SimpleScalar(bodyWriter.toString()));
env.setVariable("title", (TemplateModel) params.get("title"));
env.include(getTemplate());
}
private Template getTemplate() {
String scaffoldingTemplateSource = domainProvider.get().getScaffolding();
if (Strings.isNullOrEmpty(scaffoldingTemplateSource)) {
return defaultScaffoldingTemplate;
} else {
try {
return new Template(domainProvider.get().getHost(), scaffoldingTemplateSource, templateConfiguration);
} catch (IOException e) {
throw new RuntimeException("Exception creating custom scaffolding template", e);
}
}
}
}