summaryrefslogtreecommitdiffstats
path: root/cps-service/src/main/java/org
diff options
context:
space:
mode:
Diffstat (limited to 'cps-service/src/main/java/org')
-rwxr-xr-xcps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java6
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/CmHandleQueryServiceParameters.java41
-rw-r--r--cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java31
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/CmHandleQueryRestParametersValidator.java125
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/ValidQueryProperties.java36
-rw-r--r--cps-service/src/main/java/org/onap/cps/utils/YangUtils.java78
-rw-r--r--cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java8
7 files changed, 75 insertions, 250 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java
index 88ebe3bd0..b08d8c1eb 100755
--- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java
+++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java
@@ -226,11 +226,11 @@ public class CpsDataServiceImpl implements CpsDataService {
final SchemaContext schemaContext = getSchemaContext(dataspaceName, anchor.getSchemaSetName());
if (ROOT_NODE_XPATH.equals(parentNodeXpath)) {
- final NormalizedNode<?, ?> normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext);
+ final NormalizedNode normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext);
return new DataNodeBuilder().withNormalizedNodeTree(normalizedNode).build();
}
- final NormalizedNode<?, ?> normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath);
+ final NormalizedNode normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath);
return new DataNodeBuilder()
.withParentNodeXpath(parentNodeXpath)
.withNormalizedNodeTree(normalizedNode)
@@ -252,7 +252,7 @@ public class CpsDataServiceImpl implements CpsDataService {
final Anchor anchor = cpsAdminService.getAnchor(dataspaceName, anchorName);
final SchemaContext schemaContext = getSchemaContext(dataspaceName, anchor.getSchemaSetName());
- final NormalizedNode<?, ?> normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath);
+ final NormalizedNode normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath);
final Collection<DataNode> dataNodes = new DataNodeBuilder()
.withParentNodeXpath(parentNodeXpath)
.withNormalizedNodeTree(normalizedNode)
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/CmHandleQueryServiceParameters.java b/cps-service/src/main/java/org/onap/cps/spi/model/CmHandleQueryServiceParameters.java
deleted file mode 100644
index 8dcf88b0e..000000000
--- a/cps-service/src/main/java/org/onap/cps/spi/model/CmHandleQueryServiceParameters.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.spi.model;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonInclude.Include;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import java.util.Collections;
-import java.util.List;
-import javax.validation.Valid;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.Setter;
-
-@Setter
-@Getter
-@EqualsAndHashCode
-@JsonInclude(Include.NON_EMPTY)
-public class CmHandleQueryServiceParameters {
- @JsonProperty("cmHandleQueryParameters")
- @Valid
- private List<ConditionProperties> cmHandleQueryParameters = Collections.emptyList();
-}
diff --git a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
index f2bde03a0..eaa2d77f4 100644
--- a/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
+++ b/cps-service/src/main/java/org/onap/cps/spi/model/DataNodeBuilder.java
@@ -44,7 +44,7 @@ import org.opendaylight.yangtools.yang.data.api.schema.ValueNode;
@Slf4j
public class DataNodeBuilder {
- private NormalizedNode<?, ?> normalizedNodeTree;
+ private NormalizedNode normalizedNodeTree;
private String xpath;
private String moduleNamePrefix;
private String parentNodeXpath = "";
@@ -69,7 +69,7 @@ public class DataNodeBuilder {
* @param normalizedNodeTree used for creating the Data Node
* @return this {@link DataNodeBuilder} object
*/
- public DataNodeBuilder withNormalizedNodeTree(final NormalizedNode<?, ?> normalizedNodeTree) {
+ public DataNodeBuilder withNormalizedNodeTree(final NormalizedNode normalizedNodeTree) {
this.normalizedNodeTree = normalizedNodeTree;
return this;
}
@@ -171,15 +171,16 @@ public class DataNodeBuilder {
}
private static void addDataNodeFromNormalizedNode(final DataNode currentDataNode,
- final NormalizedNode<?, ?> normalizedNode) {
+ final NormalizedNode normalizedNode) {
if (normalizedNode instanceof DataContainerNode) {
- addYangContainer(currentDataNode, (DataContainerNode<?>) normalizedNode);
+ addYangContainer(currentDataNode, (DataContainerNode) normalizedNode);
} else if (normalizedNode instanceof MapNode) {
addDataNodeForEachListElement(currentDataNode, (MapNode) normalizedNode);
} else if (normalizedNode instanceof ValueNode) {
- final ValueNode<?, ?> valuesNode = (ValueNode<?, ?>) normalizedNode;
- addYangLeaf(currentDataNode, valuesNode.getNodeType().getLocalName(), valuesNode.getValue());
+ final ValueNode<NormalizedNode> valuesNode = (ValueNode) normalizedNode;
+ addYangLeaf(currentDataNode, valuesNode.getIdentifier().getNodeType().getLocalName(),
+ valuesNode.body());
} else if (normalizedNode instanceof LeafSetNode) {
addYangLeafList(currentDataNode, (LeafSetNode<?>) normalizedNode);
} else {
@@ -187,13 +188,13 @@ public class DataNodeBuilder {
}
}
- private static void addYangContainer(final DataNode currentDataNode, final DataContainerNode<?> dataContainerNode) {
+ private static void addYangContainer(final DataNode currentDataNode, final DataContainerNode dataContainerNode) {
final DataNode dataContainerDataNode =
(dataContainerNode.getIdentifier() instanceof YangInstanceIdentifier.AugmentationIdentifier)
? currentDataNode
: createAndAddChildDataNode(currentDataNode, YangUtils.buildXpath(dataContainerNode.getIdentifier()));
- final Collection<DataContainerChild<?, ?>> normalizedChildNodes = dataContainerNode.getValue();
- for (final NormalizedNode<?, ?> normalizedNode : normalizedChildNodes) {
+ final Collection<DataContainerChild> normalizedChildNodes = dataContainerNode.body();
+ for (final NormalizedNode normalizedNode : normalizedChildNodes) {
addDataNodeFromNormalizedNode(dataContainerDataNode, normalizedNode);
}
}
@@ -207,16 +208,16 @@ public class DataNodeBuilder {
}
private static void addYangLeafList(final DataNode currentDataNode, final LeafSetNode<?> leafSetNode) {
- final String leafListName = leafSetNode.getNodeType().getLocalName();
- final List<?> leafListValues = ((Collection<? extends NormalizedNode<?, ?>>) leafSetNode.getValue())
- .stream()
- .map(normalizedNode -> ((ValueNode<?, ?>) normalizedNode).getValue())
- .collect(Collectors.toUnmodifiableList());
+ final String leafListName = leafSetNode.getIdentifier().getNodeType().getLocalName();
+ final List<?> leafListValues = ((Collection<? extends NormalizedNode>) leafSetNode.body())
+ .stream()
+ .map(normalizedNode -> (normalizedNode).body())
+ .collect(Collectors.toUnmodifiableList());
addYangLeaf(currentDataNode, leafListName, leafListValues);
}
private static void addDataNodeForEachListElement(final DataNode currentDataNode, final MapNode mapNode) {
- final Collection<MapEntryNode> mapEntryNodes = mapNode.getValue();
+ final Collection<MapEntryNode> mapEntryNodes = mapNode.body();
for (final MapEntryNode mapEntryNode : mapEntryNodes) {
addDataNodeFromNormalizedNode(currentDataNode, mapEntryNode);
}
diff --git a/cps-service/src/main/java/org/onap/cps/utils/CmHandleQueryRestParametersValidator.java b/cps-service/src/main/java/org/onap/cps/utils/CmHandleQueryRestParametersValidator.java
deleted file mode 100644
index 4d0eb7d41..000000000
--- a/cps-service/src/main/java/org/onap/cps/utils/CmHandleQueryRestParametersValidator.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.utils;
-
-import com.google.common.base.Strings;
-import java.util.Arrays;
-import java.util.Map;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.onap.cps.spi.exceptions.DataValidationException;
-import org.onap.cps.spi.model.CmHandleQueryServiceParameters;
-
-@Slf4j
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class CmHandleQueryRestParametersValidator {
-
- /**
- * Validate cm handle query parameters.
- * @param cmHandleQueryServiceParameters name of data to be validated
- */
- public static void validateCmHandleQueryParameters(
- final CmHandleQueryServiceParameters cmHandleQueryServiceParameters) {
- cmHandleQueryServiceParameters.getCmHandleQueryParameters().forEach(
- conditionApiProperty -> {
- if (Strings.isNullOrEmpty(conditionApiProperty.getConditionName())) {
- throw createDataValidationException("Missing 'conditionName' - please supply a valid name.");
- }
- if (Arrays.stream(ValidQueryProperties.values()).noneMatch(validQueryProperty ->
- validQueryProperty.getQueryProperty().equals(conditionApiProperty.getConditionName()))) {
- throw createDataValidationException(
- String.format("Wrong 'conditionName': %s - please supply a valid name.",
- conditionApiProperty.getConditionName()));
- }
- if (conditionApiProperty.getConditionParameters().isEmpty()) {
- throw createDataValidationException(
- "Empty 'conditionsParameters' - please supply a valid condition parameter.");
- }
- conditionApiProperty.getConditionParameters().forEach(
- CmHandleQueryRestParametersValidator::validateConditionParameter
- );
- }
- );
- }
-
- private static void validateConditionParameter(final Map<String, String> conditionParameter) {
- if (conditionParameter.isEmpty()) {
- throw createDataValidationException(
- "Empty 'conditionsParameter' - please supply a valid condition parameter.");
- }
- if (conditionParameter.size() > 1) {
- throw createDataValidationException("Too many name in one 'conditionsParameter' -"
- + " please supply one name in one condition parameter.");
- }
- conditionParameter.forEach((key, value) -> {
- if (Strings.isNullOrEmpty(key)) {
- throw createDataValidationException(
- "Missing 'conditionsParameterName' - please supply a valid name.");
- }
- });
- }
-
- /**
- * Validate module name condition properties.
- * @param conditionProperty name of data to be validated
- */
- public static void validateModuleNameConditionProperties(final Map<String, String> conditionProperty) {
- if (conditionProperty.containsKey("moduleName") && !conditionProperty.get("moduleName").isEmpty()) {
- return;
- }
- throw createDataValidationException("Wrong module condition property. - "
- + "please supply a valid condition property.");
- }
-
- /**
- * Validate CPS path condition properties.
- * @param conditionProperty name of data to be validated
- */
- public static boolean validateCpsPathConditionProperties(final Map<String, String> conditionProperty) {
- if (conditionProperty.isEmpty()) {
- return true;
- }
- if (conditionProperty.size() > 1) {
- throw createDataValidationException("Only one condition property is allowed for the CPS path query.");
- }
- if (!conditionProperty.containsKey("cpsPath")) {
- throw createDataValidationException(
- "Wrong CPS path condition property. - expecting \"cpsPath\" as the condition property.");
- }
- final String cpsPath = conditionProperty.get("cpsPath");
- if (cpsPath.isBlank()) {
- throw createDataValidationException(
- "Wrong CPS path. - please supply a valid CPS path.");
- }
- if (cpsPath.contains("/additional-properties")) {
- log.debug("{} - Private metadata cannot be queried. Nothing to be returned",
- cpsPath);
- return false;
- }
- return true;
- }
-
- private static DataValidationException createDataValidationException(final String details) {
- return new DataValidationException("Invalid Query Parameter.", details);
- }
-
-}
diff --git a/cps-service/src/main/java/org/onap/cps/utils/ValidQueryProperties.java b/cps-service/src/main/java/org/onap/cps/utils/ValidQueryProperties.java
deleted file mode 100644
index 1d7ccb91d..000000000
--- a/cps-service/src/main/java/org/onap/cps/utils/ValidQueryProperties.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * ============LICENSE_START=======================================================
- * 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.utils;
-
-import lombok.Getter;
-
-@Getter
-public enum ValidQueryProperties {
- HAS_ALL_PROPERTIES("hasAllProperties"),
- HAS_ALL_MODULES("hasAllModules"),
- WITH_CPS_PATH("cmHandleWithCpsPath");
-
- private final String queryProperty;
-
- ValidQueryProperties(final String queryProperty) {
- this.queryProperty = queryProperty;
- }
-}
diff --git a/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java b/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java
index 8fcdc4ebd..48241ed39 100644
--- a/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java
+++ b/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java
@@ -26,6 +26,7 @@ import com.google.gson.JsonSyntaxException;
import com.google.gson.stream.JsonReader;
import java.io.IOException;
import java.io.StringReader;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -36,8 +37,11 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.onap.cps.spi.exceptions.DataValidationException;
+import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
+import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
+import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory;
import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
@@ -45,7 +49,10 @@ import org.opendaylight.yangtools.yang.data.impl.schema.NormalizedNodeResult;
import org.opendaylight.yangtools.yang.model.api.DataNodeContainer;
import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
+import org.opendaylight.yangtools.yang.model.api.EffectiveStatementInference;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier;
+import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack;
@Slf4j
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@@ -61,8 +68,7 @@ public class YangUtils {
* @param schemaContext schema context describing associated data model
* @return the NormalizedNode object
*/
- @SuppressWarnings("squid:S1452") // Generic type <? ,?> is returned by external librray, opendaylight.yangtools
- public static NormalizedNode<?, ?> parseJsonData(final String jsonData, final SchemaContext schemaContext) {
+ public static NormalizedNode parseJsonData(final String jsonData, final SchemaContext schemaContext) {
return parseJsonData(jsonData, schemaContext, Optional.empty());
}
@@ -74,32 +80,41 @@ public class YangUtils {
* @param parentNodeXpath the xpath referencing the parent node current data fragment belong to
* @return the NormalizedNode object
*/
- @SuppressWarnings("squid:S1452") // Generic type <? ,?> is returned by external librray, opendaylight.yangtools
- public static NormalizedNode<?, ?> parseJsonData(final String jsonData, final SchemaContext schemaContext,
+ public static NormalizedNode parseJsonData(final String jsonData, final SchemaContext schemaContext,
final String parentNodeXpath) {
- final var parentSchemaNode = getDataSchemaNodeByXpath(parentNodeXpath, schemaContext);
- return parseJsonData(jsonData, schemaContext, Optional.of(parentSchemaNode));
+ final Collection<QName> dataSchemaNodeIdentifiers =
+ getDataSchemaNodeIdentifiersByXpath(parentNodeXpath, schemaContext);
+ return parseJsonData(jsonData, schemaContext, Optional.of(dataSchemaNodeIdentifiers));
}
- private static NormalizedNode<?, ?> parseJsonData(final String jsonData, final SchemaContext schemaContext,
- final Optional<DataSchemaNode> optionalParentSchemaNode) {
- final var jsonCodecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02
+ private static NormalizedNode parseJsonData(final String jsonData, final SchemaContext schemaContext,
+ final Optional<Collection<QName>> dataSchemaNodeIdentifiers) {
+ final JSONCodecFactory jsonCodecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02
.getShared((EffectiveModelContext) schemaContext);
- final var normalizedNodeResult = new NormalizedNodeResult();
- final var normalizedNodeStreamWriter = ImmutableNormalizedNodeStreamWriter
+ final NormalizedNodeResult normalizedNodeResult = new NormalizedNodeResult();
+ final NormalizedNodeStreamWriter normalizedNodeStreamWriter = ImmutableNormalizedNodeStreamWriter
.from(normalizedNodeResult);
+ final JsonReader jsonReader = new JsonReader(new StringReader(jsonData));
+ final JsonParserStream jsonParserStream;
+
+ if (dataSchemaNodeIdentifiers.isPresent()) {
+ final EffectiveModelContext effectiveModelContext = ((EffectiveModelContext) schemaContext);
+ final EffectiveStatementInference effectiveStatementInference =
+ SchemaInferenceStack.of(effectiveModelContext,
+ SchemaNodeIdentifier.Absolute.of(dataSchemaNodeIdentifiers.get())).toInference();
+ jsonParserStream =
+ JsonParserStream.create(normalizedNodeStreamWriter, jsonCodecFactory, effectiveStatementInference);
+ } else {
+ jsonParserStream = JsonParserStream.create(normalizedNodeStreamWriter, jsonCodecFactory);
+ }
- try (final JsonParserStream jsonParserStream = optionalParentSchemaNode.isPresent()
- ? JsonParserStream.create(normalizedNodeStreamWriter, jsonCodecFactory, optionalParentSchemaNode.get())
- : JsonParserStream.create(normalizedNodeStreamWriter, jsonCodecFactory)
- ) {
- final var jsonReader = new JsonReader(new StringReader(jsonData));
+ try {
jsonParserStream.parse(jsonReader);
-
- } catch (final IOException | JsonSyntaxException exception) {
+ jsonParserStream.close();
+ } catch (final JsonSyntaxException exception) {
throw new DataValidationException(
"Failed to parse json data: " + jsonData, exception.getMessage(), exception);
- } catch (final IllegalStateException illegalStateException) {
+ } catch (final IOException | IllegalStateException illegalStateException) {
throw new DataValidationException(
"Failed to parse json data. Unsupported xpath or json data:" + jsonData, illegalStateException
.getMessage(), illegalStateException);
@@ -114,7 +129,7 @@ public class YangUtils {
* @return an xpath
*/
public static String buildXpath(final YangInstanceIdentifier.PathArgument nodeIdentifier) {
- final var xpathBuilder = new StringBuilder();
+ final StringBuilder xpathBuilder = new StringBuilder();
xpathBuilder.append("/").append(nodeIdentifier.getNodeType().getLocalName());
if (nodeIdentifier instanceof YangInstanceIdentifier.NodeIdentifierWithPredicates) {
@@ -143,10 +158,11 @@ public class YangUtils {
}
}
- private static DataSchemaNode getDataSchemaNodeByXpath(final String parentNodeXpath,
- final SchemaContext schemaContext) {
+ private static Collection<QName> getDataSchemaNodeIdentifiersByXpath(final String parentNodeXpath,
+ final SchemaContext schemaContext) {
final String[] xpathNodeIdSequence = xpathToNodeIdSequence(parentNodeXpath);
- return findDataSchemaNodeByXpathNodeIdSequence(xpathNodeIdSequence, schemaContext.getChildNodes());
+ return findDataSchemaNodeIdentifiersByXpathNodeIdSequence(xpathNodeIdSequence, schemaContext.getChildNodes(),
+ new ArrayList<>());
}
private static String[] xpathToNodeIdSequence(final String xpath) {
@@ -161,25 +177,29 @@ public class YangUtils {
return xpathNodeIdSequence;
}
- private static DataSchemaNode findDataSchemaNodeByXpathNodeIdSequence(final String[] xpathNodeIdSequence,
- final Collection<? extends DataSchemaNode> dataSchemaNodes) {
+ private static Collection<QName> findDataSchemaNodeIdentifiersByXpathNodeIdSequence(
+ final String[] xpathNodeIdSequence,
+ final Collection<? extends DataSchemaNode> dataSchemaNodes,
+ final Collection<QName> dataSchemaNodeIdentifiers) {
final String currentXpathNodeId = xpathNodeIdSequence[0];
final DataSchemaNode currentDataSchemaNode = dataSchemaNodes.stream()
.filter(dataSchemaNode -> currentXpathNodeId.equals(dataSchemaNode.getQName().getLocalName()))
.findFirst().orElseThrow(() -> schemaNodeNotFoundException(currentXpathNodeId));
+ dataSchemaNodeIdentifiers.add(currentDataSchemaNode.getQName());
if (xpathNodeIdSequence.length <= 1) {
- return currentDataSchemaNode;
+ return dataSchemaNodeIdentifiers;
}
if (currentDataSchemaNode instanceof DataNodeContainer) {
- return findDataSchemaNodeByXpathNodeIdSequence(
+ return findDataSchemaNodeIdentifiersByXpathNodeIdSequence(
getNextLevelXpathNodeIdSequence(xpathNodeIdSequence),
- ((DataNodeContainer) currentDataSchemaNode).getChildNodes());
+ ((DataNodeContainer) currentDataSchemaNode).getChildNodes(),
+ dataSchemaNodeIdentifiers);
}
throw schemaNodeNotFoundException(xpathNodeIdSequence[1]);
}
private static String[] getNextLevelXpathNodeIdSequence(final String[] xpathNodeIdSequence) {
- final var nextXpathNodeIdSequence = new String[xpathNodeIdSequence.length - 1];
+ final String[] nextXpathNodeIdSequence = new String[xpathNodeIdSequence.length - 1];
System.arraycopy(xpathNodeIdSequence, 1, nextXpathNodeIdSequence, 0, nextXpathNodeIdSequence.length);
return nextXpathNodeIdSequence;
}
diff --git a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java
index fd534971a..e0f24f315 100644
--- a/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java
+++ b/cps-service/src/main/java/org/onap/cps/yang/YangTextSchemaSourceSetBuilder.java
@@ -32,6 +32,7 @@ import java.nio.charset.StandardCharsets;
import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import lombok.NoArgsConstructor;
@@ -41,9 +42,9 @@ import org.onap.cps.spi.model.ModuleReference;
import org.opendaylight.yangtools.yang.common.Revision;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
import org.opendaylight.yangtools.yang.model.repo.api.RevisionSourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
+import org.opendaylight.yangtools.yang.parser.api.YangSyntaxErrorException;
import org.opendaylight.yangtools.yang.parser.rfc7950.reactor.RFC7950Reactors;
import org.opendaylight.yangtools.yang.parser.rfc7950.repo.YangStatementStreamSource;
import org.opendaylight.yangtools.yang.parser.spi.meta.ReactorException;
@@ -155,6 +156,11 @@ public final class YangTextSchemaSourceSetBuilder {
return new YangTextSchemaSource(revisionSourceIdentifier) {
@Override
+ public Optional<String> getSymbolicName() {
+ return Optional.empty();
+ }
+
+ @Override
protected MoreObjects.ToStringHelper addToStringAttributes(
final MoreObjects.ToStringHelper toStringHelper) {
return toStringHelper;