package pl.matisoft.soy.global.runtime; import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.template.soy.data.SoyMapData; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import pl.matisoft.soy.global.runtime.resolvers.RuntimeDataResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; import java.util.Map; /** * Created with IntelliJ IDEA. * User: mati * Date: 14/07/2013 * Time: 16:46 * * A default implementation of GlobalModelResolver contains a list of resolvers, * each resolver can decide what data should be injected. */ public class DefaultGlobalRuntimeModelResolver implements GlobalRuntimeModelResolver { private static final Logger logger = LoggerFactory.getLogger(DefaultGlobalRuntimeModelResolver.class); private List<RuntimeDataResolver> resolvers = Lists.newArrayList(); private List<RuntimeDataResolver> userResolvers = Lists.newArrayList(); public DefaultGlobalRuntimeModelResolver(List<RuntimeDataResolver> resolvers) { this.resolvers = resolvers; } public DefaultGlobalRuntimeModelResolver(List<RuntimeDataResolver> resolvers, List<RuntimeDataResolver> userResolvers) { this.resolvers = resolvers; this.userResolvers = userResolvers; } public DefaultGlobalRuntimeModelResolver() { } @Override public Optional<SoyMapData> resolveData(final HttpServletRequest request, final HttpServletResponse response, final Map<String, ? extends Object> model) { final SoyMapData root = new SoyMapData(); for (final RuntimeDataResolver runtimeDataResolver : resolvers) { logger.debug("resolving:{}", runtimeDataResolver); runtimeDataResolver.resolveData(request, response, model, root); } for (final RuntimeDataResolver runtimeDataResolver : userResolvers) { logger.debug("user data resolving:{}", runtimeDataResolver); runtimeDataResolver.resolveData(request, response, model, root); } return Optional.of(root); } public void setResolvers(List<RuntimeDataResolver> resolvers) { this.resolvers = resolvers; } public List<RuntimeDataResolver> getResolvers() { return resolvers; } public List<RuntimeDataResolver> getUserResolvers() { return userResolvers; } public void setUserResolvers(List<RuntimeDataResolver> userResolvers) { this.userResolvers = userResolvers; } }