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 / BindingDOMMountPointServiceAdapter.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 com.google.common.cache.CacheBuilder;
12 import com.google.common.cache.CacheLoader;
13 import com.google.common.cache.LoadingCache;
14 import java.util.Optional;
15 import javax.annotation.Nonnull;
16 import org.opendaylight.mdsal.binding.javav2.api.MountPoint;
17 import org.opendaylight.mdsal.binding.javav2.api.MountPointListener;
18 import org.opendaylight.mdsal.binding.javav2.api.MountPointService;
19 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
20 import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier;
21 import org.opendaylight.mdsal.dom.api.DOMMountPoint;
22 import org.opendaylight.mdsal.dom.api.DOMMountPointService;
23 import org.opendaylight.yangtools.concepts.ListenerRegistration;
24 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
25 import org.slf4j.Logger;
26 import org.slf4j.LoggerFactory;
27
28 /**
29  * Mount point service adapter.
30  */
31 @Beta
32 public class BindingDOMMountPointServiceAdapter implements MountPointService {
33
34     public static final Logger LOG = LoggerFactory.getLogger(BindingDOMMountPointServiceAdapter.class);
35
36     private final BindingToNormalizedNodeCodec codec;
37     private final DOMMountPointService mountService;
38     private final LoadingCache<DOMMountPoint, BindingMountPointAdapter> bindingMountpoints =
39             CacheBuilder.newBuilder().weakKeys().build(new CacheLoader<DOMMountPoint, BindingMountPointAdapter>() {
40
41                 @Nonnull
42                 @Override
43                 public BindingMountPointAdapter load(@Nonnull final DOMMountPoint key) throws Exception {
44                     return new BindingMountPointAdapter(codec, key);
45                 }
46             });
47
48     public BindingDOMMountPointServiceAdapter(final DOMMountPointService mountService,
49             final BindingToNormalizedNodeCodec codec) {
50         this.codec = codec;
51         this.mountService = mountService;
52     }
53
54     @Override
55     public Optional<MountPoint> getMountPoint(final InstanceIdentifier<?> mountPoint) {
56
57         final YangInstanceIdentifier domPath = codec.toYangInstanceIdentifierBlocking(mountPoint);
58         final Optional<DOMMountPoint> domMount = mountService.getMountPoint(domPath);
59         if (domMount.isPresent()) {
60             return Optional.ofNullable(bindingMountpoints.getUnchecked(domMount.get()));
61         }
62         return Optional.empty();
63     }
64
65     @Override
66     public <T extends MountPointListener> ListenerRegistration<T> registerListener(final InstanceIdentifier<?> path,
67             final T listener) {
68         return new BindingDOMMountPointListenerAdapter<>(listener, codec, mountService);
69     }
70
71 }