Skip to content

Instantly share code, notes, and snippets.

@shvyrev
Created September 27, 2024 14:16
Show Gist options
  • Save shvyrev/129f3dc8c1aff772c6665f5b27ea99c8 to your computer and use it in GitHub Desktop.
Save shvyrev/129f3dc8c1aff772c6665f5b27ea99c8 to your computer and use it in GitHub Desktop.

Revisions

  1. shvyrev created this gist Sep 27, 2024.
    62 changes: 62 additions & 0 deletions ZagsReadFileByMessageIdProcessor
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,62 @@
    package org.bft.bftresend.business.zags.processors;


    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.camel.Exchange;
    import org.apache.camel.Processor;
    import org.bft.bftresend.business.zags.model.ZagsProxy;
    import org.bft.bftresend.services.ElectronicArchiveResource;
    import org.bft.bftresend.services.MessageFormater;
    import org.bft.bftresend.utils.MessageProcessor;
    import org.springframework.stereotype.Component;

    import java.nio.file.Files;
    import java.nio.file.Paths;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.UUID;
    import java.util.function.Predicate;

    import static java.nio.charset.StandardCharsets.UTF_8;
    import static org.bft.bftresend.utils.Const.MESSAGE_ID_PREFIX;

    /**
    * Читает содержимое из файла лога. Находит идентификаторы файлов соответсвующее идентификатором сообщений.
    */
    @SuppressWarnings("unchecked")
    @Slf4j
    @Component
    @RequiredArgsConstructor
    public class ZagsReadFileByMessageIdProcessor implements Processor, MessageProcessor {

    private final MessageFormater messageFormater;
    private final ElectronicArchiveResource eaResource;

    @Override
    public void process(Exchange exchange) throws Exception {

    List<UUID> messageIds = (List<UUID>)exchange.getProperty("messages", List.class);
    List<ZagsProxy> proxyList = (List<ZagsProxy>)exchange.getProperty("proxies", List.class);
    Long jobId = exchange.getProperty("jobId", Long.class);
    var filePath = exchange.getIn().getBody().toString();

    Predicate<String> predicate = line -> proxyList.contains(getProxy(line)) && line.contains(MESSAGE_ID_PREFIX);
    List<String> result = new ArrayList<>();

    try (var lines = Files.lines(Paths.get(filePath), UTF_8).filter(predicate)) {

    lines.map(line -> getMessageLogInfo(jobId, line))
    .filter(info -> messageIds.contains(info.messageId()))
    .forEach(messageLogInfo -> {
    eaResource.loadFile(messageLogInfo.fileId(), fileModel -> {
    String text = messageFormater.formatZagsForRabbit(
    fileModel.getFileName(), messageLogInfo.messageId());
    result.add(text);
    });
    });

    exchange.getIn().setBody(result);
    }
    }
    }