Merge "XML content on create anchors node support"
authorToine Siebelink <toine.siebelink@est.tech>
Thu, 22 Dec 2022 15:46:16 +0000 (15:46 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 22 Dec 2022 15:46:16 +0000 (15:46 +0000)
1  2 
cps-service/pom.xml
cps-service/src/main/java/org/onap/cps/utils/YangUtils.java

Simple merge
@@@ -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<QName> dataSchemaNodeIdentifiers =
+                 (Collection<QName>) 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
      }
  
      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<QName> findDataSchemaNodeIdentifiersByXpathNodeIdSequence(
+     private static Map<String, Object> findDataSchemaNodeAndIdentifiersByXpathNodeIdSequence(
              final String[] xpathNodeIdSequence,
              final Collection<? extends DataSchemaNode> dataSchemaNodes,
              final Collection<QName> dataSchemaNodeIdentifiers) {