2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2024 Ericsson
4 * Modifications Copyright (C) 2024 OpenInfra Foundation Europe
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
21 package org.oran.smo.yangtools.parser.model.statements;
24 * Convenience base class containing a utility method for constructing java class names for
25 * type-safe statement classes.
27 * @author Mark Hollmann
29 public abstract class AbstractStatementClassSupplier implements StatementClassSupplier {
32 * Given a Java package name, a class name prefix and the name of a statement, returns the Java class
33 * representing the statement. The YANG statement name (possibly the name of an extension statement)
34 * will be translated to CamelCase.
36 @SuppressWarnings("unchecked")
37 protected static <T extends AbstractStatement> Class<T> getJavaClazzForStatement(final String javaPackage,
38 final String clazzPrefix, final String statementName) {
40 final StringBuilder sb = new StringBuilder(100);
41 sb.append(javaPackage);
43 sb.append(clazzPrefix);
44 appendStatementNameInCamelCase(sb, statementName);
47 final Class<?> forName = Class.forName(sb.toString());
48 return (Class<T>) forName;
49 } catch (final Exception ex) {
56 * Takes a statement name (which, by YANG convention, is all lowercase and contains hyphens) and converts it to
59 * "choice" -> "Choice"
60 * "belongs-to" -> "BelongsTo"
62 private static void appendStatementNameInCamelCase(final StringBuilder sb, final String statementName) {
64 boolean upperCaseNextChar = true;
65 for (int i = 0; i < statementName.length(); ++i) {
66 final char c = statementName.charAt(i);
68 upperCaseNextChar = true;
69 } else if (upperCaseNextChar) {
70 sb.append(Character.toUpperCase(c));
71 upperCaseNextChar = false;