Index.java

package jasper.component.channel;

import jasper.component.ConfigCache;
import jasper.repository.IndexRepository;
import jasper.service.dto.TemplateDto;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;

import static jasper.domain.proj.HasOrigin.origin;
import static org.apache.commons.lang3.StringUtils.isBlank;

@Component
public class Index {
	private static final Logger logger = LoggerFactory.getLogger(Index.class);

	@Autowired
	IndexRepository indexRepository;

	@Autowired
	ConfigCache configs;

	@ServiceActivator(inputChannel = "templateRxChannel")
	public void handleTemplateUpdate(Message<TemplateDto> message) {
		if (!configs.root().script("_config/index", "")) return;
		if (isBlank(origin(message.getHeaders().get("origin").toString())) && "_config/index".equals(message.getPayload().getTag())) {
			updateIndex();
		}
	}

	@EventListener(ApplicationReadyEvent.class)
	public void init() {
		if (!configs.root().script("_config/index", "")) return;
		updateIndex();
	}

	public void updateIndex() {
		logger.info("Updating DB indices");
		var index = configs.index();
		if (index.isTags()) {
			try {
				indexRepository.buildTags();
			} catch (Exception ignored) {}
			try {
				indexRepository.buildExpandedTags();
			} catch (Exception ignored) {}
		} else {
			indexRepository.dropTags();
			indexRepository.dropExpandedTags();
		}
		if (index.isSources()) {
			try {
				indexRepository.buildSources();
			} catch (Exception ignored) {}
		} else {
			indexRepository.dropSources();
		}
		if (index.isAlts()) {
			try {
				indexRepository.buildAlts();
			} catch (Exception ignored) {}
		} else {
			indexRepository.dropAlts();
		}
		if (index.isFulltext()) {
			try {
				indexRepository.buildFulltext();
			} catch (Exception ignored) {}
		} else {
			indexRepository.dropFulltext();
		}
		if (index.isPublished()) {
			try {
				indexRepository.buildPublished();
			} catch (Exception ignored) {}
		} else {
			indexRepository.dropPublished();
		}
		if (index.isModified()) {
			try {
				indexRepository.buildModified();
			} catch (Exception ignored) {}
		} else {
			indexRepository.dropModified();
		}
	}

}