package br.gov.servicos.config; import br.gov.servicos.cms.PaginaEstatica; import br.gov.servicos.cms.PaginaTematica; import br.gov.servicos.v3.schema.OrgaoXML; import br.gov.servicos.v3.schema.ServicoXML; import lombok.experimental.FieldDefaults; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.core.io.ClassPathResource; import org.springframework.data.elasticsearch.core.ElasticsearchTemplate; import org.springframework.stereotype.Component; import java.io.IOException; import static br.gov.servicos.foundation.IO.read; import static lombok.AccessLevel.PRIVATE; @Component @FieldDefaults(makeFinal = true, level = PRIVATE) public class PortalDeServicosIndex { public static final String PORTAL_DE_SERVICOS_INDEX = "portal-de-servicos"; private static final String SETTINGS = "/elasticsearch/settings.json"; ElasticsearchTemplate es; @Autowired public PortalDeServicosIndex(ElasticsearchTemplate es) { this.es = es; } private static String settings() { return read(new ClassPathResource(SETTINGS)); } @CacheEvict(value = { "buscas", "html", "pagina-estatica", "pagina-tematica", "areas-de-interesse", "servicos-destaque", "orgaos", "servicos-por-area-de-interesse", "servicos-por-orgao", "servicos-por-segmento-da-sociedade" }, allEntries = true) public void recriar() throws IOException { recriarIndiceImportador(); es.putMapping(OrgaoXML.class); es.putMapping(ServicoXML.class); es.putMapping(PaginaEstatica.class); es.putMapping(PaginaTematica.class); } private void recriarIndiceImportador() throws IOException { if (es.indexExists(PORTAL_DE_SERVICOS_INDEX)) { es.deleteIndex(PORTAL_DE_SERVICOS_INDEX); } es.createIndex(PORTAL_DE_SERVICOS_INDEX, settings()); } }