Switch to Objects.requireNonNull
[mdsal.git] / binding2 / mdsal-binding2-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / javav2 / dom / adapter / impl / data / tree / BindingDOMDataTreeProducerAdapter.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 java.util.Collection;
14 import javax.annotation.Nonnull;
15 import org.opendaylight.mdsal.binding.javav2.api.CursorAwareWriteTransaction;
16 import org.opendaylight.mdsal.binding.javav2.api.DataTreeIdentifier;
17 import org.opendaylight.mdsal.binding.javav2.api.DataTreeProducer;
18 import org.opendaylight.mdsal.binding.javav2.api.DataTreeProducerException;
19 import org.opendaylight.mdsal.binding.javav2.dom.codec.impl.BindingToNormalizedNodeCodec;
20 import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
21 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
22 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
23 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException;
24
25 /**
26  * Producer adapter.
27  */
28 @Beta
29 public final class BindingDOMDataTreeProducerAdapter implements DataTreeProducer {
30
31     private final DOMDataTreeProducer delegate;
32     private final BindingToNormalizedNodeCodec codec;
33
34     private BindingDOMDataTreeProducerAdapter(final DOMDataTreeProducer delegate,
35             final BindingToNormalizedNodeCodec codec) {
36         this.delegate = requireNonNull(delegate);
37         this.codec = codec;
38     }
39
40     /**
41      * Create instance of producer data tree.
42      *
43      * @param domProducer
44      *            - DOM producer
45      * @param codec
46      *            - codec for serialize/deserialize
47      * @return instance of producer
48      */
49     public static DataTreeProducer create(final DOMDataTreeProducer domProducer,
50             final BindingToNormalizedNodeCodec codec) {
51         return new BindingDOMDataTreeProducerAdapter(domProducer, codec);
52     }
53
54     @Nonnull
55     @Override
56     public CursorAwareWriteTransaction createTransaction(final boolean isolated) {
57         final DOMDataTreeCursorAwareTransaction domTx = delegate.createTransaction(isolated);
58         return new BindingDOMCursorAwareWriteTransactionAdapter<>(domTx, codec);
59     }
60
61     @Nonnull
62     @Override
63     public DataTreeProducer createProducer(@Nonnull final Collection<DataTreeIdentifier<?>> subtrees) {
64         final Collection<DOMDataTreeIdentifier> domSubtrees = codec.toDOMDataTreeIdentifiers(subtrees);
65         final DOMDataTreeProducer domChildProducer = delegate.createProducer(domSubtrees);
66         return BindingDOMDataTreeProducerAdapter.create(domChildProducer, codec);
67     }
68
69     @Override
70     public void close() throws DataTreeProducerException {
71         try {
72             delegate.close();
73         } catch (final DOMDataTreeProducerException e) {
74             throw new DataTreeProducerException(e.getMessage(), e);
75         }
76     }
77 }
78