Add support for EventInstantAware notifications
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / dom / adapter / BindingDOMDataTreeProducerAdapter.java
index 6cf6d02a5c16f31b7e7c2c9a307ce2bb7090e3be..7eb26ca626eb0971d9692305e6173af4cc102842 100644 (file)
@@ -7,57 +7,46 @@
  */
 package org.opendaylight.mdsal.binding.dom.adapter;
 
-import com.google.common.base.Preconditions;
 import java.util.Collection;
+import org.opendaylight.mdsal.binding.api.CursorAwareWriteTransaction;
 import org.opendaylight.mdsal.binding.api.DataTreeIdentifier;
 import org.opendaylight.mdsal.binding.api.DataTreeProducer;
 import org.opendaylight.mdsal.binding.api.DataTreeProducerException;
-import org.opendaylight.mdsal.binding.api.WriteTransaction;
+import org.opendaylight.mdsal.dom.api.DOMDataTreeCursorAwareTransaction;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeIdentifier;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducer;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerBusyException;
 import org.opendaylight.mdsal.dom.api.DOMDataTreeProducerException;
-import org.opendaylight.mdsal.dom.api.DOMDataTreeWriteTransaction;
 
-class BindingDOMDataTreeProducerAdapter implements DataTreeProducer {
+class BindingDOMDataTreeProducerAdapter extends AbstractBindingAdapter<DOMDataTreeProducer>
+        implements DataTreeProducer {
 
-    private final DOMDataTreeProducer delegate;
-    private final BindingToNormalizedNodeCodec codec;
-
-    protected BindingDOMDataTreeProducerAdapter(final DOMDataTreeProducer delegate,
-            final BindingToNormalizedNodeCodec codec) {
-        super();
-        this.delegate = Preconditions.checkNotNull(delegate);
-        this.codec = codec;
+    BindingDOMDataTreeProducerAdapter(final BindingToNormalizedNodeCodec codec, final DOMDataTreeProducer delegate) {
+        super(codec, delegate);
     }
 
     @Override
-    public WriteTransaction createTransaction(final boolean isolated) {
-        final DOMDataTreeWriteTransaction domTx = delegate.createTransaction(isolated);
-        return new BindingDOMWriteTransactionAdapter<DOMDataTreeWriteTransaction>(domTx, codec);
+    public CursorAwareWriteTransaction createTransaction(final boolean isolated) {
+        final DOMDataTreeCursorAwareTransaction domTx = getDelegate().createTransaction(isolated);
+        return new BindingDOMCursorAwareWriteTransactionAdapter<>(domTx, getCodec());
     }
 
-    static DataTreeProducer create(final DOMDataTreeProducer domProducer,
-            final BindingToNormalizedNodeCodec codec) {
-        return new BindingDOMDataTreeProducerAdapter(domProducer, codec);
+    static DataTreeProducer create(final DOMDataTreeProducer domProducer, final BindingToNormalizedNodeCodec codec) {
+        return new BindingDOMDataTreeProducerAdapter(codec, domProducer);
     }
 
     @Override
     public DataTreeProducer createProducer(final Collection<DataTreeIdentifier<?>> subtrees) {
-        final Collection<DOMDataTreeIdentifier> domSubtrees = codec.toDOMDataTreeIdentifiers(subtrees);
-        final DOMDataTreeProducer domChildProducer = delegate.createProducer(domSubtrees);
-        return BindingDOMDataTreeProducerAdapter.create(domChildProducer, codec);
+        final Collection<DOMDataTreeIdentifier> domSubtrees = getCodec().toDOMDataTreeIdentifiers(subtrees);
+        final DOMDataTreeProducer domChildProducer = getDelegate().createProducer(domSubtrees);
+        return BindingDOMDataTreeProducerAdapter.create(domChildProducer, getCodec());
     }
 
     @Override
     public void close() throws DataTreeProducerException {
         try {
-            delegate.close();
-        } catch (final DOMDataTreeProducerBusyException e) {
-            throw new DataTreeProducerException(e.getMessage(), e);
+            getDelegate().close();
         } catch (final DOMDataTreeProducerException e) {
             throw new DataTreeProducerException(e.getMessage(), e);
         }
     }
-
 }