From 7a35b42a1ce86fb6c2ebbd7be6b67593437f3a08 Mon Sep 17 00:00:00 2001 From: Stephen Kitt Date: Fri, 20 Jul 2018 16:08:17 +0200 Subject: [PATCH] Add forwarding transactions to binding v2 This ports the forwarding transactions from controller. WriteTransaction::delete is removed to allow WriteTransaction to be implemented outside its package (it conflicts with AsyncWriteTransaction::delete). Change-Id: I7b8c0454b788ef1c5857c7f546005dcd0b4c12a6 Signed-off-by: Stephen Kitt --- .../binding/javav2/api/WriteTransaction.java | 3 - binding2/mdsal-binding2-spi/pom.xml | 80 +++++++++++++++++++ .../javav2/spi/ForwardingDataBroker.java | 69 ++++++++++++++++ .../javav2/spi/ForwardingReadTransaction.java | 50 ++++++++++++ .../spi/ForwardingWriteTransaction.java | 76 ++++++++++++++++++ binding2/pom.xml | 1 + common/artifacts/pom.xml | 10 +++ .../features/odl-mdsal-binding2-api/pom.xml | 4 + common/features/odl-mdsal-common/pom.xml | 4 + common/mdsal-common-util/pom.xml | 72 +++++++++++++++++ .../ForwardingAsyncReadWriteTransaction.java | 59 ++++++++++++++ common/pom.xml | 1 + 12 files changed, 426 insertions(+), 3 deletions(-) create mode 100644 binding2/mdsal-binding2-spi/pom.xml create mode 100644 binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingDataBroker.java create mode 100644 binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingReadTransaction.java create mode 100644 binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingWriteTransaction.java create mode 100644 common/mdsal-common-util/pom.xml create mode 100644 common/mdsal-common-util/src/main/java/org/opendaylight/mdsal/common/util/ForwardingAsyncReadWriteTransaction.java diff --git a/binding2/mdsal-binding2-api/src/main/java/org/opendaylight/mdsal/binding/javav2/api/WriteTransaction.java b/binding2/mdsal-binding2-api/src/main/java/org/opendaylight/mdsal/binding/javav2/api/WriteTransaction.java index 2dc6a49e31..dd89c68a42 100644 --- a/binding2/mdsal-binding2-api/src/main/java/org/opendaylight/mdsal/binding/javav2/api/WriteTransaction.java +++ b/binding2/mdsal-binding2-api/src/main/java/org/opendaylight/mdsal/binding/javav2/api/WriteTransaction.java @@ -141,9 +141,6 @@ public interface WriteTransaction extends AsyncWriteTransaction void merge(LogicalDatastoreType store, InstanceIdentifier path, T data, boolean createMissingParents); - @Override - void delete(LogicalDatastoreType store, InstanceIdentifier path); - /** * Flag value indicating that missing parents should be created. */ diff --git a/binding2/mdsal-binding2-spi/pom.xml b/binding2/mdsal-binding2-spi/pom.xml new file mode 100644 index 0000000000..79e06193a5 --- /dev/null +++ b/binding2/mdsal-binding2-spi/pom.xml @@ -0,0 +1,80 @@ + + + + 4.0.0 + + + org.opendaylight.odlparent + bundle-parent + 3.1.3 + + + + org.opendaylight.mdsal + mdsal-binding2-spi + 0.13.0-SNAPSHOT + bundle + + + + + org.opendaylight.mdsal + mdsal-artifacts + 2.5.0-SNAPSHOT + pom + import + + + org.opendaylight.yangtools + yangtools-artifacts + 2.0.7 + pom + import + + + + + + + org.opendaylight.mdsal + mdsal-binding2-api + + + org.opendaylight.mdsal + mdsal-binding2-spec + + + org.opendaylight.mdsal + mdsal-common-api + + + org.opendaylight.yangtools + concepts + + + com.google.guava + guava + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + checkstyle.violationSeverity=error + + + + + + \ No newline at end of file diff --git a/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingDataBroker.java b/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingDataBroker.java new file mode 100644 index 0000000000..bd832811e1 --- /dev/null +++ b/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingDataBroker.java @@ -0,0 +1,69 @@ +/* + * Copyright © 2017, 2018 Red Hat, Inc. and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.spi; + +import com.google.common.collect.ForwardingObject; +import java.util.Collection; +import javax.annotation.Nonnull; +import org.opendaylight.mdsal.binding.javav2.api.BindingTransactionChain; +import org.opendaylight.mdsal.binding.javav2.api.DataBroker; +import org.opendaylight.mdsal.binding.javav2.api.DataTreeIdentifier; +import org.opendaylight.mdsal.binding.javav2.api.DataTreeListener; +import org.opendaylight.mdsal.binding.javav2.api.DataTreeLoopException; +import org.opendaylight.mdsal.binding.javav2.api.DataTreeProducer; +import org.opendaylight.mdsal.binding.javav2.api.ReadTransaction; +import org.opendaylight.mdsal.binding.javav2.api.WriteTransaction; +import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier; +import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode; +import org.opendaylight.mdsal.common.api.AsyncReadWriteTransaction; +import org.opendaylight.mdsal.common.api.TransactionChainListener; +import org.opendaylight.yangtools.concepts.ListenerRegistration; + +/** + * Utility {@link DataBroker} implementation which forwards all interface method + * invocation to a delegate instance. + */ +public abstract class ForwardingDataBroker extends ForwardingObject implements DataBroker { + + @Override + protected abstract @Nonnull DataBroker delegate(); + + @Override + public ReadTransaction newReadOnlyTransaction() { + return delegate().newReadOnlyTransaction(); + } + + @Override + public AsyncReadWriteTransaction, TreeNode> newReadWriteTransaction() { + return delegate().newReadWriteTransaction(); + } + + @Override + public WriteTransaction newWriteOnlyTransaction() { + return delegate().newWriteOnlyTransaction(); + } + + @Nonnull + @Override + public ListenerRegistration registerListener(@Nonnull T listener, + @Nonnull Collection> subtrees, boolean allowRxMerges, + @Nonnull Collection producers) throws DataTreeLoopException { + return delegate().registerListener(listener, subtrees, allowRxMerges, producers); + } + + @Override + public DataTreeProducer createProducer(Collection> subtrees) { + return delegate().createProducer(subtrees); + } + + @Override + public BindingTransactionChain createTransactionChain(TransactionChainListener listener) { + return delegate().createTransactionChain(listener); + } + +} diff --git a/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingReadTransaction.java b/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingReadTransaction.java new file mode 100644 index 0000000000..7c17bb80d4 --- /dev/null +++ b/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingReadTransaction.java @@ -0,0 +1,50 @@ +/* + * Copyright © 2017, 2018 Red Hat, Inc. and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.spi; + +import com.google.common.collect.ForwardingObject; +import java.util.function.BiConsumer; +import org.opendaylight.mdsal.binding.javav2.api.ReadTransaction; +import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.mdsal.common.api.ReadFailedException; + +/** + * Utility {@link ReadTransaction} implementation which forwards all interface method + * invocation to a delegate instance. + */ +public class ForwardingReadTransaction extends ForwardingObject implements ReadTransaction { + + private final ReadTransaction delegate; + + protected ForwardingReadTransaction(ReadTransaction delegate) { + this.delegate = delegate; + } + + @Override + protected ReadTransaction delegate() { + return delegate; + } + + @Override + public void read(LogicalDatastoreType store, + org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier path, + BiConsumer callback) { + delegate.read(store, path, callback); + } + + @Override + public Object getIdentifier() { + return delegate.getIdentifier(); + } + + @Override + public void close() { + delegate.close(); + } +} diff --git a/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingWriteTransaction.java b/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingWriteTransaction.java new file mode 100644 index 0000000000..19c14592b2 --- /dev/null +++ b/binding2/mdsal-binding2-spi/src/main/java/org/opendaylight/mdsal/binding/javav2/spi/ForwardingWriteTransaction.java @@ -0,0 +1,76 @@ +/* + * Copyright © 2017, 2018 Red Hat, Inc. and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.binding.javav2.spi; + +import com.google.common.collect.ForwardingObject; +import com.google.common.util.concurrent.FluentFuture; +import org.opendaylight.mdsal.binding.javav2.api.WriteTransaction; +import org.opendaylight.mdsal.binding.javav2.spec.base.InstanceIdentifier; +import org.opendaylight.mdsal.binding.javav2.spec.base.TreeNode; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; + +/** + * Utility {@link WriteTransaction} implementation which forwards all interface method + * invocation to a delegate instance. + */ +public class ForwardingWriteTransaction extends ForwardingObject implements WriteTransaction { + + private final WriteTransaction delegate; + + protected ForwardingWriteTransaction(WriteTransaction delegate) { + this.delegate = delegate; + } + + @Override + protected WriteTransaction delegate() { + return delegate; + } + + @Override + public void put(LogicalDatastoreType store, InstanceIdentifier path, T data) { + delegate.put(store, path, data); + } + + @Override + public void put(LogicalDatastoreType store, InstanceIdentifier path, T data, + boolean createMissingParents) { + put(store, path, data, createMissingParents); + } + + @Override + public void merge(LogicalDatastoreType store, InstanceIdentifier path, T data) { + delegate.merge(store, path, data); + } + + @Override + public void merge(LogicalDatastoreType store, InstanceIdentifier path, T data, + boolean createMissingParents) { + delegate.merge(store, path, data, createMissingParents); + } + + @Override + public void delete(LogicalDatastoreType store, InstanceIdentifier path) { + delegate.delete(store, path); + } + + @Override + public boolean cancel() { + return delegate.cancel(); + } + + @Override + public FluentFuture commit() { + return delegate.commit(); + } + + @Override + public Object getIdentifier() { + return delegate.getIdentifier(); + } +} diff --git a/binding2/pom.xml b/binding2/pom.xml index 15c5df0ab4..48608e7fb7 100644 --- a/binding2/pom.xml +++ b/binding2/pom.xml @@ -40,6 +40,7 @@ mdsal-binding2-runtime mdsal-binding2-dom-codec mdsal-binding2-dom-adapter + mdsal-binding2-spi mdsal-binding2-util diff --git a/common/artifacts/pom.xml b/common/artifacts/pom.xml index 627656646b..4e8bde0e58 100644 --- a/common/artifacts/pom.xml +++ b/common/artifacts/pom.xml @@ -39,6 +39,11 @@ mdsal-common-api ${project.version} + + org.opendaylight.mdsal + mdsal-common-util + ${project.version} + org.opendaylight.mdsal @@ -185,6 +190,11 @@ mdsal-binding2-dom-adapter 0.13.0-SNAPSHOT + + org.opendaylight.mdsal + mdsal-binding2-spi + 0.13.0-SNAPSHOT + org.opendaylight.mdsal mdsal-binding2-test-model diff --git a/common/features/odl-mdsal-binding2-api/pom.xml b/common/features/odl-mdsal-binding2-api/pom.xml index fca631c9a1..a477bbf781 100644 --- a/common/features/odl-mdsal-binding2-api/pom.xml +++ b/common/features/odl-mdsal-binding2-api/pom.xml @@ -65,6 +65,10 @@ ${project.groupId} mdsal-binding2-api + + ${project.groupId} + mdsal-binding2-spi + ${project.groupId} mdsal-binding2-util diff --git a/common/features/odl-mdsal-common/pom.xml b/common/features/odl-mdsal-common/pom.xml index 77713a8b46..0e1d7c385c 100644 --- a/common/features/odl-mdsal-common/pom.xml +++ b/common/features/odl-mdsal-common/pom.xml @@ -53,5 +53,9 @@ ${project.groupId} mdsal-common-api + + ${project.groupId} + mdsal-common-util + diff --git a/common/mdsal-common-util/pom.xml b/common/mdsal-common-util/pom.xml new file mode 100644 index 0000000000..d73a0c524f --- /dev/null +++ b/common/mdsal-common-util/pom.xml @@ -0,0 +1,72 @@ + + + + 4.0.0 + + + org.opendaylight.odlparent + bundle-parent + 3.1.3 + + + + org.opendaylight.mdsal + mdsal-common-util + 2.5.0-SNAPSHOT + bundle + + + + + org.opendaylight.mdsal + mdsal-artifacts + 2.5.0-SNAPSHOT + pom + import + + + org.opendaylight.yangtools + yangtools-artifacts + 2.0.7 + pom + import + + + + + + + org.opendaylight.mdsal + mdsal-common-api + + + org.opendaylight.yangtools + concepts + + + com.google.guava + guava + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + checkstyle.violationSeverity=error + + + + + + \ No newline at end of file diff --git a/common/mdsal-common-util/src/main/java/org/opendaylight/mdsal/common/util/ForwardingAsyncReadWriteTransaction.java b/common/mdsal-common-util/src/main/java/org/opendaylight/mdsal/common/util/ForwardingAsyncReadWriteTransaction.java new file mode 100644 index 0000000000..c39aa0c616 --- /dev/null +++ b/common/mdsal-common-util/src/main/java/org/opendaylight/mdsal/common/util/ForwardingAsyncReadWriteTransaction.java @@ -0,0 +1,59 @@ +/* + * Copyright © 2017, 2018 Red Hat, Inc. and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.mdsal.common.util; + +import com.google.common.collect.ForwardingObject; +import com.google.common.util.concurrent.FluentFuture; +import org.opendaylight.mdsal.common.api.AsyncReadWriteTransaction; +import org.opendaylight.mdsal.common.api.CommitInfo; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.yangtools.concepts.Path; + +/** + * Utility {@link AsyncReadWriteTransaction} implementation which forwards all interface method + * invocation to a delegate instance. + */ +public class ForwardingAsyncReadWriteTransaction

, D> extends ForwardingObject + implements AsyncReadWriteTransaction { + + private final AsyncReadWriteTransaction delegate; + + protected ForwardingAsyncReadWriteTransaction(AsyncReadWriteTransaction delegate) { + this.delegate = delegate; + } + + @Override + protected AsyncReadWriteTransaction delegate() { + return delegate; + } + + @Override + public Object getIdentifier() { + return delegate.getIdentifier(); + } + + @Override + public boolean cancel() { + return delegate.cancel(); + } + + @Override + public FluentFuture commit() { + return delegate.commit(); + } + + @Override + public void delete(LogicalDatastoreType store, P path) { + delegate.delete(store, path); + } + + @Override + public void close() { + delegate.close(); + } +} diff --git a/common/pom.xml b/common/pom.xml index a3c1e37f68..fac6bdc88a 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -35,5 +35,6 @@ artifacts features mdsal-common-api + mdsal-common-util -- 2.36.6