blob: 1f5fc08993c46c7c742b821e7bfa06ce07f0853f [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.yob;
import org.onosproject.yangutils.datamodel.YangSchemaNode;
import org.onosproject.yms.app.ydt.YdtExtendedContext;
import org.onosproject.yms.app.ysr.YangSchemaRegistry;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.onosproject.yms.app.ydt.AppType.YOB;
import static org.onosproject.yms.app.yob.YobUtils.getQualifiedDefaultClass;
/**
* Represents a YANG object builder handler to process the ydt content and
* build yang object.
*/
abstract class YobHandler {
private static final Logger log = LoggerFactory.getLogger(YobHandler.class);
/**
* Creates a YANG builder object.
*
* @param curNode ydtExtendedContext is used to get
* application related information maintained
* in YDT
* @param rootNode ydtRootNode is refers to module node
* @param registry registry
*/
public void createBuilder(YdtExtendedContext curNode,
YdtExtendedContext rootNode,
YangSchemaRegistry registry) {
String setterName = null;
YangSchemaNode node = curNode.getYangSchemaNode();
while (node.getReferredSchema() != null) {
node = node.getReferredSchema();
}
String qualName = getQualifiedDefaultClass(node);
ClassLoader classLoader = YobUtils.getClassLoader(registry, qualName,
curNode, rootNode);
if (curNode != rootNode) {
setterName = node.getJavaAttributeName();
}
Object workBench = new YobWorkBench(curNode.getYangSchemaNode(), classLoader, qualName,
setterName);
curNode.addAppInfo(YOB, workBench);
}
/**
* Sets the YANG built object in corresponding parent class method.
*
* @param ydtNode ydtExtendedContext is used to get application
* related information maintained in YDT
* @param schemaRegistry YANG schema registry
*/
public void setInParent(YdtExtendedContext ydtNode,
YangSchemaRegistry schemaRegistry) {
YdtExtendedContext parentNode = (YdtExtendedContext) ydtNode.getParent();
YobWorkBench parentWorkbench = (YobWorkBench) parentNode.getAppInfo(YOB);
parentWorkbench.setObject(ydtNode, schemaRegistry);
}
/**
* Builds the object.
*
* @param ydtNode ydtExtendedContext is used to get
* application related
* information maintained in YDT
* @param ydtRootNode ydtRootNode
* @param schemaRegistry YANG schema registry
*/
public void buildObject(YdtExtendedContext ydtNode,
YdtExtendedContext ydtRootNode,
YangSchemaRegistry schemaRegistry) {
YobWorkBench yobWorkBench = (YobWorkBench) ydtNode.getAppInfo(YOB);
yobWorkBench.buildObject(ydtNode.getYdtContextOperationType(), schemaRegistry);
}
}