From: Toine Siebelink Date: Thu, 22 Dec 2022 15:46:16 +0000 (+0000) Subject: Merge "XML content on create anchors node support" X-Git-Tag: 3.2.1~31 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=8119a0634b900e15a0d99eb3b1993bb59546127c;p=cps.git Merge "XML content on create anchors node support" --- 8119a0634b900e15a0d99eb3b1993bb59546127c diff --cc cps-service/src/main/java/org/onap/cps/utils/YangUtils.java index 3ef6c6fcf7,49d3a70f9f..eb0c764cbc --- a/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java +++ b/cps-service/src/main/java/org/onap/cps/utils/YangUtils.java @@@ -27,12 -28,20 +28,19 @@@ import com.google.gson.JsonSyntaxExcept import com.google.gson.stream.JsonReader; import java.io.IOException; import java.io.StringReader; + import java.net.URISyntaxException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; + import java.util.HashMap; + import java.util.Iterator; import java.util.List; + import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; + import javax.xml.stream.XMLInputFactory; + import javax.xml.stream.XMLStreamException; + import javax.xml.stream.XMLStreamReader; import lombok.AccessLevel; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; @@@ -61,8 -74,49 +75,46 @@@ import org.xml.sax.SAXException @NoArgsConstructor(access = AccessLevel.PRIVATE) public class YangUtils { - private static final String XPATH_DELIMITER_REGEX = "\\/"; - private static final String XPATH_NODE_KEY_ATTRIBUTES_REGEX = "\\[.*?\\]"; - /** - * Parses jsonData into Collection of NormalizedNode according to given schema context. + * Parses data into Collection of NormalizedNode according to given schema context. + * + * @param nodeData data string + * @param schemaContext schema context describing associated data model + * @return the NormalizedNode object + */ + public static ContainerNode parseData(final ContentType contentType, final String nodeData, + final SchemaContext schemaContext) { + if (contentType == ContentType.JSON) { + return parseJsonData(nodeData, schemaContext, Optional.empty()); + } + return parseXmlData(XmlFileUtils.prepareXmlContent(nodeData, schemaContext), schemaContext, + Optional.empty()); + } + + /** + * Parses data into NormalizedNode according to given schema context. + * + * @param nodeData data string + * @param schemaContext schema context describing associated data model + * @return the NormalizedNode object + */ + public static ContainerNode parseData(final ContentType contentType, final String nodeData, + final SchemaContext schemaContext, final String parentNodeXpath) { + final DataSchemaNode parentSchemaNode = + (DataSchemaNode) getDataSchemaNodeAndIdentifiersByXpath(parentNodeXpath, schemaContext) + .get("dataSchemaNode"); + final Collection dataSchemaNodeIdentifiers = + (Collection) getDataSchemaNodeAndIdentifiersByXpath(parentNodeXpath, schemaContext) + .get("dataSchemaNodeIdentifiers"); + if (contentType == ContentType.JSON) { + return parseJsonData(nodeData, schemaContext, Optional.of(dataSchemaNodeIdentifiers)); + } + return parseXmlData(XmlFileUtils.prepareXmlContent(nodeData, parentSchemaNode, parentNodeXpath), schemaContext, + Optional.of(dataSchemaNodeIdentifiers)); + } + + /** + * Parses data into Collection of NormalizedNode according to given schema context. * * @param jsonData json data as string * @param schemaContext schema context describing associated data model @@@ -168,15 -257,18 +255,15 @@@ } private static String[] xpathToNodeIdSequence(final String xpath) { - final String[] xpathNodeIdSequence = Arrays.stream(xpath - .replaceAll(XPATH_NODE_KEY_ATTRIBUTES_REGEX, "") - .split(XPATH_DELIMITER_REGEX)) - .filter(identifier -> !identifier.isEmpty()) - .toArray(String[]::new); - if (xpathNodeIdSequence.length < 1) { - throw new DataValidationException("Invalid xpath.", "Xpath contains no node identifiers."); + try { + return CpsPathUtil.getXpathNodeIdSequence(xpath); + } catch (final PathParsingException pathParsingException) { + throw new DataValidationException(pathParsingException.getMessage(), pathParsingException.getDetails(), + pathParsingException); } - return xpathNodeIdSequence; } - private static Collection findDataSchemaNodeIdentifiersByXpathNodeIdSequence( + private static Map findDataSchemaNodeAndIdentifiersByXpathNodeIdSequence( final String[] xpathNodeIdSequence, final Collection dataSchemaNodes, final Collection dataSchemaNodeIdentifiers) {