Switch to Objects.requireNonNull
[mdsal.git] / binding2 / mdsal-binding2-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / javav2 / dom / adapter / impl / data / tree / BindingDOMDataTreeCommitCohortRegistryAdapter.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.data.tree;
9
10 import static java.util.Objects.requireNonNull;
11
12 import com.google.common.annotations.Beta;
13 import javax.annotation.Nonnull;
14 import org.opendaylight.mdsal.binding.javav2.api.DataTreeCommitCohort;
15 import org.opendaylight.mdsal.binding.javav2.api.DataTreeCommitCohortRegistry;
16 import org.opendaylight.mdsal.binding.javav2.api.DataTreeIdentifier;
17 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
18 import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode;
19 import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistration;
20 import org.opendaylight.mdsal.dom.api.DOMDataTreeCommitCohortRegistry;
21 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
22 import org.opendaylight.yangtools.concepts.ObjectRegistration;
23
24 /**
25  * Data tree commit cohort registry adapter.
26  */
27 @Beta
28 public final class BindingDOMDataTreeCommitCohortRegistryAdapter implements DataTreeCommitCohortRegistry {
29
30     private final BindingToNormalizedNodeCodec codec;
31     private final DOMDataTreeCommitCohortRegistry registry;
32
33     private BindingDOMDataTreeCommitCohortRegistryAdapter(final BindingToNormalizedNodeCodec codec,
34             final DOMDataTreeCommitCohortRegistry registry) {
35         this.codec = requireNonNull(codec);
36         this.registry = requireNonNull(registry);
37     }
38
39     /**
40      * Create instance of registry of commit cohort.
41      *
42      * @param codec
43      *            - codec for serialize/deserialize
44      * @param registry
45      *            - dom registry
46      * @return binding registry
47      */
48     public static DataTreeCommitCohortRegistry from(final BindingToNormalizedNodeCodec codec,
49             final DOMDataTreeCommitCohortRegistry registry) {
50         return new BindingDOMDataTreeCommitCohortRegistryAdapter(codec, registry);
51     }
52
53     @Override
54     public <D extends TreeNode, T extends DataTreeCommitCohort<D>> ObjectRegistration<T>
55             registerCommitCohort(final DataTreeIdentifier<D> subtree, final T cohort) {
56         final BindingDOMDataTreeCommitCohortAdapter<D> adapter =
57                 new BindingDOMDataTreeCommitCohortAdapter<>(codec, cohort);
58         final DOMDataTreeIdentifier domPath = codec.toDOMDataTreeIdentifier(subtree);
59         final DOMDataTreeCommitCohortRegistration<?> domReg = registry.registerCommitCohort(domPath, adapter);
60         return new ObjectRegistration<T>() {
61
62             @Nonnull
63             @Override
64             public T getInstance() {
65                 return cohort;
66             }
67
68             @Override
69             public void close() {
70                 domReg.close();
71             }
72         };
73     }
74 }