Mass-migrate to java.util.Optional
[mdsal.git] / binding2 / mdsal-binding2-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / javav2 / dom / adapter / impl / mountpoint / BindingDOMMountPointListenerAdapter.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.binding.javav2.dom.adapter.impl.mountpoint;
9
10 import com.google.common.annotations.Beta;
11 import java.util.Optional;
12 import javax.annotation.Nonnull;
13 import org.opendaylight.mdsal.binding.javav2.api.MountPointListener;
14 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
15 import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
16 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
17 import org.opendaylight.mdsal.dom.api.DOMMountPointListener;
18 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
19 import org.opendaylight.yangtools.concepts.ListenerRegistration;
20 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
21 import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException;
22
23 /**
24  * Mount point listener adapter.
25  *
26  * @param <T>
27  *            - {@link MountPointListener} type
28  */
29 @Beta
30 public final class BindingDOMMountPointListenerAdapter<T extends MountPointListener>
31         implements ListenerRegistration<T>, DOMMountPointListener {
32
33     private final T listener;
34     private final ListenerRegistration<DOMMountPointListener> registration;
35     private final BindingToNormalizedNodeCodec codec;
36
37     public BindingDOMMountPointListenerAdapter(final T listener, final BindingToNormalizedNodeCodec codec,
38             final DOMMountPointService mountService) {
39         this.listener = listener;
40         this.codec = codec;
41         this.registration = mountService.registerProvisionListener(this);
42     }
43
44     @Nonnull
45     @Override
46     public T getInstance() {
47         return listener;
48     }
49
50     @Override
51     public void close() {
52         registration.close();
53     }
54
55     @Override
56     public void onMountPointCreated(final YangInstanceIdentifier path) {
57         try {
58             final InstanceIdentifier<? extends TreeNode> bindingPath = toBinding(path);
59             listener.onMountPointCreated(bindingPath);
60         } catch (final DeserializationException e) {
61             BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}." + " Omitting event.",
62                     path, e);
63         }
64     }
65
66     private InstanceIdentifier<? extends TreeNode> toBinding(final YangInstanceIdentifier path)
67             throws DeserializationException {
68         final Optional<InstanceIdentifier<? extends TreeNode>> instanceIdentifierOptional = codec.toBinding(path);
69         if (instanceIdentifierOptional.isPresent()) {
70             return instanceIdentifierOptional.get();
71         } else {
72             throw new DeserializationException("Deserialization unsuccessful, " + instanceIdentifierOptional);
73         }
74     }
75
76     @Override
77     public void onMountPointRemoved(final YangInstanceIdentifier path) {
78         try {
79             final InstanceIdentifier<? extends TreeNode> bindingPath = toBinding(path);
80             listener.onMountPointRemoved(bindingPath);
81         } catch (final DeserializationException e) {
82             BindingDOMMountPointServiceAdapter.LOG.error("Unable to translate mountPoint path {}." + " Omitting event.",
83                     path, e);
84         }
85     }
86 }