blob: 9ea03f0594ebb80b09f96882f5a7e4b2c7dc5ddf [file] [log] [blame]
/*
* Copyright 2016-present Open Networking Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.onosproject.yms.app.ytb;
import org.onosproject.yms.app.ydt.YangRequestWorkBench;
import org.onosproject.yms.app.ydt.YdtExtendedBuilder;
import org.onosproject.yms.app.ydt.YdtExtendedContext;
import org.onosproject.yms.app.ysr.YangSchemaRegistry;
import org.onosproject.yms.ydt.YmsOperationType;
import java.util.List;
import static org.onosproject.yms.app.ytb.YtbUtil.emptyObjErrMsg;
import static org.onosproject.yms.ydt.YmsOperationType.NOTIFICATION;
import static org.onosproject.yms.ydt.YmsOperationType.RPC_REPLY;
/**
* Representation of YANG tree builder which generates YANG data tree from the
* class objects which are provided from the applications and return it to the
* protocol(s).
*/
public class DefaultYangTreeBuilder implements YangTreeBuilder {
private static final String OBJ_LIST = "object list";
private static final String EVENT_OBJ = "event object";
private static final String OUTPUT_OBJ = "output object";
/**
* Creates the YANG tree builder.
*/
public DefaultYangTreeBuilder() {
}
@Override
public YdtExtendedBuilder getYdtBuilderForYo(List<Object> moduleObj, String rootName,
String rootNameSpace, YmsOperationType opType,
YangSchemaRegistry registry) {
if (moduleObj == null) {
throw new YtbException(emptyObjErrMsg(OBJ_LIST));
}
YdtExtendedBuilder ydtBuilder = new YangRequestWorkBench(
rootName, rootNameSpace, opType, registry, false);
for (Object yangObj : moduleObj) {
YdtBuilderFromYo moduleBuilder = new YdtBuilderFromYo(
ydtBuilder, yangObj, registry);
moduleBuilder.getModuleNodeFromYsr(yangObj);
moduleBuilder.createYdtFromRootObject();
}
return ydtBuilder;
}
@Override
public YdtExtendedContext getYdtForNotification(Object object, String rootName,
YangSchemaRegistry registry) {
if (object == null) {
throw new YtbException(emptyObjErrMsg(EVENT_OBJ));
}
YdtExtendedBuilder extBuilder = new YangRequestWorkBench(
rootName, null, NOTIFICATION, registry, false);
YdtBuilderFromYo moduleBuilder = new YdtBuilderFromYo(
extBuilder, object, registry);
moduleBuilder.getRootNodeWithNotificationFromYsr(object);
/*
* Adds module to YDT, so that notification can further enhance the
* tree.
*/
moduleBuilder.createModuleInYdt();
moduleBuilder.createYdtFromRootObject();
return extBuilder.getRootNode();
}
@Override
public YdtExtendedBuilder getYdtForRpcResponse(Object outputObj,
YdtExtendedBuilder reqBuilder) {
if (outputObj == null) {
throw new YtbException(emptyObjErrMsg(OUTPUT_OBJ));
}
YangRequestWorkBench workBench = (YangRequestWorkBench) reqBuilder;
// Gets the logical root node from RPC request work bench.
YdtExtendedContext rootNode = workBench.getRootNode();
/*
* Creates a new work bench for RPC reply from the contents of the
* request work bench
*/
YdtExtendedBuilder ydtBuilder =
new YangRequestWorkBench(null, null, RPC_REPLY,
workBench.getYangSchemaRegistry(),
false);
YdtBuilderFromYo moduleBuilder =
new YdtBuilderFromYo(ydtBuilder, outputObj,
workBench.getYangSchemaRegistry());
// Forms YDT till RPC, so that output can further enhance the tree.
moduleBuilder.createModuleAndRpcInYdt(rootNode);
moduleBuilder.createYdtFromRootObject();
return ydtBuilder;
}
}