package pl.matisoft.soy.ajax.url; import com.google.common.base.Optional; import com.google.common.collect.Lists; import pl.matisoft.soy.ajax.hash.EmptyHashFileGenerator; import pl.matisoft.soy.ajax.hash.HashFileGenerator; import pl.matisoft.soy.template.EmptyTemplateFilesResolver; import pl.matisoft.soy.template.TemplateFilesResolver; import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.net.URL; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * Created with IntelliJ IDEA. * User: mszczap * Date: 03.07.13 * Time: 20:17 */ public class DefaultTemplateUrlComposer implements TemplateUrlComposer { private TemplateFilesResolver templateFilesResolver = new EmptyTemplateFilesResolver(); private HashFileGenerator hashFileGenerator = new EmptyHashFileGenerator(); private String siteUrl = ""; public Optional<String> compose(final HttpServletRequest request, final Collection<String> soyTemplateFileNames) throws IOException { final Optional<String> md5 = hashHelper(soyTemplateFileNames); if (!md5.isPresent()) { return Optional.absent(); } final StringBuilder builder = new StringBuilder(); builder.append(siteUrl); builder.append("/soy/compileJs?"); builder.append("hash="); builder.append(md5.get()); for (final String soyTemplateFileName : soyTemplateFileNames) { builder.append("&"); builder.append("file="); builder.append(soyTemplateFileName); } return Optional.of(builder.toString()); } @Override public Optional<String> compose(final HttpServletRequest request, final String soyTemplateFileName) throws IOException { return compose(request, Lists.newArrayList(soyTemplateFileName)); } private Optional<String> hashHelper(final Collection<String> soyTemplateFileNames) throws IOException { final List<URL> urls = new ArrayList<URL>(); for (final String file : soyTemplateFileNames) { final Optional<URL> url = templateFilesResolver.resolve(file); if (url.isPresent()) { urls.add(url.get()); } } return hashFileGenerator.hashMulti(urls); } public void setTemplateFilesResolver(final TemplateFilesResolver templateFilesResolver) { this.templateFilesResolver = templateFilesResolver; } public void setHashFileGenerator(final HashFileGenerator hashFileGenerator) { this.hashFileGenerator = hashFileGenerator; } public void setSiteUrl(final String siteUrl) { this.siteUrl = siteUrl; } public String getSiteUrl() { return siteUrl; } }