package br.gov.servicos.v3.schema; import br.gov.servicos.orgao.OrgaoRepository; import br.gov.servicos.orgao.Siorg; import com.github.slugify.Slugify; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import lombok.experimental.FieldDefaults; import lombok.experimental.Wither; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.annotation.Id; import org.springframework.data.elasticsearch.annotations.Document; import org.springframework.data.elasticsearch.annotations.Field; import org.springframework.stereotype.Component; import javax.xml.bind.annotation.*; import java.util.Locale; import java.util.Optional; import static br.gov.servicos.config.PortalDeServicosIndex.PORTAL_DE_SERVICOS_INDEX; import static lombok.AccessLevel.PRIVATE; import static org.springframework.data.elasticsearch.annotations.FieldIndex.analyzed; import static org.springframework.data.elasticsearch.annotations.FieldIndex.not_analyzed; import static org.springframework.data.elasticsearch.annotations.FieldType.String; @Data @Wither @AllArgsConstructor @NoArgsConstructor @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Orgao") @Document(indexName = PORTAL_DE_SERVICOS_INDEX, type = "orgao") public class OrgaoXML { @XmlAttribute(name = "id", required = true) @Field(type = String, index = not_analyzed, store = true) @Id String id; @XmlElement @Field(type = String, index = not_analyzed, store = true) String url; @XmlElement @Field(type = String, index = analyzed, store = true) String nome; @XmlElement @Field(type = String, index = analyzed, store = true) String conteudo; @XmlElement @Field(type = String, index = analyzed, store = true) String contato; @Field(store = true, type = String, index = not_analyzed) String tipoConteudo; @Field(store = true, type = String, index = not_analyzed) String html; @XmlTransient @Field(store = true, type = String, index = not_analyzed) String xml; @Field(store = true, type = String, index = not_analyzed) String contatoHtml; @Component @FieldDefaults(level = PRIVATE, makeFinal = true) public static class PaginaOrgaoFormatter implements org.springframework.format.Formatter<OrgaoXML> { OrgaoRepository orgaoRepository; Siorg siorg; Slugify slugify; @Autowired public PaginaOrgaoFormatter(OrgaoRepository orgaoRepository, Siorg siorg, Slugify slugify) { this.orgaoRepository = orgaoRepository; this.siorg = siorg; this.slugify = slugify; } @Override public OrgaoXML parse(String id, Locale locale) { return Optional.ofNullable(orgaoRepository.findOne(slugify.slugify(id))) .orElse(siorg.obterOrgao(id)); } @Override public String print(OrgaoXML conteudo, Locale locale) { return conteudo.getId(); } } }