From d05c1d71f33c1d951d5a5196f6c206457431da9e Mon Sep 17 00:00:00 2001 From: kissand Date: Fri, 23 Sep 2022 13:49:05 +0200 Subject: Fix Id-searches endpoint performance degradation - create more flexible control over fetch descendants - add a new FETCH_DIRECT_CHILDREN_ONLY option to fetch descendants options - enabel create custom fetch descendants option Reviewer: Toine, Joe, Priyank Issue-ID: CPS-1216 Change-Id: I900b32e813367aa9566c1dec986b20f009d27203 Signed-off-by: kissand --- .../org/onap/cps/spi/FetchDescendantsOption.java | 48 ++++++++++++++++++++-- 1 file changed, 45 insertions(+), 3 deletions(-) (limited to 'cps-service/src/main') diff --git a/cps-service/src/main/java/org/onap/cps/spi/FetchDescendantsOption.java b/cps-service/src/main/java/org/onap/cps/spi/FetchDescendantsOption.java index 0c994d8d7..b80054ac3 100644 --- a/cps-service/src/main/java/org/onap/cps/spi/FetchDescendantsOption.java +++ b/cps-service/src/main/java/org/onap/cps/spi/FetchDescendantsOption.java @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021 Pantheon.tech + * Copyright (C) 2022 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,7 +20,48 @@ package org.onap.cps.spi; -public enum FetchDescendantsOption { - OMIT_DESCENDANTS, - INCLUDE_ALL_DESCENDANTS +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +public class FetchDescendantsOption { + + public static final FetchDescendantsOption FETCH_DIRECT_CHILDREN_ONLY = new FetchDescendantsOption(1); + public static final FetchDescendantsOption OMIT_DESCENDANTS = new FetchDescendantsOption(0); + public static final FetchDescendantsOption INCLUDE_ALL_DESCENDANTS = new FetchDescendantsOption(-1); + + private final int depth; + + /** + * Has next depth. + * + * @return true if next level of depth is available + * @throws IllegalArgumentException when depth less than -1 + */ + public boolean hasNext() { + validateDepth(depth); + return depth > 0 || this.depth == INCLUDE_ALL_DESCENDANTS.depth; + } + + /** + * Next fetch descendants option. + * + * @return the next fetch descendants option + * @throws IllegalArgumentException when depth less than -1 or 0 + */ + public FetchDescendantsOption next() { + if (depth == 0) { + throw new IllegalArgumentException("Do not use next() method with zero depth"); + } + final FetchDescendantsOption nextDescendantsOption = this.depth == INCLUDE_ALL_DESCENDANTS.depth + ? INCLUDE_ALL_DESCENDANTS : new FetchDescendantsOption(depth - 1); + validateDepth(nextDescendantsOption.depth); + return nextDescendantsOption; + } + + private static void validateDepth(final int depth) { + if (depth < -1) { + throw new IllegalArgumentException("A depth of less than minus one is not allowed"); + } + } + } -- cgit 1.2.3-korg