a810373ea72a83524d52d7f69893096844d2ffe1
[ccsdk/features.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP : ccsdk features
4  * ================================================================================
5  * Copyright (C) 2021 highstreet technologies GmbH Intellectual Property.
6  * All rights reserved.
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
11  *
12  *     http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  *
21  */
22 package org.onap.ccsdk.features.sdnr.wt.devicemanager.onf14.util;
23
24 import com.google.gson.stream.JsonReader;
25 import java.io.BufferedReader;
26 import java.io.File;
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;
43
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;
51
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;
55
56 public class Onf14DomTestUtils {
57
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");
62
63     private static EffectiveModelContext schemaContext;
64     private static Inference hwContainerSchema;
65     static JSONCodecFactory lhotkaCodecFactory;
66     private static String streamAsString;
67     private static NormalizedNode transformedInput;
68
69     public static void cleanup() {
70         lhotkaCodecFactory = null;
71         schemaContext = null;
72         hwContainerSchema = null;
73     }
74
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))) {
78             String line = null;
79             while ((line = bufReader.readLine()) != null) {
80                 result.append(line);
81             }
82         }
83         return result.toString();
84     }
85
86
87     public static NormalizedNode getNormalizedNodeFromJson() throws IOException, URISyntaxException {
88         schemaContext = TestYangParserUtil.parseYangResourceDirectory("/");
89         lhotkaCodecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02.getShared(schemaContext);
90         streamAsString =
91                 loadTextFile(new File(Onf14DomTestUtils.class.getResource("/ControlConstruct-data-test.json").toURI()));
92         final JsonReader reader = new JsonReader(new StringReader(streamAsString));
93
94         NormalizationResultHolder result = new NormalizationResultHolder();
95
96         // StreamWriter which attaches NormalizedNode under parent
97         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
98
99         // JSON -> StreamWriter parser
100         try (JsonParserStream handler = JsonParserStream.create(streamWriter, lhotkaCodecFactory)) {
101             handler.parse(new JsonReader(new StringReader(streamAsString)));
102         }
103
104         // Finally build the node
105         transformedInput = result.getResult().data();
106         return transformedInput;
107     }
108
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");
115
116         /*
117          * final XMLInputFactory factory = XMLInputFactory.newInstance();
118          * XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream);
119          */
120         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
121
122         final NormalizationResultHolder result = new NormalizationResultHolder();
123         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
124
125         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, hwContainerSchema);
126         xmlParser.parse(reader);
127
128         xmlParser.flush();
129         xmlParser.close();
130
131         transformedInput = result.getResult().data();
132         return transformedInput;
133     }
134     
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");
141
142         /*
143          * final XMLInputFactory factory = XMLInputFactory.newInstance();
144          * XMLStreamReader reader = factory.createXMLStreamReader(resourceAsStream);
145          */
146         final XMLStreamReader reader = UntrustedXML.createXMLStreamReader(resourceAsStream);
147
148         final NormalizationResultHolder result = new NormalizationResultHolder();
149         final NormalizedNodeStreamWriter streamWriter = ImmutableNormalizedNodeStreamWriter.from(result);
150
151         final XmlParserStream xmlParser = XmlParserStream.create(streamWriter, hwContainerSchema);
152         xmlParser.parse(reader);
153
154         xmlParser.flush();
155         xmlParser.close();
156
157         transformedInput = result.getResult().data();
158         return transformedInput;
159     }
160
161 }