diff options
Diffstat (limited to 'cps-service/src/main')
-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"); + } + } + } |