2 * ============LICENSE_START=======================================================
3 * ONAP : ccsdk features
4 * ================================================================================
5 * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property.
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.util;
24 import com.google.gson.stream.JsonReader;
25 import java.io.BufferedReader;
27 import java.io.FileReader;
28 import java.io.IOException;
29 import java.io.InputStream;
30 import java.io.StringReader;
31 import java.net.URISyntaxException;
32 import java.nio.charset.StandardCharsets;
33 import javax.xml.stream.XMLStreamException;
34 import javax.xml.stream.XMLStreamReader;
35 import org.opendaylight.yangtools.util.xml.UntrustedXML;
36 import org.opendaylight.yangtools.yang.common.QName;
37 import org.opendaylight.yangtools.yang.common.QNameModule;
38 import org.opendaylight.yangtools.yang.common.Revision;
39 import org.opendaylight.yangtools.yang.common.XMLNamespace;
40 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
41 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizationResult;
42 import org.opendaylight.yangtools.yang.data.api.schema.stream.NormalizedNodeStreamWriter;
44 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactory;
45 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier;
46 import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream;
47 import org.opendaylight.yangtools.yang.data.codec.xml.XmlParserStream;
48 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter;
49 import org.opendaylight.yangtools.yang.data.impl.schema.NormalizationResultHolder;
50 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
52 //import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference; //Yangtool 8.0
53 import org.opendaylight.yangtools.yang.model.util.SchemaInferenceStack.Inference;
54 import org.xml.sax.SAXException;
56 public class Onf14DomTestUtils {
58 private static final QNameModule CORE_MODEL_1_4_MODULE =
59 QNameModule.create(XMLNamespace.of("urn:onf:yang:core-model-1-4"), Revision.of("2019-11-27"));
60 private static final QName CORE_MODEL_CONTROL_CONSTRUCT_CONTAINER =
61 QName.create(CORE_MODEL_1_4_MODULE, "control-construct");
63 private static EffectiveModelContext schemaContext;
64 private static Inference hwContainerSchema;
65 static JSONCodecFactory lhotkaCodecFactory;
66 private static String streamAsString;
67 private static NormalizedNode transformedInput;
69 public static void cleanup() {
70 lhotkaCodecFactory = null;
72 hwContainerSchema = null;
75 static String loadTextFile(final File file) throws IOException {
76 final StringBuilder result = new StringBuilder();
77 try (BufferedReader bufReader = new BufferedReader(new FileReader(file, StandardCharsets.UTF_8))) {
79 while ((line = bufReader.readLine()) != null) {
83 return result.toString();
87 public static NormalizedNode getNormalizedNodeFromJson() throws IOException, URISyntaxException {
88 schemaContext = TestYangParserUtil.parseYangResourceDirectory("/");
89 lhotkaCodecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext);
91 loadTextFile(new File(Onf14DomTestUtils.class.getResource("/ControlConstruct-data-test.json").toURI()));
92 final JsonReader reader = new JsonReader(new StringReader(streamAsString));
94 NormalizationResultHolder result = new NormalizationResultHolder();
96 // StreamWriter which attaches NormalizedNode under parent
97 final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
99 // JSON -> StreamWriter parser
100 try (JsonParserStream handler = JsonParserStream.create(streamWriter, lhotkaCodecFactory)) {
101 handler.parse(new JsonReader(new StringReader(streamAsString)));
104 // Finally build the node
105 transformedInput = result.getResult().data();
106 return transformedInput;
109 public static NormalizedNode getNormalizedNodeFromXML()
110 throws XMLStreamException, URISyntaxException, IOException, SAXException {
111 schemaContext = TestYangParserUtil.parseYangResourceDirectory("/previousRevision");
112 hwContainerSchema = Inference.ofDataTreePath(schemaContext, CORE_MODEL_CONTROL_CONSTRUCT_CONTAINER);
113 final InputStream resourceAsStream =
114 Onf14DomTestUtils.class.getResourceAsStream("/previousRevision/ControlConstruct-data-test.xml");
117 * final XMLInputFactory factory = XMLInputFactory.newInstance();
118 * XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream);
120 final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
122 final NormalizationResultHolder result = new NormalizationResultHolder();
123 final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
125 final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, hwContainerSchema);
126 xmlParser.parse(reader);
131 transformedInput = result.getResult().data();
132 return transformedInput;
135 public static NormalizedNode getNormalizedNodeFromXML(String revision)
136 throws XMLStreamException, URISyntaxException, IOException, SAXException {
137 schemaContext = TestYangParserUtil.parseYangResourceDirectory("/currentRevision");
138 hwContainerSchema = Inference.ofDataTreePath(schemaContext, CORE_MODEL_CONTROL_CONSTRUCT_CONTAINER);
139 final InputStream resourceAsStream =
140 Onf14DomTestUtils.class.getResourceAsStream("/currentRevision/Ceragon-Control-Construct.xml");
143 * final XMLInputFactory factory = XMLInputFactory.newInstance();
144 * XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream);
146 final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
148 final NormalizationResultHolder result = new NormalizationResultHolder();
149 final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
151 final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, hwContainerSchema);
152 xmlParser.parse(reader);
157 transformedInput = result.getResult().data();
158 return transformedInput;