diff --git a/frontend b/frontend index db8370e..630ceb9 160000 --- a/frontend +++ b/frontend @@ -1 +1 @@ -Subproject commit db8370e40cf3ce4e0e30ba89c6c0d1531704b2ce +Subproject commit 630ceb9241ce4fc707b572f689a2b27c13be52cd diff --git a/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java b/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java index 8b005de..90f35a5 100644 --- a/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java +++ b/src/main/java/ru/serega6531/packmate/configuration/ApplicationConfiguration.java @@ -1,6 +1,8 @@ package ru.serega6531.packmate.configuration; +import org.modelmapper.Converter; import org.modelmapper.ModelMapper; +import org.modelmapper.TypeMap; import org.pcap4j.core.PcapNativeException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -8,7 +10,10 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableScheduling; +import ru.serega6531.packmate.model.Pattern; +import ru.serega6531.packmate.model.Stream; import ru.serega6531.packmate.model.enums.CaptureMode; +import ru.serega6531.packmate.model.pojo.StreamDto; import ru.serega6531.packmate.pcap.FilePcapWorker; import ru.serega6531.packmate.pcap.LivePcapWorker; import ru.serega6531.packmate.pcap.NoOpPcapWorker; @@ -18,6 +23,8 @@ import ru.serega6531.packmate.service.StreamService; import ru.serega6531.packmate.service.SubscriptionService; import java.net.UnknownHostException; +import java.util.Set; +import java.util.stream.Collectors; @Configuration @EnableScheduling @@ -35,14 +42,33 @@ public class ApplicationConfiguration { @Value("${capture-mode}") CaptureMode captureMode) throws PcapNativeException, UnknownHostException { return switch (captureMode) { case LIVE -> new LivePcapWorker(servicesService, streamService, localIpString, interfaceName); - case FILE -> new FilePcapWorker(servicesService, streamService, subscriptionService, localIpString, filename); + case FILE -> + new FilePcapWorker(servicesService, streamService, subscriptionService, localIpString, filename); case VIEW -> new NoOpPcapWorker(); }; } @Bean public ModelMapper modelMapper() { - return new ModelMapper(); + ModelMapper modelMapper = new ModelMapper(); + + addStreamMapper(modelMapper); + + return modelMapper; + } + + private void addStreamMapper(ModelMapper modelMapper) { + TypeMap streamMapper = modelMapper.createTypeMap(Stream.class, StreamDto.class); + + Converter, Set> patternSetToIdSet = ctx -> ctx.getSource() + .stream() + .map(Pattern::getId) + .collect(Collectors.toSet()); + + streamMapper.addMappings(mapping -> + mapping.using(patternSetToIdSet) + .map(Stream::getFoundPatterns, StreamDto::setFoundPatternsIds) + ); } } diff --git a/src/main/java/ru/serega6531/packmate/model/pojo/StreamDto.java b/src/main/java/ru/serega6531/packmate/model/pojo/StreamDto.java index 692d8d8..eb4d2ca 100644 --- a/src/main/java/ru/serega6531/packmate/model/pojo/StreamDto.java +++ b/src/main/java/ru/serega6531/packmate/model/pojo/StreamDto.java @@ -13,7 +13,7 @@ public class StreamDto { private Protocol protocol; private long startTimestamp; private long endTimestamp; - private Set foundPatterns; + private Set foundPatternsIds; private boolean favorite; private int ttl; private String userAgentHash;