blob: 6ba2f7d165996478c96380e4ac2a3006f79267e9 [file] [log] [blame]
Gaurav Agrawal1c8f80c2016-04-12 13:30:16 +05301/*
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.yangutils.translator.tojava.utils;
18
19import java.io.IOException;
20import org.onosproject.yangutils.datamodel.YangLeavesHolder;
21import org.onosproject.yangutils.datamodel.YangNode;
22import org.onosproject.yangutils.translator.tojava.TempJavaCodeFragmentFiles;
23import org.onosproject.yangutils.translator.tojava.javamodel.JavaCodeGeneratorInfo;
24
25import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCamelCase;
26import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCaptialCase;
27import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getCurNodePackage;
28import static org.onosproject.yangutils.translator.tojava.utils.JavaIdentifierSyntax.getPackageDirPathFromJavaJPackage;
29import static org.onosproject.yangutils.utils.io.impl.YangIoUtils.getAbsolutePackagePath;
30
31/**
32 * Represents utility class for YANG java model.
33 */
34public final class YangJavaModelUtils {
35
36 /**
37 * Creates YANG java model utility.
38 */
39 private YangJavaModelUtils() {
40 }
41
42 /**
43 * Updates YANG java file package information.
44 *
45 * @param javaCodeGeneratorInfo YANG java file info node
46 * @param codeGenDir code generation directory
47 * @throws IOException IO operations fails
48 */
49 private static void updatePackageInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo, String codeGenDir)
50 throws IOException {
51 javaCodeGeneratorInfo.getJavaFileInfo()
52 .setJavaName(getCaptialCase(getCamelCase(((YangNode) javaCodeGeneratorInfo).getName())));
53 javaCodeGeneratorInfo.getJavaFileInfo().setPackage(getCurNodePackage((YangNode) javaCodeGeneratorInfo));
54 javaCodeGeneratorInfo.getJavaFileInfo().setPackageFilePath(
55 getPackageDirPathFromJavaJPackage(javaCodeGeneratorInfo.getJavaFileInfo().getPackage()));
56 javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(codeGenDir);
57 }
58
59 /**
60 * Updates YANG java file package information for specified package.
61 *
62 * @param javaCodeGeneratorInfo YANG java file info node
63 * @param codeGenDir code generation directory
64 * @throws IOException IO operations fails
65 */
66 private static void updatePackageInfo(JavaCodeGeneratorInfo javaCodeGeneratorInfo, String codeGenDir, String pkg)
67 throws IOException {
68 javaCodeGeneratorInfo.getJavaFileInfo()
69 .setJavaName(getCaptialCase(getCamelCase(((YangNode) javaCodeGeneratorInfo).getName())));
70 javaCodeGeneratorInfo.getJavaFileInfo().setPackage(pkg);
71 javaCodeGeneratorInfo.getJavaFileInfo().setPackageFilePath(
72 getPackageDirPathFromJavaJPackage(javaCodeGeneratorInfo.getJavaFileInfo().getPackage()));
73 javaCodeGeneratorInfo.getJavaFileInfo().setBaseCodeGenPath(codeGenDir);
74 }
75
76 /**
77 * Updates temporary java code fragment files.
78 *
79 * @param javaCodeGeneratorInfo YANG java file info node
80 * @throws IOException IO operations fails
81 */
82 private static void createTempFragmentFile(JavaCodeGeneratorInfo javaCodeGeneratorInfo) throws IOException {
83 String absolutePath = getAbsolutePackagePath(javaCodeGeneratorInfo.getJavaFileInfo().getBaseCodeGenPath(),
84 javaCodeGeneratorInfo.getJavaFileInfo().getPackageFilePath());
85
86 javaCodeGeneratorInfo.setTempJavaCodeFragmentFiles(
87 new TempJavaCodeFragmentFiles(javaCodeGeneratorInfo.getJavaFileInfo().getGeneratedFileTypes(),
88 absolutePath, javaCodeGeneratorInfo.getJavaFileInfo().getJavaName()));
89 }
90
91 /**
92 * Updates leaf information in temporary java code fragment files.
93 *
94 * @param javaCodeGeneratorInfo YANG java file info node
95 * @throws IOException IO operations fails
96 */
97 private static void updateLeafInfoInTempFragmentFiles(JavaCodeGeneratorInfo javaCodeGeneratorInfo)
98 throws IOException {
99
100 if (javaCodeGeneratorInfo instanceof YangLeavesHolder) {
101 javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
102 .addCurNodeLeavesInfoToTempFiles((YangNode) javaCodeGeneratorInfo);
103 } else {
104 // TODO: either write a util for ENUM and UNION or, call the
105 // corresponding implementation in ENUM and UNION
106 }
107 }
108
109 /**
110 * Process generate code entry of YANG node.
111 *
112 * @param javaCodeGeneratorInfo YANG java file info node
113 * @param codeGenDir code generation directory
114 * @throws IOException IO operations fails
115 */
116 private static void generateTempFiles(JavaCodeGeneratorInfo javaCodeGeneratorInfo, String codeGenDir)
117 throws IOException {
118 if (!(javaCodeGeneratorInfo instanceof YangNode)) {
119 // TODO:throw exception
120 }
121 createTempFragmentFile(javaCodeGeneratorInfo);
122 updateLeafInfoInTempFragmentFiles(javaCodeGeneratorInfo);
123
124 }
125
126 /**
127 * Process generate code entry of YANG node.
128 *
129 * @param javaCodeGeneratorInfo YANG java file info node
130 * @param codeGenDir code generation directory
131 * @param isMultiInstance flag to indicate whether it's a list
132 * @throws IOException IO operations fails
133 */
134 public static void generateCodeOfNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo, String codeGenDir,
135 boolean isMultiInstance) throws IOException {
136 if (!(javaCodeGeneratorInfo instanceof YangNode)) {
137 // TODO:throw exception
138 }
139 updatePackageInfo(javaCodeGeneratorInfo, codeGenDir);
140 generateTempFiles(javaCodeGeneratorInfo, codeGenDir);
141
142 javaCodeGeneratorInfo.getTempJavaCodeFragmentFiles()
143 .addCurNodeInfoInParentTempFile((YangNode) javaCodeGeneratorInfo, isMultiInstance);
144 }
145
146 /**
147 * Process generate code entry of root node.
148 *
149 * @param javaCodeGeneratorInfo YANG java file info node
150 * @param codeGenDir code generation directory
151 * @param rootPkg package of the root node
152 * @throws IOException IO operations fails
153 */
154 public static void generateCodeOfRootNode(JavaCodeGeneratorInfo javaCodeGeneratorInfo, String codeGenDir,
155 String rootPkg) throws IOException {
156 if (!(javaCodeGeneratorInfo instanceof YangNode)) {
157 // TODO:throw exception
158 }
159 updatePackageInfo(javaCodeGeneratorInfo, codeGenDir, rootPkg);
160 generateTempFiles(javaCodeGeneratorInfo, codeGenDir);
161 }
162}