From 414bb151ae33dfea39e2fe3834d0fa3cde515c9d Mon Sep 17 00:00:00 2001 From: serega6531 Date: Thu, 16 May 2019 16:01:15 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20fetchLat?= =?UTF-8?q?est,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=BF=D0=BE=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=82=D1=82=D0=B5=D1=80=D0=BD=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serega6531/packmate/model/Pagination.java | 2 -- .../packmate/repository/StreamRepository.java | 11 +++++++--- .../packmate/service/StreamService.java | 22 +++++++++++++------ 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/main/java/ru/serega6531/packmate/model/Pagination.java b/src/main/java/ru/serega6531/packmate/model/Pagination.java index fa7d38e..91e8384 100644 --- a/src/main/java/ru/serega6531/packmate/model/Pagination.java +++ b/src/main/java/ru/serega6531/packmate/model/Pagination.java @@ -6,8 +6,6 @@ import org.springframework.data.domain.Sort; @Data public class Pagination { - private boolean fetchLatest; - private Sort.Direction direction; private long startingFrom; diff --git a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java index 728bf4d..1656024 100644 --- a/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java +++ b/src/main/java/ru/serega6531/packmate/repository/StreamRepository.java @@ -3,22 +3,27 @@ package ru.serega6531.packmate.repository; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import ru.serega6531.packmate.model.CtfService; +import ru.serega6531.packmate.model.Pattern; import ru.serega6531.packmate.model.Stream; import java.util.List; public interface StreamRepository extends JpaRepository { - List findAllByFavorite(Pageable pageable, boolean favorite); - List findAllByIdGreaterThanAndFavorite(long streamId, boolean favorite, Pageable pageable); List findAllByIdLessThanAndFavorite(long streamId, boolean favorite, Pageable pageable); - List findAllByServiceAndFavorite(CtfService service, boolean favorite, Pageable pageable); + List findAllByIdGreaterThanAndFavoriteAndFoundPatternsContaining(long streamId, boolean favorite, Pattern pattern, Pageable pageable); + + List findAllByIdLessThanAndFavoriteAndFoundPatternsContaining(long streamId, boolean favorite, Pattern pattern, Pageable pageable); List findAllByServiceAndIdGreaterThanAndFavorite(CtfService service, long streamId, boolean favorite, Pageable pageable); List findAllByServiceAndIdLessThanAndFavorite(CtfService service, long streamId, boolean favorite, Pageable pageable); + List findAllByServiceAndIdGreaterThanAndFavoriteAndFoundPatternsContaining(CtfService service, long streamId, boolean favorite, Pattern pattern, Pageable pageable); + + List findAllByServiceAndIdLessThanAndFavoriteAndFoundPatternsContaining(CtfService service, long streamId, boolean favorite, Pattern pattern, Pageable pageable); + } diff --git a/src/main/java/ru/serega6531/packmate/service/StreamService.java b/src/main/java/ru/serega6531/packmate/service/StreamService.java index 809e290..1a43547 100644 --- a/src/main/java/ru/serega6531/packmate/service/StreamService.java +++ b/src/main/java/ru/serega6531/packmate/service/StreamService.java @@ -67,10 +67,10 @@ public class StreamService { stream.setEndTimestamp(packets.get(packets.size() - 1).getTimestamp()); stream.setService(serviceOptional.get()); - if(ignoreEmptyPackets) { + if (ignoreEmptyPackets) { packets.removeIf(packet -> packet.getContent().length == 0); - if(packets.isEmpty()) { + if (packets.isEmpty()) { log.debug("Стрим состоит только из пустых пакетов и не будет сохранен"); return false; } @@ -114,7 +114,7 @@ public class StreamService { @Transactional public void setFavorite(long id, boolean favorite) { final Optional streamOptional = repository.findById(id); - if(streamOptional.isPresent()) { + if (streamOptional.isPresent()) { final Stream stream = streamOptional.get(); stream.setFavorite(favorite); repository.save(stream); @@ -124,8 +124,12 @@ public class StreamService { public List findAll(Pagination pagination) { PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); - if(pagination.isFetchLatest()) { // последние стримы - return repository.findAllByFavorite(page, pagination.isFavorites()); + if (pagination.getPattern() != null) { // задан паттерн для поиска + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByIdGreaterThanAndFavoriteAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + } else { // более старые стримы + return repository.findAllByIdLessThanAndFavoriteAndFoundPatternsContaining(pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + } } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы return repository.findAllByIdGreaterThanAndFavorite(pagination.getStartingFrom(), pagination.isFavorites(), page); @@ -138,8 +142,12 @@ public class StreamService { public List findAllByService(Pagination pagination, CtfService service) { PageRequest page = PageRequest.of(0, pagination.getPageSize(), pagination.getDirection(), "id"); - if(pagination.isFetchLatest()) { // последние стримы - return repository.findAllByServiceAndFavorite(service, pagination.isFavorites(), page); + if (pagination.getPattern() != null) { // задан паттерн для поиска + if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы + return repository.findAllByServiceAndIdGreaterThanAndFavoriteAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern() page); + } else { // более старые стримы + return repository.findAllByServiceAndIdLessThanAndFavoriteAndFoundPatternsContaining(service, pagination.getStartingFrom(), pagination.isFavorites(), pagination.getPattern(), page); + } } else { if (pagination.getDirection() == Sort.Direction.ASC) { // более новые стримы return repository.findAllByServiceAndIdGreaterThanAndFavorite(service, pagination.getStartingFrom(), pagination.isFavorites(), page);