*/
public static WriteTransaction toWriteTransaction(final TypedWriteTransaction<? extends Datastore> datastoreTx) {
if (datastoreTx instanceof TypedWriteTransactionImpl) {
- final TypedWriteTransactionImpl<?> txImpl = (TypedWriteTransactionImpl<?>) datastoreTx;
+ final TypedWriteTransactionImpl<?, ?> txImpl = (TypedWriteTransactionImpl<?, ?>) datastoreTx;
return new WriteTransactionAdapter<>(txImpl.getDatastoreType(), txImpl);
}
throw new IllegalArgumentException("Unsupported TypedWriteTransaction implementation "
*
* @param <D> The datastore which the transaction targets.
*/
-class TypedReadTransactionImpl<D extends Datastore> extends TypedTransaction<D>
+final class TypedReadTransactionImpl<D extends Datastore> extends TypedTransaction<D, ReadTransaction>
implements TypedReadTransaction<D> {
- private final ReadTransaction delegate;
-
- TypedReadTransactionImpl(Class<D> datastoreType, ReadTransaction realTx) {
- super(datastoreType);
- this.delegate = realTx;
- }
-
- @Override
- public <T extends DataObject> FluentFuture<Optional<T>> read(InstanceIdentifier<T> path) {
- return FluentFuture.from(delegate.read(getDatastoreType(), path));
+ TypedReadTransactionImpl(final Class<D> datastoreType, final ReadTransaction realTx) {
+ super(datastoreType, realTx);
}
@Override
- public Object getIdentifier() {
- return delegate.getIdentifier();
+ public <T extends DataObject> FluentFuture<Optional<T>> read(final InstanceIdentifier<T> path) {
+ return delegate().read(getDatastoreType(), path);
}
}
* @param <D> The datastore which the transaction targets.
*/
class TypedReadWriteTransactionImpl<D extends Datastore>
- extends TypedWriteTransactionImpl<D>
+ extends TypedWriteTransactionImpl<D, ReadWriteTransaction>
implements TypedReadWriteTransaction<D> {
- // Temporarily package protected for TransactionAdapter
- final ReadWriteTransaction delegate;
-
- TypedReadWriteTransactionImpl(Class<D> datastoreType, ReadWriteTransaction realTx) {
+ TypedReadWriteTransactionImpl(final Class<D> datastoreType, final ReadWriteTransaction realTx) {
super(datastoreType, realTx);
- this.delegate = realTx;
}
@Override
- public <T extends DataObject> FluentFuture<Optional<T>> read(InstanceIdentifier<T> path) {
- return FluentFuture.from(delegate.read(getDatastoreType(), path));
+ public final <T extends DataObject> FluentFuture<Optional<T>> read(final InstanceIdentifier<T> path) {
+ return delegate().read(getDatastoreType(), path);
}
}
*/
package org.opendaylight.mdsal.binding.util;
+import org.opendaylight.mdsal.binding.api.Transaction;
+import org.opendaylight.mdsal.binding.spi.ForwardingTransaction;
import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
-abstract class TypedTransaction<D extends Datastore> {
+abstract class TypedTransaction<D extends Datastore, X extends Transaction> extends ForwardingTransaction {
private final LogicalDatastoreType datastoreType;
+ private final X delegate;
- TypedTransaction(final Class<D> datastoreType) {
+ TypedTransaction(final Class<D> datastoreType, final X delegate) {
this.datastoreType = Datastore.toType(datastoreType);
+ this.delegate = delegate;
+ }
+
+ @Override
+ protected final X delegate() {
+ return delegate;
}
final LogicalDatastoreType getDatastoreType() {
- return this.datastoreType;
+ return datastoreType;
}
}
* Implementation of {@link TypedWriteTransaction}.
*
* @param <D> The datastore which the transaction targets.
+ * @param <X> WriteTransaction type
*/
-class TypedWriteTransactionImpl<D extends Datastore> extends TypedTransaction<D>
+class TypedWriteTransactionImpl<D extends Datastore, X extends WriteTransaction> extends TypedTransaction<D, X>
implements TypedWriteTransaction<D> {
- // Temporarily package protected for TransactionAdapter
- final WriteTransaction delegate;
-
- TypedWriteTransactionImpl(final Class<D> datastoreType, final WriteTransaction realTx) {
- super(datastoreType);
- this.delegate = realTx;
+ TypedWriteTransactionImpl(final Class<D> datastoreType, final X realTx) {
+ super(datastoreType, realTx);
}
@Override
- public <T extends DataObject> void put(final InstanceIdentifier<T> path, final T data) {
- delegate.put(getDatastoreType(), path, data);
+ public final <T extends DataObject> void put(final InstanceIdentifier<T> path, final T data) {
+ delegate().put(getDatastoreType(), path, data);
+ postOperation();
}
@Override
- public <T extends DataObject> void put(final InstanceIdentifier<T> path, final T data,
+ public final <T extends DataObject> void put(final InstanceIdentifier<T> path, final T data,
final boolean createMissingParents) {
- delegate.put(getDatastoreType(), path, data, createMissingParents);
+ delegate().put(getDatastoreType(), path, data, createMissingParents);
+ postOperation();
}
@Override
- public <T extends DataObject> void merge(final InstanceIdentifier<T> path, final T data) {
- delegate.merge(getDatastoreType(), path, data);
+ public final <T extends DataObject> void merge(final InstanceIdentifier<T> path, final T data) {
+ delegate().merge(getDatastoreType(), path, data);
+ postOperation();
}
@Override
- public <T extends DataObject> void merge(final InstanceIdentifier<T> path, final T data,
+ public final <T extends DataObject> void merge(final InstanceIdentifier<T> path, final T data,
final boolean createMissingParents) {
- delegate.merge(getDatastoreType(), path, data, createMissingParents);
+ delegate().merge(getDatastoreType(), path, data, createMissingParents);
+ postOperation();
}
@Override
- public void delete(final InstanceIdentifier<?> path) {
- delegate.delete(getDatastoreType(), path);
+ public final void delete(final InstanceIdentifier<?> path) {
+ delegate().delete(getDatastoreType(), path);
+ postOperation();
}
- @Override
- public Object getIdentifier() {
- return delegate.getIdentifier();
+ void postOperation() {
+ // Defaults to no-op
}
}
package org.opendaylight.mdsal.binding.util;
import org.opendaylight.mdsal.binding.api.ReadWriteTransaction;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
/**
* Read-write typed transaction which keeps track of writes.
*/
-class WriteTrackingTypedReadWriteTransactionImpl<D extends Datastore> extends TypedReadWriteTransactionImpl<D>
+final class WriteTrackingTypedReadWriteTransactionImpl<D extends Datastore> extends TypedReadWriteTransactionImpl<D>
implements WriteTrackingTransaction {
// This is volatile to ensure we get the latest value; transactions aren't supposed to be used in multiple threads,
// but the cost here is tiny (one read penalty at the end of a transaction) so we play it safe
private volatile boolean written;
- WriteTrackingTypedReadWriteTransactionImpl(Class<D> datastoreType, ReadWriteTransaction realTx) {
+ WriteTrackingTypedReadWriteTransactionImpl(final Class<D> datastoreType, final ReadWriteTransaction realTx) {
super(datastoreType, realTx);
}
@Override
- public <T extends DataObject> void put(InstanceIdentifier<T> path, T data) {
- super.put(path, data);
- written = true;
- }
-
- @Override
- public <T extends DataObject> void put(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
- super.put(path, data, createMissingParents);
- written = true;
- }
-
- @Override
- public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data) {
- super.merge(path, data);
- written = true;
- }
-
- @Override
- public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
- super.merge(path, data, createMissingParents);
- written = true;
+ public boolean isWritten() {
+ return written;
}
@Override
- public void delete(InstanceIdentifier<?> path) {
- super.delete(path);
+ void postOperation() {
written = true;
}
-
- @Override
- public boolean isWritten() {
- return written;
- }
}
package org.opendaylight.mdsal.binding.util;
import org.opendaylight.mdsal.binding.api.WriteTransaction;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
/**
* Write typed transaction which keeps track of writes.
*/
-class WriteTrackingTypedWriteTransactionImpl<D extends Datastore> extends TypedWriteTransactionImpl<D>
- implements WriteTrackingTransaction {
+final class WriteTrackingTypedWriteTransactionImpl<D extends Datastore>
+ extends TypedWriteTransactionImpl<D, WriteTransaction> implements WriteTrackingTransaction {
// This is volatile to ensure we get the latest value; transactions aren't supposed to be used in multiple threads,
// but the cost here is tiny (one read penalty at the end of a transaction) so we play it safe
private volatile boolean written;
- WriteTrackingTypedWriteTransactionImpl(Class<D> datastoreType, WriteTransaction realTx) {
+ WriteTrackingTypedWriteTransactionImpl(final Class<D> datastoreType, final WriteTransaction realTx) {
super(datastoreType, realTx);
}
@Override
- public <T extends DataObject> void put(InstanceIdentifier<T> path, T data) {
- super.put(path, data);
- written = true;
- }
-
- @Override
- public <T extends DataObject> void put(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
- super.put(path, data, createMissingParents);
- written = true;
- }
-
- @Override
- public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data) {
- super.merge(path, data);
- written = true;
- }
-
- @Override
- public <T extends DataObject> void merge(InstanceIdentifier<T> path, T data, boolean createMissingParents) {
- super.merge(path, data, createMissingParents);
- written = true;
+ public boolean isWritten() {
+ return written;
}
@Override
- public void delete(InstanceIdentifier<?> path) {
- super.delete(path);
+ void postOperation() {
written = true;
}
-
- @Override
- public boolean isWritten() {
- return written;
- }
}