2480e8df14e39abf496a8a8fdc9cb65eb337c209
[mdsal.git] / dom / mdsal-dom-spi / src / main / java / org / opendaylight / mdsal / dom / spi / shard / CompatListenableDOMDataTreeShard.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies, s.ro. 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.dom.spi.shard;
9
10 import static com.google.common.base.Preconditions.checkArgument;
11 import static java.util.Objects.requireNonNull;
12
13 import com.google.common.collect.ForwardingObject;
14 import java.util.Collection;
15 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
16 import org.opendaylight.mdsal.dom.api.DOMDataTreeListener;
17 import org.opendaylight.mdsal.dom.api.DOMDataTreeShard;
18 import org.opendaylight.mdsal.dom.spi.store.DOMStoreTreeChangePublisher;
19 import org.opendaylight.yangtools.concepts.ListenerRegistration;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 /**
24  * Compatibility layer between {@link DOMStoreTreeChangePublisher} and {@link ListenableDOMDataTreeShard}. Required
25  * for migration purposes.
26  *
27  * @author Robert Varga
28  *
29  * @deprecated This class is scheduled for removal when we remove compatibility with dom.spi.store APIs.
30  */
31 @Deprecated(forRemoval = true)
32 public final class CompatListenableDOMDataTreeShard extends ForwardingObject implements ListenableDOMDataTreeShard {
33     private static final Logger LOG = LoggerFactory.getLogger(CompatListenableDOMDataTreeShard.class);
34
35     private final CompatDOMDataTreeListenerRegistry publisher;
36     private final DOMDataTreeShard delegate;
37
38     private CompatListenableDOMDataTreeShard(final DOMDataTreeShard delegate) {
39         this.delegate = requireNonNull(delegate);
40         checkArgument(delegate instanceof DOMStoreTreeChangePublisher);
41         this.publisher = new CompatDOMDataTreeListenerRegistry((DOMStoreTreeChangePublisher) delegate);
42     }
43
44     public static ListenableDOMDataTreeShard createIfNeeded(final DOMDataTreeShard delegate) {
45         if (delegate instanceof ListenableDOMDataTreeShard) {
46             return (ListenableDOMDataTreeShard) delegate;
47         }
48
49         LOG.debug("Using compatibility adaptor for {}", delegate);
50         return new CompatListenableDOMDataTreeShard(delegate);
51     }
52
53     @Override
54     protected DOMDataTreeShard delegate() {
55         return delegate;
56     }
57
58     @Override
59     public void onChildAttached(final DOMDataTreeIdentifier prefix, final DOMDataTreeShard child) {
60         delegate.onChildAttached(prefix, child);
61     }
62
63     @Override
64     public void onChildDetached(final DOMDataTreeIdentifier prefix, final DOMDataTreeShard child) {
65         delegate.onChildDetached(prefix, child);
66     }
67
68     @Override
69     public <L extends DOMDataTreeListener> ListenerRegistration<L> registerListener(final L listener,
70             final Collection<DOMDataTreeIdentifier> subtrees, final boolean allowRxMerges) {
71         return publisher.registerListener(listener, subtrees, allowRxMerges);
72     }
73 }