diff options
Diffstat (limited to 'cps-service/src/main/java')
3 files changed, 43 insertions, 4 deletions
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java index 6036f92225..2583e9905b 100644 --- a/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java +++ b/cps-service/src/main/java/org/onap/cps/api/CpsDataService.java @@ -118,4 +118,17 @@ public interface CpsDataService { * @param listNodeXpath list node xpath */ void deleteListNodeData(@NonNull String dataspaceName, @NonNull String anchorName, @NonNull String listNodeXpath); + + /** + * Updates leaves of DataNode for given dataspace and anchor using xpath, + * along with the leaves of each Child Data Node which already exists. + * This method will throw an exception if data node update or any descendant update does not exist. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + * @param parentNodeXpath xpath + * @param dataNodeUpdatesAsJson json data representing data node updates + */ + void updateNodeLeavesAndExistingDescendantLeaves(String dataspaceName, String anchorName, String parentNodeXpath, + String dataNodeUpdatesAsJson); } 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 a512f67baf..8989dc80ef 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 @@ -100,6 +100,18 @@ public class CpsDataServiceImpl implements CpsDataService { } @Override + public void updateNodeLeavesAndExistingDescendantLeaves(final String dataspaceName, final String anchorName, + final String parentNodeXpath, + final String dataNodeUpdatesAsJson) { + final Collection<DataNode> dataNodeUpdates = + buildDataNodeCollectionFromJson(dataspaceName, anchorName, parentNodeXpath, dataNodeUpdatesAsJson); + for (final DataNode dataNodeUpdate : dataNodeUpdates) { + processDataNodeUpdate(dataspaceName, anchorName, dataNodeUpdate); + } + notificationService.processDataUpdatedEvent(dataspaceName, anchorName); + } + + @Override public void replaceNodeTree(final String dataspaceName, final String anchorName, final String parentNodeXpath, final String jsonData) { final var dataNode = buildDataNodeFromJson(dataspaceName, anchorName, parentNodeXpath, jsonData); @@ -170,4 +182,17 @@ public class CpsDataServiceImpl implements CpsDataService { private SchemaContext getSchemaContext(final String dataspaceName, final String schemaSetName) { return yangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName).getSchemaContext(); } + + private void processDataNodeUpdate(final String dataspaceName, final String anchorName, + final DataNode dataNodeUpdate) { + if (dataNodeUpdate == null) { + return; + } + cpsDataPersistenceService.updateDataLeaves(dataspaceName, anchorName, dataNodeUpdate.getXpath(), + dataNodeUpdate.getLeaves()); + final Collection<DataNode> childDataNodeUpdates = dataNodeUpdate.getChildDataNodes(); + for (final DataNode childDataNodeUpdate : childDataNodeUpdates) { + processDataNodeUpdate(dataspaceName, anchorName, childDataNodeUpdate); + } + } } diff --git a/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java b/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java index 6b7f5a89be..e0c8fe7055 100644 --- a/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java +++ b/cps-service/src/main/java/org/onap/cps/notification/CpsDataUpdatedEventFactory.java @@ -29,7 +29,6 @@ import org.onap.cps.api.CpsAdminService; import org.onap.cps.api.CpsDataService; import org.onap.cps.event.model.Content; import org.onap.cps.event.model.CpsDataUpdatedEvent; -import org.onap.cps.event.model.CpsDataUpdatedEvent.Schema; import org.onap.cps.event.model.Data; import org.onap.cps.spi.FetchDescendantsOption; import org.onap.cps.spi.model.Anchor; @@ -40,6 +39,7 @@ import org.springframework.stereotype.Component; @Component public class CpsDataUpdatedEventFactory { + private static final URI EVENT_SCHEMA; private static final URI EVENT_SOURCE; private static final String EVENT_TYPE = "org.onap.cps.data-updated-event"; private static final DateTimeFormatter dateTimeFormatter = @@ -47,6 +47,7 @@ public class CpsDataUpdatedEventFactory { static { try { + EVENT_SCHEMA = new URI("urn:cps:org.onap.cps:data-updated-event-schema:v1"); EVENT_SOURCE = new URI("urn:cps:org.onap.cps"); } catch (final URISyntaxException e) { // As it is fixed string, I don't expect to see this error @@ -54,8 +55,8 @@ public class CpsDataUpdatedEventFactory { } } - private CpsDataService cpsDataService; - private CpsAdminService cpsAdminService; + private final CpsDataService cpsDataService; + private final CpsAdminService cpsAdminService; public CpsDataUpdatedEventFactory(final CpsDataService cpsDataService, final CpsAdminService cpsAdminService) { this.cpsDataService = cpsDataService; @@ -80,7 +81,7 @@ public class CpsDataUpdatedEventFactory { final var cpsDataUpdatedEvent = new CpsDataUpdatedEvent(); cpsDataUpdatedEvent.withContent(createContent(anchor, dataNode)); cpsDataUpdatedEvent.withId(UUID.randomUUID().toString()); - cpsDataUpdatedEvent.withSchema(Schema.URN_CPS_ORG_ONAP_CPS_DATA_UPDATED_EVENT_SCHEMA_1_1_0_SNAPSHOT); + cpsDataUpdatedEvent.withSchema(EVENT_SCHEMA); cpsDataUpdatedEvent.withSource(EVENT_SOURCE); cpsDataUpdatedEvent.withType(EVENT_TYPE); return cpsDataUpdatedEvent; |