blob: 42125c652b84adb7db32eed0862b41af09be1545 [file] [log] [blame]
chengfan9d60b6e2016-12-01 11:06:39 +08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
chengfan9d60b6e2016-12-01 11:06:39 +08003 *
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;
chengfanfb8e9652016-12-02 10:48:24 +080032import static org.onosproject.protocol.restconf.server.utils.parser.json.ParserUtils.getJsonNameFromYdtNode;
chengfan9d60b6e2016-12-01 11:06:39 +080033import static org.onosproject.provider.te.utils.CodecTools.jsonToString;
34import static org.onosproject.provider.te.utils.CodecTools.toJson;
chengfan9d60b6e2016-12-01 11:06:39 +080035import static org.onosproject.yms.ydt.YdtContextOperationType.NONE;
chengfanfb8e9652016-12-02 10:48:24 +080036import static org.onosproject.yms.ych.YangResourceIdentifierType.URI;
chengfan9d60b6e2016-12-01 11:06:39 +080037
38
39/**
40 * JSON/YDT Codec implementation.
41 */
42public class DefaultJsonCodec implements YangDataTreeCodec {
43 private static final String RESTCONF_ROOT = "/onos/restconf";
44 private static final String DATA = "data";
45 private static final String SLASH = "/";
46
47 private final YmsService ymsService;
48
49 private final Logger log = LoggerFactory.getLogger(getClass());
50
51 public DefaultJsonCodec(YmsService service) {
52 ymsService = service;
53 }
54
55 @Override
56 public String encodeYdtToProtocolFormat(YdtBuilder builder) {
chengfanfb8e9652016-12-02 10:48:24 +080057 YdtContext context = builder.getRootNode();
58 ObjectNode jsonNode = convertYdtToJson(getJsonNameFromYdtNode(context),
chengfan9d60b6e2016-12-01 11:06:39 +080059 builder.getRootNode(),
60 ymsService.getYdtWalker());
61 return jsonToString(jsonNode);
62 }
63
64 @Override
65 public YangCompositeEncoding encodeYdtToCompositeProtocolFormat(
66 YdtBuilder builder) {
67 YdtContext rootNode = builder.getRootNode();
68 String rootName = rootNode.getName();
69 YdtContext child = rootNode.getFirstChild();
70 String name = child.getName();
71 String url = rootName + SLASH + DATA + SLASH + name;
chengfanfb8e9652016-12-02 10:48:24 +080072 String jsonRoot = getJsonNameFromYdtNode(child);
73 ObjectNode objectNode = convertYdtToJson(jsonRoot, child,
chengfan9d60b6e2016-12-01 11:06:39 +080074 ymsService.getYdtWalker());
chengfanfb8e9652016-12-02 10:48:24 +080075 String payload = jsonToString((ObjectNode) objectNode.get(jsonRoot));
chengfan9d60b6e2016-12-01 11:06:39 +080076 return new YangCompositeEncodingImpl(URI, url, payload);
77 }
78
79 @Override
80 public YdtBuilder decodeProtocolDataToYdt(String protocolData,
81 Object schemaRegistry,
82 YmsOperationType opType) {
83 // Get a new builder
84 YdtBuilder builder = ymsService.getYdtBuilder(RESTCONF_ROOT,
85 null,
86 opType,
87 schemaRegistry);
88
89 convertJsonToYdt(toJson(protocolData), builder);
90 return builder;
91 }
92
93 @Override
94 public YdtBuilder decodeCompositeProtocolDataToYdt(YangCompositeEncoding protocolData,
95 Object schemaRegistry,
96 YmsOperationType opType) {
97
98 YdtBuilder builder = ymsService.getYdtBuilder(RESTCONF_ROOT,
99 null,
100 opType,
101 schemaRegistry);
102
103 // YdtContextOperationType should be NONE for URI in QUERY_RESPONSE.
104 convertUriToYdt(protocolData.getResourceIdentifier(), builder, NONE);
105
106 // NULL/EMPTY for Resource data
107 builder.setDefaultEditOperationType(null);
108
109 // Convert the payload json body to ydt
110 convertJsonToYdt(toJson(protocolData.getResourceInformation()), builder);
111 return builder;
112 }
113}