package io.cattle.platform.configitem.server.template; import io.cattle.platform.configitem.context.ConfigItemContextFactory; import io.cattle.platform.configitem.server.model.impl.AbstractArchiveBasedConfigItem; import io.cattle.platform.configitem.server.model.impl.ArchiveContext; import io.cattle.platform.configitem.server.resource.Resource; import io.cattle.platform.configitem.server.resource.ResourceRoot; import io.cattle.platform.configitem.version.ConfigItemStatusManager; import java.io.IOException; import java.io.OutputStream; import java.util.List; public class TemplatesBasedArchiveItem extends AbstractArchiveBasedConfigItem { private static final String TEMPLATE_KEY = "template"; TemplateFactory templateFactory; public TemplatesBasedArchiveItem(String name, ConfigItemStatusManager versionManager, ResourceRoot resourceRoot, TemplateFactory templateFactory, List<ConfigItemContextFactory> contextFactories) { super(name, versionManager, resourceRoot, contextFactories); this.templateFactory = templateFactory; } @Override protected void writeContent(final ArchiveContext context) throws IOException { super.writeContent(context); for (Resource resource : getResourceRoot().getResources()) { Template template = null; Object cached = resource.getAttibute(TEMPLATE_KEY); if (cached == null || !(cached instanceof Template)) { template = templateFactory.loadTemplate(resource); resource.setAttribute(TEMPLATE_KEY, template); } else { template = (Template) cached; } if (template == null) continue; final Template templateFinal = template; withEntry(context, templateFinal.getOutputName(), template.getSize(), new WithEntry() { @Override public void with(OutputStream os) throws IOException { templateFinal.execute(context.getData(), os); } }); } } }