blob: c8b5baec3de64f697e605e3fe5530611cc5ab91f [file] [log] [blame]
chengfan9d60b6e2016-12-01 11:06:39 +08001/*
2 * Copyright 2016-present Open Networking Laboratory
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.provider.te.utils;
18
19import com.fasterxml.jackson.databind.node.ObjectNode;
20import org.onosproject.yms.ych.YangCompositeEncoding;
21import org.onosproject.yms.ych.YangDataTreeCodec;
22import org.onosproject.yms.ydt.YdtBuilder;
23import org.onosproject.yms.ydt.YdtContext;
24import org.onosproject.yms.ydt.YmsOperationType;
25import org.onosproject.yms.ymsm.YmsService;
26import org.slf4j.Logger;
27import org.slf4j.LoggerFactory;
28
29import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.convertJsonToYdt;
30import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.convertUriToYdt;
31import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.convertYdtToJson;
32import static org.onosproject.provider.te.utils.CodecTools.jsonToString;
33import static org.onosproject.provider.te.utils.CodecTools.toJson;
34import static org.onosproject.yms.ych.YangResourceIdentifierType.URI;
35import static org.onosproject.yms.ydt.YdtContextOperationType.NONE;
36
37
38/**
39 * JSON/YDT Codec implementation.
40 */
41public class DefaultJsonCodec implements YangDataTreeCodec {
42 private static final String RESTCONF_ROOT = "/onos/restconf";
43 private static final String DATA = "data";
44 private static final String SLASH = "/";
45
46 private final YmsService ymsService;
47
48 private final Logger log = LoggerFactory.getLogger(getClass());
49
50 public DefaultJsonCodec(YmsService service) {
51 ymsService = service;
52 }
53
54 @Override
55 public String encodeYdtToProtocolFormat(YdtBuilder builder) {
56 ObjectNode jsonNode = convertYdtToJson(builder.getRootNode().getName(),
57 builder.getRootNode(),
58 ymsService.getYdtWalker());
59 return jsonToString(jsonNode);
60 }
61
62 @Override
63 public YangCompositeEncoding encodeYdtToCompositeProtocolFormat(
64 YdtBuilder builder) {
65 YdtContext rootNode = builder.getRootNode();
66 String rootName = rootNode.getName();
67 YdtContext child = rootNode.getFirstChild();
68 String name = child.getName();
69 String url = rootName + SLASH + DATA + SLASH + name;
70 ObjectNode objectNode = convertYdtToJson(name, child,
71 ymsService.getYdtWalker());
72 String payload = jsonToString((ObjectNode) objectNode.get(name));
73 return new YangCompositeEncodingImpl(URI, url, payload);
74 }
75
76 @Override
77 public YdtBuilder decodeProtocolDataToYdt(String protocolData,
78 Object schemaRegistry,
79 YmsOperationType opType) {
80 // Get a new builder
81 YdtBuilder builder = ymsService.getYdtBuilder(RESTCONF_ROOT,
82 null,
83 opType,
84 schemaRegistry);
85
86 convertJsonToYdt(toJson(protocolData), builder);
87 return builder;
88 }
89
90 @Override
91 public YdtBuilder decodeCompositeProtocolDataToYdt(YangCompositeEncoding protocolData,
92 Object schemaRegistry,
93 YmsOperationType opType) {
94
95 YdtBuilder builder = ymsService.getYdtBuilder(RESTCONF_ROOT,
96 null,
97 opType,
98 schemaRegistry);
99
100 // YdtContextOperationType should be NONE for URI in QUERY_RESPONSE.
101 convertUriToYdt(protocolData.getResourceIdentifier(), builder, NONE);
102
103 // NULL/EMPTY for Resource data
104 builder.setDefaultEditOperationType(null);
105
106 // Convert the payload json body to ydt
107 convertJsonToYdt(toJson(protocolData.getResourceInformation()), builder);
108 return builder;
109 }
110}