Skip to content

Commit

Permalink
Merge pull request #11 from eu-digital-green-certificates/feat/filter…
Browse files Browse the repository at this point in the history
…_selection

Added calculation of varHashList filter
  • Loading branch information
slaurenz authored Mar 4, 2022
2 parents bba6ebf + 47bcdd9 commit f6b101a
Show file tree
Hide file tree
Showing 11 changed files with 512 additions and 272 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

package eu.europa.ec.dgc.revocationdistribution.config;

import eu.europa.ec.dgc.revocationdistribution.model.SliceType;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
Expand All @@ -31,7 +32,9 @@ public class DgcConfigProperties {

private final GatewayDownload revocationListDownload = new GatewayDownload();
private final BloomFilterConfig bloomFilter = new BloomFilterConfig();
private final HashListConfig hashList = new HashListConfig();
private final VarHashListConfig varHashList = new VarHashListConfig();

private final SliceType defaultRevocationDataType = SliceType.BLOOMFILTER;//"BLOOMFILTER";


@Getter
Expand All @@ -52,9 +55,15 @@ public static class BloomFilterConfig {

@Getter
@Setter
public static class HashListConfig {
public static class VarHashListConfig {
private boolean enabled;
private String type = "hash_list";
private String version;
private float probRate;
private int minByteCount = 4;

public int getMinByteCount() {
return minByteCount > 255 ? 255 : minByteCount;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

package eu.europa.ec.dgc.revocationdistribution.config;

import eu.europa.ec.dgc.revocationdistribution.exception.BadRequestException;
import eu.europa.ec.dgc.revocationdistribution.exception.DataNotChangedException;
import eu.europa.ec.dgc.revocationdistribution.exception.DataNotFoundException;
import eu.europa.ec.dgc.revocationdistribution.exception.PreconditionFailedException;
Expand Down Expand Up @@ -90,6 +91,19 @@ public ResponseEntity<Object> handleException(TokenValidationException e) {
.body(e.getMessage());
}

/**
* Handles {@link BadRequestException} when a validation failed.
*
* @param e the thrown {@link BadRequestException}
* @return A ResponseEntity with a ErrorMessage inside.
*/
@ExceptionHandler(BadRequestException.class)
public ResponseEntity<Object> handleException(BadRequestException e) {
return ResponseEntity
.status(e.getStatus())
.body(e.getMessage());
}


/**
* Global Exception Handler to wrap exceptions into a readable JSON Object.
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,34 @@
* ---license-end
*/

package eu.europa.ec.dgc.revocationdistribution.service;
package eu.europa.ec.dgc.revocationdistribution.exception;

public class BadRequestException extends RuntimeException {
public int getStatus() {
return status;
}

import java.util.Optional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
private final int status = 400;

@Slf4j
@RequiredArgsConstructor
@Service
public class SliceCalculationService {
/**
* Constructor for BadRequestException.
*
* @param message Massage of the exception.
* @param inner Inner exception information
*/
public BadRequestException(String message, Throwable inner) {

private final Optional<SliceCalculationHashListImpl> sliceCalculationServiceHashList;
super(message, inner);
}

/**
* Constructor for BadRequestException.
*
* @param message Massage of the exception.
*/
public BadRequestException(String message) {

super(message);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@
package eu.europa.ec.dgc.revocationdistribution.repository;

import eu.europa.ec.dgc.revocationdistribution.entity.PartitionEntity;
import eu.europa.ec.dgc.revocationdistribution.model.SliceType;
import java.time.ZonedDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
Expand All @@ -33,28 +33,30 @@
public interface PartitionRepository extends JpaRepository<PartitionEntity, String> {


List<PartitionEntity> findAllByEtagAndKid(String etag, String kid);
List<PartitionEntity> findAllByEtagAndKidAndDataType(String etag, String kid, SliceType dataType);

List<PartitionEntity> findAllByEtagAndKidAndLastUpdatedAfter(
String etag, String kid, ZonedDateTime ifModifiedSince);
List<PartitionEntity> findAllByEtagAndKidAndDataTypeAndLastUpdatedAfter(
String etag, String kid, SliceType dataType, ZonedDateTime ifModifiedSince);

@Modifying
@Query("UPDATE PartitionEntity p SET p.toBeDeleted = true WHERE p.kid in :kids")
void setToBeDeletedForKids(@Param("kids") List<String> kids);


Optional<PartitionEntity> findOneByEtagAndKidAndId(String etag, String kid, String id);
Optional<PartitionEntity> findOneByEtagAndKidAndIdAndDataType(
String etag, String kid, String id, SliceType dataType);

Optional<PartitionEntity> findOneByEtagAndKidAndIdIsNull(String etag, String kid);
Optional<PartitionEntity> findOneByEtagAndKidAndIdIsNullAndDataType(
String etag, String kid, SliceType dataType);


Optional<PartitionEntity> findOneByEtagAndKidAndIdAndLastUpdatedAfter(
String etag, String kid, String id, ZonedDateTime ifModifiedSince);
Optional<PartitionEntity> findOneByEtagAndKidAndIdAndDataTypeAndLastUpdatedAfter(
String etag, String kid, String id, SliceType dataType, ZonedDateTime ifModifiedSince);

Optional<PartitionEntity> findOneByEtagAndKidAndIdIsNullAndLastUpdatedAfter(
String etag, String kid, ZonedDateTime ifModifiedSince);
Optional<PartitionEntity> findOneByEtagAndKidAndIdIsNullAndDataTypeAndLastUpdatedAfter(
String etag, String kid, SliceType dataType, ZonedDateTime ifModifiedSince);

Long countByEtagAndKidAndId(String etag, String kid, String id);
Long countByEtagAndKidAndIdAndDataType(String etag, String kid, String id, SliceType dataType);

Long countByEtagAndKidAndIdIsNull(String etag, String kid);
Long countByEtagAndKidAndIdIsNullAndDataType(String etag, String kid,SliceType dataType);
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
package eu.europa.ec.dgc.revocationdistribution.repository;

import eu.europa.ec.dgc.revocationdistribution.entity.SliceEntity;
import eu.europa.ec.dgc.revocationdistribution.model.SliceType;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Optional;
Expand All @@ -32,82 +33,94 @@
public interface SliceRepository extends JpaRepository<SliceEntity, String> {


Optional<SliceEntity> findOneByEtagAndKidAndIdAndChunkAndHash(
String etag, String kid, String id, String cid, String sid);
Optional<SliceEntity> findOneByEtagAndKidAndIdAndChunkAndHashAndDataType(
String etag, String kid, String id, String cid, String sid, SliceType dataType);

Optional<SliceEntity> findOneByEtagAndKidAndIdIsNullAndChunkAndHash(
String etag, String kid, String cid, String sid);
Optional<SliceEntity> findOneByEtagAndKidAndIdIsNullAndChunkAndHashAndDataType(
String etag, String kid, String cid, String sid, SliceType dataType);

List<SliceEntity> findAllByEtagAndKidAndIdAndChunk(String etag, String kid, String id, String cid);
List<SliceEntity> findAllByEtagAndKidAndIdAndChunkAndDataType(
String etag, String kid, String id, String cid, SliceType dataType);

List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunk(String etag, String kid, String cid);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkAndDataType(
String etag, String kid, String cid, SliceType dataType);

@Modifying
@Query("UPDATE SliceEntity s SET s.toBeDeleted = true WHERE s.kid in :kids")
void setToBeDeletedForKids(@Param("kids") List<String> kids);

List<SliceEntity> findAllByEtagAndKidAndId(String etag, String kid, String id);
List<SliceEntity> findAllByEtagAndKidAndIdAndDataType(String etag, String kid, String id, SliceType dataType);

List<SliceEntity> findAllByEtagAndKidAndIdIsNull(String etag, String kid);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndDataType(String etag, String kid, SliceType dataType);

List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndLastUpdatedAfter(
String etag, String kid, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndDataTypeAndLastUpdatedAfter(
String etag, String kid, SliceType dataType, ZonedDateTime ifModifiedDateTime);

List<SliceEntity> findAllByEtagAndKidAndIdAndLastUpdatedAfter(
String etag, String kid, String id, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdAndDataTypeAndLastUpdatedAfter(
String etag, String kid, String id, SliceType dataType, ZonedDateTime ifModifiedDateTime);


List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkIn(String etag, String kid, List<String> chunks);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndDataTypeAndChunkIn(
String etag, String kid, SliceType dataType, List<String> chunks);

List<SliceEntity> findAllByEtagAndKidAndIdAndChunkIn(String etag, String kid, String id, List<String> chunks);
List<SliceEntity> findAllByEtagAndKidAndIdAndDataTypeAndChunkIn(
String etag, String kid, String id, SliceType dataType, List<String> chunks);

List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkAndHashIn(
String etag, String kid, String cid, List<String> hashes);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkAndDataTypeAndHashIn(
String etag, String kid, String cid, SliceType dataType, List<String> hashes);

List<SliceEntity> findAllByEtagAndKidAndIdAndChunkAndHashIn(
String etag, String kid, String id, String cid, List<String> hashes);
List<SliceEntity> findAllByEtagAndKidAndIdAndChunkAndDataTypeAndHashIn(
String etag, String kid, String id, String cid, SliceType dataType, List<String> hashes);

Long countByEtagAndKidAndIdIsNull(String etag, String kid);
Long countByEtagAndKidAndIdIsNullAndDataType(String etag, String kid, SliceType dataType);

Long countByEtagAndKidAndId(String etag, String kid, String id);
Long countByEtagAndKidAndIdAndDataType(String etag, String kid, String id, SliceType dataType);

List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkInAndLastUpdatedAfter(
String etag, String kid, List<String> filter, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndDataTypeAndChunkInAndLastUpdatedAfter(
String etag, String kid, SliceType dataType, List<String> filter, ZonedDateTime ifModifiedDateTime);

List<SliceEntity> findAllByEtagAndKidAndIdAndChunkInAndLastUpdatedAfter(
String etag, String kid, String id, List<String> filter, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdAndDataTypeAndChunkInAndLastUpdatedAfter(
String etag, String kid, String id, SliceType dataType, List<String> filter, ZonedDateTime ifModifiedDateTime);

Long countByEtagAndKidAndIdIsNullAndChunkIn(String etag, String kid, List<String> filter);
Long countByEtagAndKidAndIdIsNullAndDataTypeAndChunkIn(
String etag, String kid, SliceType dataType, List<String> filter);

Long countByEtagAndKidAndIdAndChunkIn(String etag, String kid, String id, List<String> filter);
Long countByEtagAndKidAndIdAndDataTypeAndChunkIn(
String etag, String kid, String id, SliceType dataType, List<String> filter);

List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkAndLastUpdatedAfter(
String etag, String kid, String cid, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkAndDataTypeAndLastUpdatedAfter(
String etag, String kid, String cid, SliceType dataType, ZonedDateTime ifModifiedDateTime);

List<SliceEntity> findAllByEtagAndKidAndIdAndChunkAndLastUpdatedAfter(
String etag, String kid, String id, String cid, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdAndChunkAndDataTypeAndLastUpdatedAfter(
String etag, String kid, String id, String cid, SliceType dataType, ZonedDateTime ifModifiedDateTime);

Long countByEtagAndKidAndIdIsNullAndChunk(String etag, String kid, String cid);
Long countByEtagAndKidAndIdIsNullAndChunkAndDataType(String etag, String kid, String cid, SliceType dataType);

Long countByEtagAndKidAndIdAndChunk(String etag, String kid, String id, String cid);
Long countByEtagAndKidAndIdAndChunkAndDataType(String etag, String kid, String id, String cid, SliceType dataType);

List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkAndHashInAndLastUpdatedAfter(
String etag, String kid, String cid, List<String> filter, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdIsNullAndChunkAndDataTypeAndHashInAndLastUpdatedAfter(
String etag, String kid, String cid, SliceType dataType, List<String> filter, ZonedDateTime ifModifiedDateTime);

List<SliceEntity> findAllByEtagAndKidAndIdAndChunkAndHashInAndLastUpdatedAfter(
String etag, String kid, String id, String cid, List<String> filter, ZonedDateTime ifModifiedDateTime);
List<SliceEntity> findAllByEtagAndKidAndIdAndChunkAndDataTypeAndHashInAndLastUpdatedAfter(
String etag, String kid, String id, String cid, SliceType dataType,
List<String> filter, ZonedDateTime ifModifiedDateTime);

Long countByEtagAndKidAndIdIsNullAndChunkAndHashIn(String etag, String kid, String cid, List<String> filter);
Long countByEtagAndKidAndIdIsNullAndChunkAndDataTypeAndHashIn(
String etag, String kid, String cid, SliceType dataType, List<String> filter);

Long countByEtagAndKidAndIdAndChunkAndHashIn(String etag, String kid, String id, String cid, List<String> filter);
Long countByEtagAndKidAndIdAndChunkAndDataTypeAndHashIn(
String etag, String kid, String id, String cid, SliceType dataType, List<String> filter);

Optional<SliceEntity> findOneByEtagAndKidAndIdIsNullAndChunkAndHashAndLastUpdatedAfter(
String etag, String kid, String cid, String sid, ZonedDateTime ifModifiedDateTime);
Optional<SliceEntity> findOneByEtagAndKidAndIdIsNullAndChunkAndHashAndDataTypeAndLastUpdatedAfter(
String etag, String kid, String cid, String sid, SliceType dataType, ZonedDateTime ifModifiedDateTime);

Optional<SliceEntity> findOneByEtagAndKidAndIdAndChunkAndHashAndLastUpdatedAfter(
String etag, String kid, String id, String cid, String sid, ZonedDateTime ifModifiedDateTime);
Optional<SliceEntity> findOneByEtagAndKidAndIdAndChunkAndHashAndDataTypeAndLastUpdatedAfter(
String etag, String kid, String id, String cid, String sid,
SliceType dataType, ZonedDateTime ifModifiedDateTime);

Long countByEtagAndKidAndIdIsNullAndChunkAndHash(String etag, String kid, String cid, String sid);
Long countByEtagAndKidAndIdIsNullAndChunkAndHashAndDataType(
String etag, String kid, String cid, String sid, SliceType dataType);

Long countByEtagAndKidAndIdAndChunkAndHash(String etag, String kid, String id, String cid, String sid);
Long countByEtagAndKidAndIdAndChunkAndHashAndDataType(
String etag, String kid, String id, String cid, String sid, SliceType dataType);
}
Loading

0 comments on commit f6b101a

Please sign in to comment.