* @param cmHandleId cm handle id
* @param dataSyncEnabledTargetValue data sync enabled flag
*/
- public void setDataSyncEnabled(final String cmHandleId, final Boolean dataSyncEnabledTargetValue) {
+ public void setDataSyncEnabled(final String cmHandleId, final boolean dataSyncEnabledTargetValue) {
final CompositeState compositeState = inventoryPersistence.getCmHandleState(cmHandleId);
- if (dataSyncEnabledTargetValue.equals(compositeState.getDataSyncEnabled())) {
+ if (dataSyncEnabledTargetValue == compositeState.getDataSyncEnabled()) {
log.info("Data-Sync Enabled flag is already: {} ", dataSyncEnabledTargetValue);
return;
}
*/
public void addAlternateIdsToCache(final Collection<YangModelCmHandle> yangModelCmHandles) {
final Map<String, String> cmHandleIdPerAlternateIdToRegister = new HashMap<>(yangModelCmHandles.size());
- for (final YangModelCmHandle yangModelCmHandle: yangModelCmHandles) {
+ for (final YangModelCmHandle yangModelCmHandle : yangModelCmHandles) {
final String cmHandleId = yangModelCmHandle.getId();
final String alternateId = yangModelCmHandle.getAlternateId();
if (StringUtils.isNotBlank(alternateId)) {
private void processTrustLevels(final Collection<NcmpServiceCmHandle> cmHandlesToBeCreated,
final Collection<String> succeededCmHandleIds) {
final Map<String, TrustLevel> initialTrustLevelPerCmHandleId = new HashMap<>(cmHandlesToBeCreated.size());
- for (final NcmpServiceCmHandle ncmpServiceCmHandle: cmHandlesToBeCreated) {
+ for (final NcmpServiceCmHandle ncmpServiceCmHandle : cmHandlesToBeCreated) {
if (succeededCmHandleIds.contains(ncmpServiceCmHandle.getCmHandleId())) {
initialTrustLevelPerCmHandleId.put(ncmpServiceCmHandle.getCmHandleId(),
ncmpServiceCmHandle.getRegistrationTrustLevel());
final List<YangModelCmHandle> yangModelCmHandlesToRegister = new ArrayList<>(cmHandlesToBeCreated.size());
final List<CmHandleRegistrationResponse> cmHandleRegistrationResponses =
new ArrayList<>(cmHandlesToBeCreated.size());
- for (final NcmpServiceCmHandle ncmpServiceCmHandle: cmHandlesToBeCreated) {
+ for (final NcmpServiceCmHandle ncmpServiceCmHandle : cmHandlesToBeCreated) {
if (!rejectedCmHandleIds.contains(ncmpServiceCmHandle.getCmHandleId())) {
yangModelCmHandlesToRegister.add(getYangModelCmHandle(dmiPluginRegistration, ncmpServiceCmHandle));
cmHandleRegistrationResponses.add(
}
void removeAlternateIdsFromCache(final Collection<YangModelCmHandle> yangModelCmHandles) {
- for (final YangModelCmHandle yangModelCmHandle: yangModelCmHandles) {
+ for (final YangModelCmHandle yangModelCmHandle : yangModelCmHandles) {
final String cmHandleId = yangModelCmHandle.getId();
final String alternateId = yangModelCmHandle.getAlternateId();
if (StringUtils.isNotBlank(alternateId)) {
private static final String NO_MODULE_REVISION = null;
private static final Pattern CHECKSUM_EXCEPTION_PATTERN = Pattern.compile(".*\\(checksum\\)=\\((\\w+)\\).*");
private static final Pattern RFC6020_RECOMMENDED_FILENAME_PATTERN = Pattern
- .compile("([\\w-]+)@(\\d{4}-\\d{2}-\\d{2})(?:\\.yang)?", Pattern.CASE_INSENSITIVE);
+ .compile("([\\w-]+)@(\\d{4}-\\d{2}-\\d{2})(?:\\.yang)?", Pattern.CASE_INSENSITIVE);
private final YangResourceRepository yangResourceRepository;
public Collection<ModuleReference> getYangResourceModuleReferences(final String dataspaceName,
final String anchorName) {
final Set<YangResourceModuleReference> yangResourceModuleReferenceList =
- yangResourceRepository
- .findAllModuleReferencesByDataspaceAndAnchor(dataspaceName, anchorName);
+ yangResourceRepository
+ .findAllModuleReferencesByDataspaceAndAnchor(dataspaceName, anchorName);
return yangResourceModuleReferenceList.stream().map(CpsModulePersistenceServiceImpl::toModuleReference)
- .collect(Collectors.toList());
+ .collect(Collectors.toList());
}
@Override
public Collection<ModuleDefinition> getYangResourceDefinitions(final String dataspaceName,
final String anchorName) {
final Set<YangResourceEntity> yangResourceEntities =
- yangResourceRepository.findAllModuleDefinitionsByDataspaceAndAnchorAndModule(dataspaceName, anchorName,
- NO_MODULE_NAME_FILTER, NO_MODULE_REVISION);
+ yangResourceRepository.findAllModuleDefinitionsByDataspaceAndAnchorAndModule(dataspaceName, anchorName,
+ NO_MODULE_NAME_FILTER, NO_MODULE_REVISION);
return convertYangResourceEntityToModuleDefinition(yangResourceEntities);
}
private List<ModuleDefinition> convertYangResourceEntityToModuleDefinition(final Set<YangResourceEntity>
yangResourceEntities) {
final List<ModuleDefinition> resultModuleDefinitions = new ArrayList<>(yangResourceEntities.size());
- for (final YangResourceEntity yangResourceEntity: yangResourceEntities) {
+ for (final YangResourceEntity yangResourceEntity : yangResourceEntities) {
resultModuleDefinitions.add(toModuleDefinition(yangResourceEntity));
}
return resultModuleDefinitions;
final DataspaceEntity dataspaceEntity = dataspaceRepository.getByName(dataspaceName);
final List<SchemaSetEntity> schemaSetEntities = schemaSetRepository.findByDataspace(dataspaceEntity);
return schemaSetEntities.stream()
- .map(CpsModulePersistenceServiceImpl::toSchemaSet).collect(Collectors.toList());
+ .map(CpsModulePersistenceServiceImpl::toSchemaSet).collect(Collectors.toList());
}
@Override
// return ALL yang resourceEntities
return ImmutableSet.<YangResourceEntity>builder()
- .addAll(existingYangResourceEntities)
- .addAll(newYangResourceEntities)
- .build();
+ .addAll(existingYangResourceEntities)
+ .addAll(newYangResourceEntities)
+ .build();
}
private static Map<String, YangResourceEntity> getYangResourceEntityPerChecksum(
final Map<String, String> yangResourceContentPerName) {
- return yangResourceContentPerName.entrySet().stream().map(entry -> {
- final String checksum = DigestUtils.sha256Hex(entry.getValue().getBytes(StandardCharsets.UTF_8));
- final Map<String, String> moduleNameAndRevisionMap = createModuleNameAndRevisionMap(entry.getKey(),
- entry.getValue());
- final YangResourceEntity yangResourceEntity = new YangResourceEntity();
- yangResourceEntity.setContent(entry.getValue());
- final String moduleName = moduleNameAndRevisionMap.get("moduleName");
- final String revision = moduleNameAndRevisionMap.get("revision");
- yangResourceEntity.setModuleName(moduleName);
- yangResourceEntity.setRevision(revision);
- yangResourceEntity.setFileName(moduleName + "@" + revision + RFC6020_YANG_FILE_EXTENSION);
- yangResourceEntity.setChecksum(checksum);
- return yangResourceEntity;
- })
- .collect(Collectors.toMap(
- YangResourceEntity::getChecksum,
- entity -> entity
- ));
+ return yangResourceContentPerName.entrySet().stream().map(CpsModulePersistenceServiceImpl::toYangResourceEntity)
+ .collect(Collectors.toMap(YangResourceEntity::getChecksum, entity -> entity));
+ }
+
+ private static YangResourceEntity toYangResourceEntity(final Map.Entry<String, String> entry) {
+ final String yangResourceContent = entry.getValue();
+ final String checksum = DigestUtils.sha256Hex(yangResourceContent.getBytes(StandardCharsets.UTF_8));
+ final Map<String, String> moduleNameAndRevisionMap
+ = createModuleNameAndRevisionMap(entry.getKey(), yangResourceContent);
+ final YangResourceEntity yangResourceEntity = new YangResourceEntity();
+ yangResourceEntity.setContent(yangResourceContent);
+ final String moduleName = moduleNameAndRevisionMap.get("moduleName");
+ final String revision = moduleNameAndRevisionMap.get("revision");
+ yangResourceEntity.setModuleName(moduleName);
+ yangResourceEntity.setRevision(revision);
+ yangResourceEntity.setFileName(moduleName + "@" + revision + RFC6020_YANG_FILE_EXTENSION);
+ yangResourceEntity.setChecksum(checksum);
+ return yangResourceEntity;
}
private void createAndSaveSchemaSetEntity(final String dataspaceName,
@Override
protected MoreObjects.ToStringHelper addToStringAttributes(
- final MoreObjects.ToStringHelper toStringHelper) {
+ final MoreObjects.ToStringHelper toStringHelper) {
return toStringHelper;
}
metaDataMap.put("revision", yangModelDependencyInfo.getFormattedRevision());
} catch (final YangSyntaxErrorException | IOException e) {
throw new ModelValidationException("Yang resource is invalid.",
- String.format("Yang syntax validation failed for resource %s:%n%s", sourceName, e.getMessage()), e);
+ String.format("Yang syntax validation failed for resource %s:%n%s", sourceName, e.getMessage()), e);
}
return metaDataMap;
}
* Convert the specified data integrity violation exception into a CPS duplicated Yang resource exception
* if the cause of the error is a yang checksum database constraint violation.
*
- * @param originalException the original db exception.
+ * @param originalException the original db exception.
* @param yangResourceEntities the collection of Yang resources involved in the db failure.
* @return an optional converted CPS duplicated Yang resource exception. The optional is empty if the original
* cause of the error is not a yang checksum database constraint violation.
*/
private Optional<DuplicatedYangResourceException> convertToDuplicatedYangResourceException(
- final DataIntegrityViolationException originalException,
- final Collection<YangResourceEntity> yangResourceEntities) {
+ final DataIntegrityViolationException originalException,
+ final Collection<YangResourceEntity> yangResourceEntities) {
// The exception result
DuplicatedYangResourceException duplicatedYangResourceException = null;
final Throwable cause = originalException.getCause();
- if (cause instanceof final ConstraintViolationException constraintException) {
- if (YANG_RESOURCE_CHECKSUM_CONSTRAINT_NAME.equals(constraintException.getConstraintName())) {
- // Db constraint related to yang resource checksum uniqueness is not respected
- final String checksumInError = getDuplicatedChecksumFromException(constraintException);
- final String nameInError = getNameForChecksum(checksumInError, yangResourceEntities);
- duplicatedYangResourceException =
- new DuplicatedYangResourceException(nameInError, checksumInError, constraintException);
- }
+ if (cause instanceof final ConstraintViolationException constraintException
+ && YANG_RESOURCE_CHECKSUM_CONSTRAINT_NAME.equals(constraintException.getConstraintName())) {
+ // Db constraint related to yang resource checksum uniqueness is not respected
+ final String checksumInError = getDuplicatedChecksumFromException(constraintException);
+ final String nameInError = getNameForChecksum(checksumInError, yangResourceEntities);
+ duplicatedYangResourceException =
+ new DuplicatedYangResourceException(nameInError, checksumInError, constraintException);
}
return Optional.ofNullable(duplicatedYangResourceException);
private String getNameForChecksum(final String checksum,
final Collection<YangResourceEntity> yangResourceEntities) {
final Optional<String> optionalFileName = yangResourceEntities.stream()
- .filter(entity -> Strings.CS.equals(checksum, (entity.getChecksum())))
- .findFirst()
- .map(YangResourceEntity::getFileName);
+ .filter(entity -> Strings.CS.equals(checksum, (entity.getChecksum())))
+ .findFirst()
+ .map(YangResourceEntity::getFileName);
return optionalFileName.orElse("no filename");
}
private static ModuleDefinition toModuleDefinition(final YangResourceEntity yangResourceEntity) {
return new ModuleDefinition(
- yangResourceEntity.getModuleName(),
- yangResourceEntity.getRevision(),
- yangResourceEntity.getContent());
+ yangResourceEntity.getModuleName(),
+ yangResourceEntity.getRevision(),
+ yangResourceEntity.getContent());
}
private static SchemaSet toSchemaSet(final SchemaSetEntity schemaSetEntity) {
return SchemaSet.builder().name(schemaSetEntity.getName())
- .dataspaceName(schemaSetEntity.getDataspace().getName()).build();
+ .dataspaceName(schemaSetEntity.getDataspace().getName()).build();
}
}
final String topLevelContainerName = cpsPathQuery.getContainerNames().get(0);
final YangTextSchemaSourceSet yangTextSchemaSourceSet =
yangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName);
- final SchemaContext schemaContext = yangTextSchemaSourceSet.getSchemaContext();
+ final SchemaContext schemaContext = yangTextSchemaSourceSet.schemaContext();
return schemaContext.getChildNodes().stream()
.filter(DataNodeContainer.class::isInstance)
private SchemaContext getSchemaContext(final Anchor anchor) {
return yangTextSchemaSourceSetCache.get(anchor.getDataspaceName(), anchor.getSchemaSetName())
- .getSchemaContext();
+ .schemaContext();
}
private SchemaContext getSchemaContext(final Map<String, String> yangResourceContentPerName) {
return timedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName)
- .getSchemaContext();
+ .schemaContext();
}
private void invalidateCache(final Anchor anchor) {
* Return SchemaContext for given YangSchema.
* @return SchemaContext
*/
- SchemaContext getSchemaContext();
+ SchemaContext schemaContext();
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020 Pantheon.tech
- * Modifications Copyright (C) 2022-2023 Nordix Foundation.
+ * Modifications Copyright (C) 2022-2025 OpenInfra Foundation Europe.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
private final ImmutableMap.Builder<String, String> yangModelMap = new ImmutableMap.Builder<>();
private static final YangParserFactory YANG_PARSER_FACTORY =
- new DefaultYangParserFactory(new DefaultXPathParserFactory());
+ new DefaultYangParserFactory(new DefaultXPathParserFactory());
/**
* Add Yang resource context.
generateSchemaContext(yangResourceNameToContent);
}
- private static class YangTextSchemaSourceSetImpl implements YangTextSchemaSourceSet {
-
- private final SchemaContext schemaContext;
-
- private YangTextSchemaSourceSetImpl(final SchemaContext schemaContext) {
- this.schemaContext = schemaContext;
- }
+ private record YangTextSchemaSourceSetImpl(SchemaContext schemaContext) implements YangTextSchemaSourceSet {
@Override
public List<ModuleReference> getModuleReferences() {
.revision(module.getRevision().map(Revision::toString).orElse(null))
.build();
}
-
- @Override
- public SchemaContext getSchemaContext() {
- return schemaContext;
- }
}
/**
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >> mockYangTextSchemaSourceSet
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(yangResources)
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
}
}
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >> mockYangTextSchemaSourceSet
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(yangResources)
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
}
def setupSchemaSetMocksForDelta(yangResourceContentPerName) {
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourceContentPerName) >> mockYangTextSchemaSourceSet
mockYangTextSchemaSourceSetCache.get(_, _) >> mockYangTextSchemaSourceSet
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).schemaContext()
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
}
}
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >> mockYangTextSchemaSourceSet
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(yangResources)
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
}
}
def 'Converting ContainerNode (tree) to a DataNode (tree).'() {
given: 'the schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) schemaContext()
and: 'the json data parsed into container node object'
def jsonData = TestUtils.getResourceFileContent('test-tree.json')
def containerNode = yangParserHelper.parseData(ContentType.JSON, jsonData, schemaContext, '', validateAndParse)
def 'Converting ContainerNode (tree) to a DataNode (tree) for known parent node.'() {
given: 'a schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) schemaContext()
and: 'the json data parsed into container node object'
def jsonData = '{ "branch": [{ "name": "Branch", "nest": { "name": "Nest", "birds": ["bird"] } }] }'
def containerNode = yangParserHelper.parseData(ContentType.JSON, jsonData, schemaContext, '/test-tree', validateAndParse)
def 'Converting ContainerNode (tree) to a DataNode (tree) -- augmentation case.'() {
given: 'a schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(networkTopologyModelRfc8345)
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) schemaContext()
and: 'the json data parsed into container node object'
def jsonData = TestUtils.getResourceFileContent('ietf/data/ietf-network-topology-sample-rfc8345.json')
def containerNode = yangParserHelper.parseData(ContentType.JSON, jsonData, schemaContext, '', validateAndParse)
def 'Converting ContainerNode (tree) to a DataNode (tree) for known parent node -- augmentation case.'() {
given: 'a schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(networkTopologyModelRfc8345)
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) schemaContext()
and: 'parent node xpath referencing augmentation node within a model'
def parentNodeXpath = "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-2-1,D2,2-1-1']"
and: 'the json data fragment parsed into container node object for given parent node xpath'
def 'Converting ContainerNode (tree) to a DataNode (tree) -- with ChoiceNode.'() {
given: 'a schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('yang-with-choice-node.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) schemaContext()
and: 'the json data fragment parsed into container node object'
def jsonData = TestUtils.getResourceFileContent('data-with-choice-node.json')
def containerNode = yangParserHelper.parseData(ContentType.JSON, jsonData, schemaContext, '', validateAndParse)
def 'Converting ContainerNode into DataNode collection: #scenario.'() {
given: 'a schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) schemaContext()
and: 'parent node xpath referencing parent of list element'
def parentNodeXpath = '/test-tree'
and: 'the json data fragment (list element) parsed into container node object'
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >> mockYangTextSchemaSourceSet
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(yangResources)
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
}
def setupSchemaSetMocksForDelta(Map<String, String> yangResourcesNameToContentMap) {
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
mockTimedYangTextSchemaSourceSetBuilder.getYangTextSchemaSourceSet(yangResourcesNameToContentMap) >> mockYangTextSchemaSourceSet
mockYangTextSchemaSourceSetCache.get(_, _) >> mockYangTextSchemaSourceSet
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).schemaContext()
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
}
}
given: 'Valid yang resource as name-to-content map'
def yangResourceContentPerName = TestUtils.getYangResourcesAsMap(
'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).schemaContext()
def dataNodeStored
and : 'a valid json is provided for the model'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt')
def dataNodeStored
given: 'valid yang resource as name-to-content map'
def yangResourceContentPerName = TestUtils.getYangResourcesAsMap('e2e/basic/cps-ran-inventory@2021-01-28.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).schemaContext()
and : 'a valid json is provided for the model'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-inventory-data.json')
and : 'all the further dependencies are mocked '
and : 'json data'
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-schema-model-data-v4.json')
expect: 'schema context is built with no exception indicating the schema set being valid '
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceContentPerName).schemaContext()
and: 'data is parsed with no exception indicating the model match'
new YangParserHelper().parseData(ContentType.JSON, jsonData, schemaContext, '', false) != null
}
def jsonReader = new JsonReader(new StringReader(jsonData))
def yangResourcesMap = TestUtils.getYangResourcesAsMap('multipleDataTree.yang')
and: 'schema context'
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).schemaContext()
and: 'variable to store the result of parsing'
DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> builder =
Builders.containerBuilder().withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schemaContext.getQName()))
1 | 'last-container'
}
-}
\ No newline at end of file
+}
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
def anchor = new Anchor(dataspaceName: 'testDataspace', name: 'testAnchor')
def 'get xpath prefix using node schema context'() {
given: 'the schema source cache contains the schema context for the test-tree module'
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
mockYangTextSchemaSourceSetCache.get(*_) >> mockYangTextSchemaSourceSet
when: 'the prefix of the yang module is retrieved'
def result = objectUnderTest.getPrefix(anchor, xpath)
def setup() {
def yangResources = TestUtils.getYangResourcesAsMap('bookstore.yang')
- schemaContext = YangTextSchemaSourceSetBuilder.of(yangResources).getSchemaContext()
+ schemaContext = YangTextSchemaSourceSetBuilder.of(yangResources).schemaContext()
}
def 'Convert RestConf style paths when (#scenario) to CPS paths'() {
def 'Parse a valid xml content #scenario'() {
given: 'YANG model schema context'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
when: 'the xml data is parsed'
def parsedXmlContent = XmlFileUtils.prepareXmlContent(xmlData, schemaContext)
then: 'the result xml is wrapped by root node defined in YANG schema'
def 'Parse a invalid xml content'() {
given: 'YANG model schema context'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
when: 'attempt to parse invalid xml'
XmlFileUtils.prepareXmlContent('invalid-xml', schemaContext)
then: 'a Sax Parser exception is thrown'
def 'Parse a xml content with XPath container #scenario'() {
given: 'YANG model schema context'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
and: 'Parent schema node by xPath'
def parentSchemaNode = YangParserHelper.getDataSchemaNodeAndIdentifiersByXpath(xPath, schemaContext).get('dataSchemaNode')
when: 'the XML data is parsed'
}
-}
\ No newline at end of file
+}
/*
* ============LICENSE_START=======================================================
- * Copyright (C) 2024 Nordix Foundation
+ * Copyright (C) 2024-2025 OpenInfra Foundation Europe. All rights reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
def jsonData = TestUtils.getResourceFileContent('multiple-object-data.json')
and: 'a model for that data'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('multipleDataTree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
when: 'the json data is parsed'
def result = objectUnderTest.parseData(ContentType.JSON, jsonData, schemaContext, '', validateAndParse)
then: 'a ContainerNode holding collection of normalized nodes is returned'
def fileData = TestUtils.getResourceFileContent(contentFile)
and: 'a model for that data'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
when: 'the data is parsed'
NormalizedNode result = objectUnderTest.parseData(contentType, fileData, schemaContext, '', validateAndParse)
then: 'the result is a normalized node of the correct type'
def 'Parsing invalid data: #description.'() {
given: 'a yang model (file)'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
when: 'invalid data is parsed'
objectUnderTest.parseData(contentType, invalidData, schemaContext, '', validateAndParse)
then: 'an exception is thrown'
def 'Parsing data fragment by xpath for #scenario.'() {
given: 'schema context'
def yangResourcesMap = TestUtils.getYangResourcesAsMap('test-tree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).schemaContext()
when: 'json string is parsed'
def result = objectUnderTest.parseData(contentType, nodeData, schemaContext, parentNodeXpath, validateAndParse)
then: 'a ContainerNode holding collection of normalized nodes is returned'
def 'Parsing json data fragment by xpath error scenario: #scenario.'() {
given: 'schema context'
def yangResourcesMap = TestUtils.getYangResourcesAsMap('test-tree.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).schemaContext()
when: 'json string is parsed'
objectUnderTest.parseData(ContentType.JSON, '{"nest": {"name" : "Nest", "birds": ["bird"]}}', schemaContext, parentNodeXpath, validateAndParse)
then: 'expected exception is thrown'
def 'Parsing json data with invalid json string: #description.'() {
given: 'schema context'
def yangResourcesMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).schemaContext()
when: 'malformed json string is parsed'
objectUnderTest.parseData(ContentType.JSON, invalidJson, schemaContext, '', validateAndParse)
then: 'an exception is thrown'
def 'Parsing json data with space.'() {
given: 'schema context'
def yangResourcesMap = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).schemaContext()
and: 'some json data with space in the array elements'
def jsonDataWithSpacesInArrayElement = TestUtils.getResourceFileContent('bookstore.json')
when: 'that json data is parsed'
def fileData = TestUtils.getResourceFileContent(contentFile)
and: 'the schema context is built for that data model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
when: 'the data is parsed to be validated'
objectUnderTest.parseData(contentType, fileData, schemaContext, parentNodeXpath, validateOnly)
then: 'no exception is thrown'
def setup() {
mockYangTextSchemaSourceSetCache.get('my dataspace', 'my schema') >> mockYangTextSchemaSourceSet
- mockYangTextSchemaSourceSet.getSchemaContext() >> mockSchemaContext
+ mockYangTextSchemaSourceSet.schemaContext() >> mockSchemaContext
}
def 'Convert RestConf-style path to CPS path'() {
def mockYangTextSchemaSourceSet = Mock(YangTextSchemaSourceSet)
mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >> mockYangTextSchemaSourceSet
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(yangResources)
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
- mockYangTextSchemaSourceSet.getSchemaContext() >> schemaContext
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
+ mockYangTextSchemaSourceSet.schemaContext() >> schemaContext
}
}
/*
* ============LICENSE_START=======================================================
* Copyright (C) 2020-2021 Pantheon.tech
- * Modifications Copyright (C) 2020-2022 Nordix Foundation
+ * Modifications Copyright (C) 2020-2025 OpenInfra Foundation Europe.
* Modifications Copyright (C) 2021 Bell Canada.
* Modifications Copyright (C) 2022 TechMahindra Ltd.
* ================================================================================
given: 'a yang model (file)'
def yangResourceNameToContent = [filename: TestUtils.getResourceFileContent('bookstore.yang')]
when: 'the content is parsed'
- def result = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).getSchemaContext()
+ def result = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent).schemaContext()
then: 'it can be validated successfully'
YangTextSchemaSourceSetBuilder.validate(yangResourceNameToContent)
and: 'the result contains 1 module of the correct name and revision'
summary: Get delta between an anchor and JSON payload
tags:
- cps-delta
+ /v2/dataspaces/{dataspace-name}/anchors/{source-anchor-name}/applyChangesInDeltaReport:
+ post:
+ description: Use the delta report to perform batch operations on an anchor in
+ a dataspace.
+ operationId: applyChangesInDeltaReport
+ parameters:
+ - description: dataspace-name
+ in: path
+ name: dataspace-name
+ required: true
+ schema:
+ example: my-dataspace
+ type: string
+ - description: source-anchor-name
+ in: path
+ name: source-anchor-name
+ required: true
+ schema:
+ example: my-anchor
+ type: string
+ requestBody:
+ content:
+ application/json:
+ examples:
+ dataSample:
+ $ref: '#/components/examples/deltaReportSample'
+ schema:
+ type: string
+ required: true
+ responses:
+ "201":
+ content:
+ application/json:
+ schema:
+ example: my-resource
+ type: string
+ description: Created
+ "400":
+ content:
+ application/json:
+ example:
+ status: 400
+ message: Bad Request
+ details: The provided request is not valid
+ schema:
+ $ref: '#/components/schemas/ErrorMessage'
+ description: Bad Request
+ "403":
+ content:
+ application/json:
+ example:
+ status: 403
+ message: Request Forbidden
+ details: This request is forbidden
+ schema:
+ $ref: '#/components/schemas/ErrorMessage'
+ description: Forbidden
+ "500":
+ content:
+ application/json:
+ example:
+ status: 500
+ message: Internal Server Error
+ details: Internal Server Error occurred
+ schema:
+ $ref: '#/components/schemas/ErrorMessage'
+ description: Internal Server Error
+ summary: Apply delta to an anchor
+ tags:
+ - cps-delta
/v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query:
get:
deprecated: true