summaryrefslogtreecommitdiffstats
path: root/actn-interface-tools/yang-utils/src/main/java/org/onap/integration/actninterfacetools/yangutils/YangToolsUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'actn-interface-tools/yang-utils/src/main/java/org/onap/integration/actninterfacetools/yangutils/YangToolsUtil.java')
-rw-r--r--actn-interface-tools/yang-utils/src/main/java/org/onap/integration/actninterfacetools/yangutils/YangToolsUtil.java560
1 files changed, 560 insertions, 0 deletions
diff --git a/actn-interface-tools/yang-utils/src/main/java/org/onap/integration/actninterfacetools/yangutils/YangToolsUtil.java b/actn-interface-tools/yang-utils/src/main/java/org/onap/integration/actninterfacetools/yangutils/YangToolsUtil.java
new file mode 100644
index 0000000..b6cde3a
--- /dev/null
+++ b/actn-interface-tools/yang-utils/src/main/java/org/onap/integration/actninterfacetools/yangutils/YangToolsUtil.java
@@ -0,0 +1,560 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Actn Interface Tools
+ * ================================================================================
+ * Copyright (C) 2023 Huawei Canada Limited.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.integration.actninterfacetools.yangutils;
+
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import org.onap.integration.actninterfacetools.globalapi.GlobalService;
+import org.onosproject.yang.gen.v11.ietfethtranservice.rev20210111.ietfethtranservice.DefaultEthtSvc;
+import org.onosproject.yang.gen.v11.ietfethtranservice.rev20210111.ietfethtranservice.ethtsvc.DefaultEthtSvcInstances;
+import org.onosproject.yang.gen.v11.ietfethtranservice.rev20210111.ietfethtranservice.ethtsvc.EthtSvcInstancesKeys;
+import org.onosproject.yang.gen.v11.ietfnetwork.rev20180226.ietfnetwork.DefaultNetworks;
+import org.onosproject.yang.gen.v11.ietfnetwork.rev20180226.ietfnetwork.NetworkId;
+import org.onosproject.yang.gen.v11.ietfnetwork.rev20180226.ietfnetwork.NodeId;
+import org.onosproject.yang.gen.v11.ietfnetwork.rev20180226.ietfnetwork.networks.DefaultNetwork;
+import org.onosproject.yang.gen.v11.ietfnetwork.rev20180226.ietfnetwork.networks.NetworkKeys;
+import org.onosproject.yang.gen.v11.ietfnetwork.rev20180226.ietfnetwork.networks.network.DefaultNode;
+import org.onosproject.yang.gen.v11.ietfnetwork.rev20180226.ietfnetwork.networks.network.NodeKeys;
+import org.onosproject.yang.gen.v11.ietfnetworktopology.rev20180226.ietfnetworktopology.LinkId;
+import org.onosproject.yang.gen.v11.ietfnetworktopology.rev20180226.ietfnetworktopology.networks.network.augmentednwnetwork.DefaultLink;
+import org.onosproject.yang.gen.v11.ietfnetworktopology.rev20180226.ietfnetworktopology.networks.network.augmentednwnetwork.LinkKeys;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.DefaultTe;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.globalsgrouping.DefaultGlobals;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.lspsgrouping.DefaultLsps;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.lspsgrouping.lsps.DefaultLsp;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.lspsgrouping.lsps.LspKeys;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.namedpathconstraints.DefaultNamedPathConstraints;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.namedpathconstraints.namedpathconstraints.DefaultNamedPathConstraint;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.namedpathconstraints.namedpathconstraints.NamedPathConstraintKeys;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.tunnelsgrouping.DefaultTunnels;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.tunnelsgrouping.tunnels.DefaultTunnel;
+import org.onosproject.yang.gen.v11.ietfte.rev20210220.ietfte.tunnelsgrouping.tunnels.TunnelKeys;
+import org.onosproject.yang.gen.v11.ietftetopology.rev20200806.ietftetopology.telinkconfigattributes.DefaultTeLinkAttributes;
+import org.onosproject.yang.gen.v11.ietftetopology.rev20200806.ietftetopology.telinkconfigattributes.telinkattributes.DefaultUnderlay;
+import org.onosproject.yang.gen.v11.ietftransclientservice.rev20210111.ietftransclientservice.DefaultClientSvc;
+import org.onosproject.yang.model.ModelConverter;
+import org.onosproject.yang.model.ModelObjectId;
+import org.onosproject.yang.model.ResourceData;
+import org.onosproject.yang.model.ResourceId;
+import org.onosproject.yang.model.DefaultResourceData;
+import org.onosproject.yang.model.DataNode;
+import org.onosproject.yang.model.DefaultModelObjectData;
+import org.onosproject.yang.model.ModelObjectData;
+import org.onosproject.yang.model.ModelObject;
+import org.onosproject.yang.model.InnerModelObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.ServiceLoader;
+
+/**
+ * The class services as a placeholder for utilities related to
+ * generic YangTools operations.
+ */
+public final class YangToolsUtil {
+
+ private static final Logger log = LoggerFactory.getLogger(YangToolsUtil.class);
+ private static ModelConverter MODEL_CONVERTER = null;
+ public static void active(){
+ ServiceLoader<GlobalService> serviceLoader = ServiceLoader.load(GlobalService.class);
+ for (GlobalService service : serviceLoader) {
+ MODEL_CONVERTER = service.getModelConverter();
+ }
+ }
+ public YangToolsUtil() {
+
+ }
+
+
+ /**
+ * Returns the model object id for networks container.
+ *
+ * @return model object id
+ */
+ public static ModelObjectId getModIdForRoot() {
+ return ModelObjectId.builder().build();
+ }
+
+ public static ModelObjectId getModIdForLink(String networkIdStr, String linkIdStr) {
+ NetworkId nid = NetworkId.fromString(networkIdStr);
+ NetworkKeys nkeys = new NetworkKeys();
+ nkeys.networkId(nid);
+ LinkId lid = LinkId.fromString(linkIdStr);
+ LinkKeys lkeys = new LinkKeys();
+ lkeys.linkId(lid);
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, nkeys)
+ .addChild(DefaultLink.class, lkeys)
+ .build();
+ }
+
+ /**
+ * Returns the model object id for networks container.
+ *
+ * @return model object id
+ */
+ public static ModelObjectId getModIdForNetworks() {
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForNetwork(String networkIdStr) {
+ NetworkId nid = NetworkId.fromString(networkIdStr);
+ NetworkKeys nkeys = new NetworkKeys();
+ nkeys.networkId(nid);
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, nkeys)
+ .build();
+ }
+
+ /**
+ * Returns the resource data from the data node and the resource id.
+ *
+ * @param dataNode data node
+ * @param resId resource id
+ * @return resource data
+ */
+ public static ResourceData getResourceData(DataNode dataNode, ResourceId resId) {
+ return DefaultResourceData.builder()
+ .addDataNode(dataNode)
+ .resourceId(resId)
+ .build();
+ }
+
+ /**
+ * Returns the model object id for networks/network/node container.
+ *
+ * @return model object id
+ */
+ public static ModelObjectId getModIdForNode() {
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, new NetworkKeys())
+ .addChild(DefaultNode.class, new NodeKeys())
+ .build();
+ }
+
+ /**
+ * Returns the model object id for networks/network container.
+ *
+ * @param networkId identifier of the target network
+ * @return model object id
+ */
+ public static ModelObjectId getModIdForYangNetwork(NetworkId networkId) {
+ NetworkKeys networkKeys = new NetworkKeys();
+ networkKeys.networkId(networkId);
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, networkKeys)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForTe() {
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .build();
+ }
+
+
+ public static ModelObjectId getModIdForTeTunnels() {
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultTunnels.class)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForTeGlobals() {
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultGlobals.class)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForLsps() {
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultLsps.class)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForLsp(String tunnelNameStr) {
+ LspKeys k = new LspKeys();
+ k.tunnelName(tunnelNameStr);
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultLsps.class)
+ .addChild(DefaultLsp.class, k)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForTeTunnel(String tunnelNameStr) {
+ TunnelKeys tkeys = new TunnelKeys();
+ tkeys.name(tunnelNameStr);
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultTunnels.class)
+ .addChild(DefaultTunnel.class, tkeys)
+ .build();
+ }
+ public static ModelObjectId getModIdForTeLspsState() {
+ throw new RuntimeException("YangToolsUtil.getModIdForTeLspsState not implemented");
+ }
+
+ public static ModelObjectId getModIdForTeGlobalsPathConstraint(String pathConstraintName) {
+ NamedPathConstraintKeys keys = new NamedPathConstraintKeys();
+ keys.name(pathConstraintName);
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultGlobals.class)
+ .addChild(DefaultNamedPathConstraints.class)
+ .addChild(DefaultNamedPathConstraint.class, keys)
+ .build();
+ }
+ public static ResourceId getRidForNetwork(String networkIdStr) {
+ if (networkIdStr == null) {
+ return null;
+ }
+ ModelObjectId modId = getModIdForNetwork(networkIdStr);
+ return modelObjId2ResourceId(modId);
+ }
+
+ public static ResourceId getRidForTunnel(String tunnelNameStr) {
+ if (tunnelNameStr != null && !tunnelNameStr.isEmpty()){
+ ModelObjectId modId = getModIdForTeTunnel(tunnelNameStr);
+ return modelObjId2ResourceId(modId);
+ }
+ return null;
+ }
+
+ public static ResourceId getRidForPhyConnections() {
+ throw new RuntimeException("YangToolsUtil.getRidForPhyConnections not implemented");
+ }
+ public static ResourceId getRidForLink(String networkIdStr, String linkIdStr) {
+ return modelObjId2ResourceId(getModIdForLink(networkIdStr, linkIdStr));
+ }
+
+
+ public static ResourceId getRidForNetworks() {
+ return modelObjId2ResourceId(getModIdForNetworks());
+ }
+
+ private static ModelObjectId getModIdForNetworkLinkUnderlay(String networkIdStr, String linkIdStr) {
+ NetworkId nid = NetworkId.fromString(networkIdStr);
+ NetworkKeys nkeys = new NetworkKeys();
+ nkeys.networkId(nid);
+ LinkId lid = LinkId.fromString(linkIdStr);
+ LinkKeys lkeys = new LinkKeys();
+ lkeys.linkId(lid);
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, nkeys)
+ .addChild(DefaultLink.class, lkeys)
+ .addChild(org.onosproject.yang.gen.v11.ietftetopology.rev20200806.ietftetopology.networks.network.link.augmentedntlink.DefaultTe.class)
+ .addChild(DefaultTeLinkAttributes.class)
+ .addChild(DefaultUnderlay.class)
+ .build();
+ }
+
+ private static ModelObjectId getModIdForNode(String networkIdStr, String nodeIdStr) {
+ NetworkId networkId = NetworkId.fromString(networkIdStr);
+ NetworkKeys networkKeys = new NetworkKeys();
+ networkKeys.networkId(networkId);
+
+ NodeId nodeId = NodeId.fromString(nodeIdStr);
+ NodeKeys nodeKeys = new NodeKeys();
+ nodeKeys.nodeId(nodeId);
+
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, networkKeys)
+ .addChild(DefaultNode.class, nodeKeys)
+ .build();
+ }
+
+ private static ModelObjectId getModIdForNetworkLink(String networkIdStr, String linkIdStr) {
+ NetworkId nid = NetworkId.fromString(networkIdStr);
+ NetworkKeys nkeys = new NetworkKeys();
+ nkeys.networkId(nid);
+ LinkId lid = LinkId.fromString(linkIdStr);
+ LinkKeys lkeys = new LinkKeys();
+ lkeys.linkId(lid);
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, nkeys)
+ .addChild(DefaultLink.class, lkeys)
+ .build();
+ }
+
+ /**
+ * Returns resource id from model converter.
+ *
+ * @param modelId model object id
+ * @return resource id
+ */
+ public static ResourceId modelObjId2ResourceId(ModelObjectId modelId) {
+ DefaultModelObjectData.Builder data = DefaultModelObjectData.builder().identifier(modelId);
+ ResourceData resData = MODEL_CONVERTER.createDataNode(data.build());
+ return resData.resourceId();
+ }
+
+ public static ResourceId getRidForTe() {
+ return modelObjId2ResourceId(getModIdForTe());
+ }
+
+ public static ResourceId getRidForRoot() {
+ return modelObjId2ResourceId(getModIdForRoot());
+ }
+
+ public static ResourceId getRidForTeTunnels() {
+ return modelObjId2ResourceId(getModIdForTeTunnels());
+ }
+
+ public static ResourceId getRidForTeLsps(){
+ return modelObjId2ResourceId(ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultLsps.class)
+ .build()
+ );
+ }
+
+ public static ResourceId getRidForNetworkNode(String networkIdStr, String nodeIdStr) {
+ return modelObjId2ResourceId(getModIdForNetworkNode(networkIdStr, nodeIdStr));
+ }
+
+ public static ModelObjectId getModIdForNetworkNode(String networkIdStr, String nodeIdStr) {
+ NetworkId nid = NetworkId.fromString(networkIdStr);
+ NetworkKeys networkKeys = new NetworkKeys();
+ networkKeys.networkId(nid);
+
+ NodeId nodeId = NodeId.fromString(nodeIdStr);
+ NodeKeys nodeKeys = new NodeKeys();
+ nodeKeys.nodeId(nodeId);
+
+ return ModelObjectId.builder()
+ .addChild(DefaultNetworks.class)
+ .addChild(DefaultNetwork.class, networkKeys)
+ .addChild(DefaultNode.class, nodeKeys)
+ .build();
+ }
+
+ public static ResourceId getRidForTeTunnel(String tunnelName) {
+ return modelObjId2ResourceId(getModIdForTeTunnel(tunnelName));
+ }
+
+ public static ResourceId getRidForLsp(String tunnelName) {
+ return modelObjId2ResourceId(getModIdForLsp(tunnelName));
+ }
+
+ public static ResourceId getRidForNamedPathConstraint(String pathConstraintName) {
+ return modelObjId2ResourceId(getModIdForTeGlobalsPathConstraint(pathConstraintName));
+ }
+
+ public static ResourceId getRidForTeGlobals() {
+ return modelObjId2ResourceId(getModIdForTeGlobals());
+ }
+
+ public static ResourceId getRidForTeLspsState() {
+ return modelObjId2ResourceId(getModIdForTeLspsState());
+ }
+
+ public static ResourceId getRidForTeTunnelStateDepTunnels(String teTunnelName) {
+ return modelObjId2ResourceId(getModIdForTeTunnelStateDepTunnels(teTunnelName));
+ }
+
+ public static ResourceId getClientSvcRid() {
+ return modelObjId2ResourceId(getModIdForClientSvc());
+
+ }
+
+ private static ModelObjectId getModIdForClientSvc() {
+ return ModelObjectId.builder()
+ .addChild(DefaultClientSvc.class)
+ .build();
+ }
+
+ private static ModelObjectId getModIdForTeTunnelStateDepTunnels(String teTunnelName) {
+ TunnelKeys tkeys = new TunnelKeys();
+ tkeys.name(teTunnelName);
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultTunnels.class)
+ .addChild(DefaultTunnel.class, tkeys)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForEthSvc() {
+ return ModelObjectId.builder()
+ .addChild(DefaultEthtSvc.class)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForEthGlobals() {
+ return ModelObjectId.builder()
+ .addChild(DefaultEthtSvc.class)
+ .addChild(org.onosproject.yang.gen.v11.ietfethtranservice.rev20210111.ietfethtranservice.ethtsvc.DefaultGlobals.class)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForEthSvInstances(String ethSvcInstanceName) {
+ EthtSvcInstancesKeys ethtSvcInstancesKeys = new EthtSvcInstancesKeys();
+ ethtSvcInstancesKeys.ethtSvcName(ethSvcInstanceName);
+ return ModelObjectId.builder()
+ .addChild(DefaultEthtSvc.class)
+ .addChild(DefaultEthtSvcInstances.class, ethtSvcInstancesKeys)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForEthSvState(String ethSvcInstanceName) {
+ EthtSvcInstancesKeys ethtSvcInstancesKeys = new EthtSvcInstancesKeys();
+ ethtSvcInstancesKeys.ethtSvcName(ethSvcInstanceName);
+ return ModelObjectId.builder()
+ .addChild(DefaultEthtSvc.class)
+ .addChild(DefaultEthtSvcInstances.class, ethtSvcInstancesKeys)
+ .build();
+ }
+
+ public static ModelObjectId getModIdForEthSvcConfig(String ethSvcName) {
+ EthtSvcInstancesKeys ethtSvcInstancesKeys = new EthtSvcInstancesKeys();
+ ethtSvcInstancesKeys.ethtSvcName(ethSvcName);
+
+ return ModelObjectId.builder()
+ .addChild(DefaultEthtSvc.class)
+ .addChild(DefaultEthtSvcInstances.class, ethtSvcInstancesKeys)
+ .build();
+ }
+ public static ResourceId getRIdForEthGlobals() {
+ return modelObjId2ResourceId(getModIdForEthGlobals());
+ }
+ public static ResourceId getRIdForEthSvcInstances(String ethSvcInstanceName) {
+ return modelObjId2ResourceId(getModIdForEthSvInstances(ethSvcInstanceName));
+ }
+ public static ResourceId getRidForTeTunnelP2p2ndPaths(String teTunnelName) {
+ throw new RuntimeException("YangToolsUtil.getRidForTeTunnelP2p2nndPaths not implemented");
+ }
+ public static ResourceId getRidForTunnelState(String tunnelName) {
+ throw new RuntimeException("YangToolsUtil.getRidForTunnelState not implemented");
+ }
+ public static ModelObjectId getModIdForNameExplicitPathState(String pathName) {
+ return null;
+ }
+
+ public static ResourceId getRidForNameExplicitPathState(String name) {
+ return modelObjId2ResourceId(getModIdForNameExplicitPathState(name));
+ }
+
+ public static ModelObjectId getModIdForPathConstraintState(String constraintName) {
+ NamedPathConstraintKeys constraintKeys = new NamedPathConstraintKeys();
+ constraintKeys.name(constraintName);
+ return ModelObjectId.builder()
+ .addChild(DefaultTe.class)
+ .addChild(DefaultGlobals.class)
+ .addChild(DefaultNamedPathConstraints.class)
+ .addChild(DefaultNamedPathConstraint.class, constraintKeys)
+ .build();
+ }
+
+ public static ResourceId getRidForNamePathConstraintState(String constraintName) {
+ return modelObjId2ResourceId(getModIdForPathConstraintState(constraintName));
+ }
+
+
+
+
+ public static DataNode yangPojo2DataNode(ModelObjectId parentModId, ModelObject yangPojo) {
+ ModelObjectData outputMo = yangPojo2ModData(parentModId, yangPojo);
+ ResourceData resourceData = MODEL_CONVERTER.createDataNode(outputMo);
+
+ return resourceData.dataNodes().get(0);
+ }
+
+ public static ModelObjectData yangPojo2ModData(ModelObjectId modId, ModelObject yangPojo) {
+ return DefaultModelObjectData.builder().identifier(modId)
+ .addModelObject(yangPojo).build();
+ }
+
+ public static <T extends InnerModelObject> T convertJsonToYangObj(String parentRidStr,
+ ObjectNode jsonNode,
+ Class<T> modelClass) {
+ if (jsonNode == null) {
+ log.error("ERROR: convertJsonToYangObj: jsonNode is null");
+ return null;
+ }
+
+ ResourceData resourceData = CodecConverter.objectNodeToResourceData(parentRidStr, jsonNode);
+ if (resourceData == null || resourceData.dataNodes() == null) {
+ log.error("ERROR: convertJsonToYangObj: {} is null",
+ resourceData == null ? "resourceData" : "resourceData.dataNodes()");
+ return null;
+ }
+
+ DataNode dataNode = resourceData.dataNodes().get(0);
+ ResourceId parentRid = resourceData.resourceId();
+
+ if (parentRid == null) {
+ parentRid = ResourceId.builder().addBranchPointSchema("/", null).build();
+ dataNode = CodecConverter.removeTopDataNode(dataNode);
+ }
+
+ return convertDataNodeToYangObj(parentRid, dataNode, modelClass);
+ }
+
+ public static <T extends InnerModelObject> T convertDataNodeToYangObj(ResourceId parentRid,
+ DataNode dataNode,
+ Class<T> modelClass) {
+ List<ModelObject> objects = getModelObjects(dataNode, parentRid);
+
+ for (ModelObject obj : objects) {
+ if (modelClass.isInstance(obj)) {
+ return (T) obj;
+ }
+ }
+
+ log.error("ERROR: convertDataNodeToYangObj: conversion failed. parentRid={}, class={}",
+ parentRid, modelClass.getName());
+
+ return null;
+ }
+
+ /**
+ * Returns model objects of the store. The data node read from store
+ * gives the particular node. So the node's parent resource id is taken
+ * and the data node is given to model converter.
+ *
+ * @param dataNode data node from store
+ * @param parentRid parent resource id
+ * @return model objects
+ */
+ public static List<ModelObject> getModelObjects(DataNode dataNode,
+ ResourceId parentRid) {
+ if (dataNode == null || parentRid == null) {
+ log.error("ERROR: getModelObjects: {} is null", dataNode == null ? "dataNode" : "parentRid");
+ return null;
+ }
+
+ ResourceData data = getResourceData(dataNode, parentRid);
+ ModelObjectData modelData = MODEL_CONVERTER.createModel(data);
+ return modelData.modelObjects();
+ }
+}