diff options
author | kissand <andras.zoltan.kiss@est.tech> | 2022-09-23 13:49:05 +0200 |
---|---|---|
committer | Andras Zoltan Kiss <andras.zoltan.kiss@est.tech> | 2022-10-12 12:32:42 +0000 |
commit | d05c1d71f33c1d951d5a5196f6c206457431da9e (patch) | |
tree | 175b3ae4682d256dd971f046fcfd1169e5891a45 /cps-service/src/main/java/org | |
parent | c9ec915d7d16b88f53493c85928d463d070df472 (diff) |
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 <andras.zoltan.kiss@est.tech>
Diffstat (limited to 'cps-service/src/main/java/org')
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/spi/FetchDescendantsOption.java | 48 |
1 files changed, 45 insertions, 3 deletions
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 0c994d8d7b..b80054ac3b 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"); + } + } + } |