2 * Copyright (c) 2022 PANTHEON.tech, s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.binding.java.api.generator;
10 import static java.util.Objects.requireNonNull;
12 import org.eclipse.jdt.annotation.NonNull;
13 import org.opendaylight.mdsal.binding.model.api.Constant;
14 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
15 import org.opendaylight.mdsal.binding.model.api.JavaTypeName;
16 import org.opendaylight.mdsal.binding.model.api.Type;
17 import org.opendaylight.yangtools.binding.lib.YangFeature;
18 import org.opendaylight.yangtools.binding.lib.contract.Naming;
19 import org.opendaylight.yangtools.yang.common.QName;
21 final class FeatureTemplate extends ClassTemplate {
22 private static final @NonNull JavaTypeName QNAME = JavaTypeName.create(QName.class);
23 private static final @NonNull JavaTypeName YANG_FEATURE = JavaTypeName.create(YangFeature.class);
25 private final @NonNull Type dataRoot;
27 FeatureTemplate(final GeneratedTransferObject genType, final Type dataRoot) {
29 this.dataRoot = requireNonNull(dataRoot);
33 protected String generateClassDeclaration(final boolean isInnerClass) {
34 final var typeName = type().getName();
36 return "@" + importedName(NONNULL_BY_DEFAULT) + '\n'
37 + "public final class " + typeName + " extends " + importedName(YANG_FEATURE) + '<' + typeName + ", "
38 + importedName(dataRoot) + '>';
42 protected String constructors() {
43 final var typeName = type().getName();
45 return "private " + typeName + "() {\n"
46 + " // Hidden on purpose\n"
50 @SuppressWarnings("checkstyle:ParameterName")
52 protected CharSequence emitConstant(final Constant c) {
53 if (!Naming.VALUE_STATIC_FIELD_NAME.equals(c.getName()) || !YangFeature.class.equals(c.getValue())) {
54 return super.emitConstant(c);
57 final var type = type();
58 final var typeName = type.getName();
60 + " * {@link " + typeName + "} singleton instance.\n"
62 + "public static final " + importedName(type) + ' ' + Naming.VALUE_STATIC_FIELD_NAME + " = new "
63 + type.getName() + "();";
67 protected String propertyMethods() {
68 final var override = importedName(OVERRIDE);
69 final var typeName = type().getName();
70 final var clazz = importedName(CLASS);
71 final var rootName = importedName(dataRoot);
73 return '@' + override + '\n'
74 + "public " + clazz + '<' + typeName + "> " + Naming.BINDING_CONTRACT_IMPLEMENTED_INTERFACE_NAME + "() {\n"
75 + " return " + typeName + ".class;\n"
78 + '@' + override + '\n'
79 + "public " + importedName(QNAME) + " qname() {\n"
80 + " return " + Naming.QNAME_STATIC_FIELD_NAME + ";\n"
83 + '@' + override + '\n'
84 + "public " + clazz + '<' + rootName + "> definingModule() {\n"
85 + " return " + rootName + ".class;\n"