2 * Copyright (c) 2021 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.generator.impl.reactor;
10 import static com.google.common.base.Verify.verify;
11 import static java.util.Objects.requireNonNull;
13 import java.util.List;
14 import org.opendaylight.mdsal.binding.model.api.AccessModifier;
15 import org.opendaylight.mdsal.binding.model.api.GeneratedType;
16 import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
17 import org.opendaylight.mdsal.binding.model.api.type.builder.MethodSignatureBuilder;
18 import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
19 import org.opendaylight.mdsal.binding.model.ri.Types;
20 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
21 import org.opendaylight.yangtools.yang.model.api.DocumentedNode.WithStatus;
22 import org.opendaylight.yangtools.yang.model.api.Status;
23 import org.opendaylight.yangtools.yang.model.api.stmt.NotificationEffectiveStatement;
25 final class NotificationServiceGenerator extends AbstractImplicitGenerator {
26 private final List<NotificationGenerator> notifs;
28 NotificationServiceGenerator(final ModuleGenerator parent, final List<NotificationGenerator> notifs) {
30 this.notifs = requireNonNull(notifs);
34 String classSuffix() {
35 return BindingMapping.NOTIFICATION_LISTENER_SUFFIX;
39 GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
40 final GeneratedTypeBuilder builder = builderFactory.newGeneratedTypeBuilder(typeName());
41 builder.addImplementsType(BindingTypes.NOTIFICATION_LISTENER);
43 for (NotificationGenerator gen : notifs) {
44 final MethodSignatureBuilder notificationMethod = builder.addMethod("on" + gen.assignedName())
45 .setAccessModifier(AccessModifier.PUBLIC)
46 .addParameter(gen.getGeneratedType(builderFactory), "notification")
47 .setReturnType(Types.primitiveVoidType());
49 final NotificationEffectiveStatement stmt = gen.statement();
50 verify(stmt instanceof WithStatus, "Unexpected statement %s", stmt);
51 final WithStatus withStatus = (WithStatus) stmt;
53 annotateDeprecatedIfNecessary(withStatus, notificationMethod);
54 if (withStatus.getStatus() == Status.OBSOLETE) {
55 notificationMethod.setDefault(true);
58 // FIXME: finish this up
59 // addComment(notificationMethod, notification);
62 return builder.build();