All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.savantly.sprout.module.content.model.contentItem.ContentItemRenderingChain Maven / Gradle / Ivy

The newest version!
package net.savantly.sprout.module.content.model.contentItem;

import java.io.StringWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;

public class ContentItemRenderingChain implements InitializingBean {
	
	@Autowired
	private ApplicationContext context;
	
	private List contentItemRenderers = new ArrayList<>();
	
	public void addRenderer(ContentItemRenderer renderer) {
		this.contentItemRenderers.add(renderer);
	}
	
	private List getRenderersInPriority() {
		return Collections.unmodifiableList(this.contentItemRenderers.stream()
				.sorted(Comparator.comparing(ContentItemRenderer::getPriority).reversed())
				.collect(Collectors.toList()));
	}
	
	public void renderContentItem(ContentItemImpl content, StringWriter writer) {
		for (ContentItemRenderer contentItemRenderer : getRenderersInPriority()) {
			if(contentItemRenderer.render(content, writer)) {
				return;
			}
		}
	}

	@Override
	public void afterPropertiesSet() throws Exception {
		Map beans = context.getBeansOfType(ContentItemRenderer.class);
		this.contentItemRenderers.addAll(beans.values());
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy