From 7de815a866483636d621ba0953684a42c36f208e Mon Sep 17 00:00:00 2001 From: Tony Tkacik Date: Mon, 7 Jul 2014 14:39:49 +0200 Subject: [PATCH] Changed read to be type-safe in ReadTransaction Removed declaration of read method from common superinterface, which is now only marker interface for read capabilities. Defined read method in specialization of interface for Binding and DOM interfaces, which makes use of specific features of format. This change is source-code compatible and users of read method needs to update their code appropriatelly as shown in Toaster example. Change-Id: I8c783fc5f276722a5a762eea7c769c3f54a31855 Signed-off-by: Tony Tkacik --- .../md/sal/binding/api/ReadTransaction.java | 29 ++++++++++++++- .../impl/AbstractForwardedTransaction.java | 4 +- .../impl/BindingDataReadTransactionImpl.java | 4 +- .../BindingDataReadWriteTransactionImpl.java | 4 +- .../impl/BindingToNormalizedNodeCodec.java | 25 +++++++------ .../dom/BindingToDomCommitHandler.java | 7 +++- .../dom/DomToBindingCommitHandler.java | 9 ++++- .../sal/binding/util/TypeSafeDataReader.java | 20 ++++++++-- .../api/data/AsyncReadOnlyTransaction.java | 5 +-- .../common/api/data/AsyncReadTransaction.java | 37 ++++--------------- .../sal/dom/api/DOMDataReadTransaction.java | 30 +++++++++++++++ .../toaster/provider/OpendaylightToaster.java | 26 ++++++------- 12 files changed, 127 insertions(+), 73 deletions(-) diff --git a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/ReadTransaction.java b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/ReadTransaction.java index a7b5f32957..cc85d4337b 100644 --- a/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/ReadTransaction.java +++ b/opendaylight/md-sal/sal-binding-api/src/main/java/org/opendaylight/controller/md/sal/binding/api/ReadTransaction.java @@ -15,7 +15,32 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import com.google.common.base.Optional; import com.google.common.util.concurrent.ListenableFuture; +/** + * A transaction that provides read access to a logical data store. + *

+ * For more information on usage and examples, please see the documentation in {@link AsyncReadTransaction}. + */ public interface ReadTransaction extends AsyncReadTransaction, DataObject> { - @Override - ListenableFuture> read(LogicalDatastoreType store, InstanceIdentifier path); + + /** + * Reads data from the provided logical data store located at the provided path. + *

+ * If the target is a subtree, then the whole subtree is read (and will be + * accessible from the returned data object). + * + * @param store + * Logical data store from which read should occur. + * @param path + * Path which uniquely identifies subtree which client want to + * read + * @return Listenable Future which contains read result + *

+ */ + ListenableFuture> read(LogicalDatastoreType store, InstanceIdentifier path); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedTransaction.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedTransaction.java index e5e1e300c1..a6d20c5c34 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedTransaction.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/AbstractForwardedTransaction.java @@ -54,8 +54,8 @@ abstract class AbstractForwardedTransaction> doRead(final DOMDataReadTransaction readTx, - final LogicalDatastoreType store, final org.opendaylight.yangtools.yang.binding.InstanceIdentifier path) { + protected final ListenableFuture> doRead(final DOMDataReadTransaction readTx, + final LogicalDatastoreType store, final org.opendaylight.yangtools.yang.binding.InstanceIdentifier path) { return Futures.transform(readTx.read(store, codec.toNormalized(path)), codec.deserializeFunction(path)); } } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadTransactionImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadTransactionImpl.java index e71404dfa4..bb942047f2 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadTransactionImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadTransactionImpl.java @@ -25,8 +25,8 @@ class BindingDataReadTransactionImpl extends AbstractForwardedTransaction> read(final LogicalDatastoreType store, - final InstanceIdentifier path) { + public ListenableFuture> read(final LogicalDatastoreType store, + final InstanceIdentifier path) { return doRead(getDelegate(),store, path); } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadWriteTransactionImpl.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadWriteTransactionImpl.java index 5a89cc70b8..c8b9d9347a 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadWriteTransactionImpl.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingDataReadWriteTransactionImpl.java @@ -25,8 +25,8 @@ class BindingDataReadWriteTransactionImpl extends } @Override - public ListenableFuture> read(final LogicalDatastoreType store, - final InstanceIdentifier path) { + public ListenableFuture> read(final LogicalDatastoreType store, + final InstanceIdentifier path) { return doRead(getDelegate(), store, path); } } \ No newline at end of file diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java index d275c838f2..f8c1cf6b99 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/md/sal/binding/impl/BindingToNormalizedNodeCodec.java @@ -123,7 +123,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { */ public Optional> toBinding( final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized) - throws DeserializationException { + throws DeserializationException { PathArgument lastArgument = Iterables.getLast(normalized.getPathArguments()); // Used instance-identifier codec do not support serialization of last @@ -140,7 +140,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { private Optional> toBindingAugmented( final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized) - throws DeserializationException { + throws DeserializationException { Optional> potential = toBindingImpl(normalized); // Shorthand check, if codec already supports deserialization // of AugmentationIdentifier we will return @@ -190,7 +190,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { private Optional> toBindingImpl( final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized) - throws DeserializationException { + throws DeserializationException { org.opendaylight.yangtools.yang.data.api.InstanceIdentifier legacyPath; try { @@ -220,7 +220,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { private DataNormalizationOperation findNormalizationOperation( final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier normalized) - throws DataNormalizationException { + throws DataNormalizationException { DataNormalizationOperation current = legacyToNormalized.getRootOperation(); for (PathArgument arg : normalized.getPathArguments()) { current = current.getChild(arg); @@ -264,7 +264,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { public Optional, DataObject>> toBinding( final Entry> normalized) - throws DeserializationException { + throws DeserializationException { Optional> potentialPath = toBinding(normalized.getKey()); if (potentialPath.isPresent()) { InstanceIdentifier bindingPath = potentialPath.get(); @@ -378,7 +378,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { return Optional.absent(); } - private Optional findAugmentation(final Class targetType, + private Optional findAugmentation(final Class targetType, final Set augmentations) { YangModuleInfo moduleInfo; try { @@ -495,6 +495,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { if (isAugmentation(arg.getType())) { count++; } + } return count; } @@ -509,12 +510,12 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { return count; } - public Function>, Optional> deserializeFunction( - final InstanceIdentifier path) { + @SuppressWarnings({ "rawtypes", "unchecked" }) + public Function>, Optional> deserializeFunction(final InstanceIdentifier path) { return new DeserializeFunction(this, path); } - private static class DeserializeFunction implements Function>, Optional> { + private static class DeserializeFunction implements Function>, Optional> { private final BindingToNormalizedNodeCodec codec; private final InstanceIdentifier path; @@ -525,9 +526,10 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { this.path = Preconditions.checkNotNull(path, "Path must not be null"); } + @SuppressWarnings("rawtypes") @Nullable @Override - public Optional apply(@Nullable final Optional> normalizedNode) { + public Optional apply(@Nullable final Optional> normalizedNode) { if (normalizedNode.isPresent()) { final DataObject dataObject; try { @@ -548,8 +550,7 @@ public class BindingToNormalizedNodeCodec implements SchemaContextListener { /** * Returns an default object according to YANG schema for supplied path. * - * @param path - * DOM Path + * @param path DOM Path * @return Node with defaults set on. */ public NormalizedNode getDefaultNodeFor(final org.opendaylight.yangtools.yang.data.api.InstanceIdentifier path) { diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingToDomCommitHandler.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingToDomCommitHandler.java index ee0628308e..7434309387 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingToDomCommitHandler.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/BindingToDomCommitHandler.java @@ -2,6 +2,7 @@ package org.opendaylight.controller.sal.binding.impl.connect.dom; import java.util.Map; import java.util.concurrent.ConcurrentMap; + import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; import org.opendaylight.controller.md.sal.common.api.data.DataModification; import org.opendaylight.controller.sal.common.util.CommitHandlerTransactions; @@ -14,6 +15,10 @@ import org.opendaylight.yangtools.yang.data.impl.codec.BindingIndependentMapping import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @deprecated This is part of the legacy DataBrokerService + */ +@Deprecated class BindingToDomCommitHandler implements DataCommitHandler, DataObject> { @@ -34,7 +39,7 @@ class BindingToDomCommitHandler implements this.biDataService = biDataService; } - public void setMappingService(BindingIndependentMappingService mappingService) { + public void setMappingService(final BindingIndependentMappingService mappingService) { this.mappingService = mappingService; } diff --git a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DomToBindingCommitHandler.java b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DomToBindingCommitHandler.java index 395af8f487..88024b9af2 100644 --- a/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DomToBindingCommitHandler.java +++ b/opendaylight/md-sal/sal-binding-broker/src/main/java/org/opendaylight/controller/sal/binding/impl/connect/dom/DomToBindingCommitHandler.java @@ -2,6 +2,7 @@ package org.opendaylight.controller.sal.binding.impl.connect.dom; import java.util.Map; import java.util.concurrent.ConcurrentMap; + import org.opendaylight.controller.md.sal.common.api.RegistrationListener; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandler; import org.opendaylight.controller.md.sal.common.api.data.DataCommitHandlerRegistration; @@ -16,6 +17,10 @@ import org.opendaylight.yangtools.yang.data.impl.codec.DeserializationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * @deprecated This is part of the legacy DataBrokerService + */ +@Deprecated class DomToBindingCommitHandler implements // RegistrationListener, DataObject>>, // DataCommitHandler { @@ -34,11 +39,11 @@ class DomToBindingCommitHandler implements // private DataProviderService baDataService; private BindingIndependentMappingService mappingService; - public void setBindingAwareDataService(DataProviderService baDataService) { + public void setBindingAwareDataService(final DataProviderService baDataService) { this.baDataService = baDataService; } - public void setMappingService(BindingIndependentMappingService mappingService) { + public void setMappingService(final BindingIndependentMappingService mappingService) { this.mappingService = mappingService; } diff --git a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/TypeSafeDataReader.java b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/TypeSafeDataReader.java index 3df33ba377..49ac59fe95 100644 --- a/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/TypeSafeDataReader.java +++ b/opendaylight/md-sal/sal-binding-util/src/main/java/org/opendaylight/controller/md/sal/binding/util/TypeSafeDataReader.java @@ -11,6 +11,14 @@ import org.opendaylight.controller.md.sal.common.api.data.DataReader; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +/** + * + * + * @deprecated Use + * {@link org.opendaylight.controller.md.sal.binding.api.ReadTransaction#read(org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType, InstanceIdentifier)} + * instead. + */ +@Deprecated public final class TypeSafeDataReader { private final DataReader, DataObject> delegate; @@ -19,21 +27,25 @@ public final class TypeSafeDataReader { return delegate; } - public TypeSafeDataReader(DataReader, DataObject> delegate) { + public TypeSafeDataReader( + final DataReader, DataObject> delegate) { this.delegate = delegate; } @SuppressWarnings("unchecked") - public D readConfigurationData(InstanceIdentifier path) { + public D readConfigurationData( + final InstanceIdentifier path) { return (D) delegate.readConfigurationData(path); } @SuppressWarnings("unchecked") - public D readOperationalData(InstanceIdentifier path) { + public D readOperationalData( + final InstanceIdentifier path) { return (D) delegate.readOperationalData(path); } - public static TypeSafeDataReader forReader(DataReader, DataObject> delegate) { + public static TypeSafeDataReader forReader( + final DataReader, DataObject> delegate) { return new TypeSafeDataReader(delegate); } } diff --git a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadOnlyTransaction.java b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadOnlyTransaction.java index 4beb5c62e3..46c90b9756 100644 --- a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadOnlyTransaction.java +++ b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadOnlyTransaction.java @@ -10,12 +10,11 @@ package org.opendaylight.controller.md.sal.common.api.data; import org.opendaylight.yangtools.concepts.Path; /** - * Read-only transaction, which provides stable view of data - * and is {@link AutoCloseable} resource. + * Marker interface for a read-only view of the data tree. * * @see AsyncReadTransaction * -* @param

+ * @param

* Type of path (subtree identifier), which represents location in * tree * @param diff --git a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadTransaction.java b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadTransaction.java index e1cd4a712a..afa86704ff 100644 --- a/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadTransaction.java +++ b/opendaylight/md-sal/sal-common-api/src/main/java/org/opendaylight/controller/md/sal/common/api/data/AsyncReadTransaction.java @@ -9,12 +9,9 @@ package org.opendaylight.controller.md.sal.common.api.data; import org.opendaylight.yangtools.concepts.Path; -import com.google.common.base.Optional; -import com.google.common.util.concurrent.ListenableFuture; - /** * - * Provides a stateful read view of the data tree. + * Marker interface for stateful read view of the data tree. * *

* View of the data tree is a stable point-in-time snapshot of the current data tree state when @@ -47,9 +44,9 @@ import com.google.common.util.concurrent.ListenableFuture; *

* Note: example contains blocking calls on future only to illustrate * that action happened after other asynchronous action. Use of blocking call - * {@link ListenableFuture#get()} is discouraged for most uses and you should - * use - * {@link com.google.common.util.concurrent.Futures#addCallback(ListenableFuture, com.google.common.util.concurrent.FutureCallback)} + * {@link com.google.common.util.concurrent.ListenableFuture#get()} is discouraged for most + * uses and you should use + * {@link com.google.common.util.concurrent.Futures#addCallback(com.google.common.util.concurrent.ListenableFuture, com.google.common.util.concurrent.FutureCallback)} * or other functions from {@link com.google.common.util.concurrent.Futures} to * register more specific listeners. * @@ -58,30 +55,10 @@ import com.google.common.util.concurrent.ListenableFuture; * tree * @param * Type of data (payload), which represents data payload + * + * @see org.opendaylight.controller.md.sal.binding.api.ReadTransaction + * @see org.opendaylight.controller.md.sal.dom.api.DOMDataReadTransaction */ public interface AsyncReadTransaction

, D> extends AsyncTransaction { - /** - * - * Reads data from provided logical data store located at the provided path. - *

- * If the target is a subtree, then the whole subtree is read (and will be - * accessible from the returned data object). - * - * @param store - * Logical data store from which read should occur. - * @param path - * Path which uniquely identifies subtree which client want to - * read - * @return Listenable Future which contains read result - *

    - *
  • If data at supplied path exists the - * {@link ListeblaFuture#get()} returns Optional object containing - * data once read is done. - *
  • If data at supplied path does not exists the - * {@link ListenbleFuture#get()} returns {@link Optional#absent()}. - *
- */ - ListenableFuture> read(LogicalDatastoreType store, P path); - } diff --git a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataReadTransaction.java b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataReadTransaction.java index 5baa5e72d3..0d5e47faee 100644 --- a/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataReadTransaction.java +++ b/opendaylight/md-sal/sal-dom-api/src/main/java/org/opendaylight/controller/md/sal/dom/api/DOMDataReadTransaction.java @@ -8,9 +8,39 @@ package org.opendaylight.controller.md.sal.dom.api; import org.opendaylight.controller.md.sal.common.api.data.AsyncReadTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.yangtools.yang.data.api.InstanceIdentifier; import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode; +import com.google.common.base.Optional; +import com.google.common.util.concurrent.ListenableFuture; + +/** + * A transaction that provides read access to a logical data store. + *

+ * For more information on usage and examples, please see the documentation in {@link AsyncReadTransaction}. + */ public interface DOMDataReadTransaction extends AsyncReadTransaction> { + /** + * Reads data from provided logical data store located at the provided path. + *

+ * If the target is a subtree, then the whole subtree is read (and will be + * accessible from the returned data object). + * + * @param store + * Logical data store from which read should occur. + * @param path + * Path which uniquely identifies subtree which client want to + * read + * @return Listenable Future which contains read result + *

    + *
  • If data at supplied path exists the + * {@link ListeblaFuture#get()} returns Optional object containing + * data once read is done. + *
  • If data at supplied path does not exists the + * {@link ListenbleFuture#get()} returns {@link Optional#absent()}. + *
+ */ + ListenableFuture>> read(LogicalDatastoreType store,InstanceIdentifier path); } diff --git a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java index de5ddd9a75..ea2ddc9b65 100644 --- a/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java +++ b/opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java @@ -105,19 +105,19 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti ListenableFuture> future = t.commit(); Futures.addCallback( future, new FutureCallback>() { @Override - public void onSuccess( RpcResult result ) { + public void onSuccess( final RpcResult result ) { LOG.debug( "Delete Toaster commit result: " + result ); } @Override - public void onFailure( Throwable t ) { + public void onFailure( final Throwable t ) { LOG.error( "Delete of Toaster failed", t ); } } ); } } - private Toaster buildToaster( ToasterStatus status ) { + private Toaster buildToaster( final ToasterStatus status ) { // note - we are simulating a device whose manufacture and model are // fixed (embedded) into the hardware. @@ -193,20 +193,20 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti // to make toast. final ReadWriteTransaction tx = dataProvider.newReadWriteTransaction(); - ListenableFuture> readFuture = + ListenableFuture> readFuture = tx.read( LogicalDatastoreType.OPERATIONAL, TOASTER_IID ); final ListenableFuture> commitFuture = - Futures.transform( readFuture, new AsyncFunction, + Futures.transform( readFuture, new AsyncFunction, RpcResult>() { @Override public ListenableFuture> apply( - Optional toasterData ) throws Exception { + final Optional toasterData ) throws Exception { ToasterStatus toasterStatus = ToasterStatus.Up; if( toasterData.isPresent() ) { - toasterStatus = ((Toaster)toasterData.get()).getToasterStatus(); + toasterStatus = toasterData.get().getToasterStatus(); } LOG.debug( "Read toaster status: {}", toasterStatus ); @@ -242,7 +242,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti Futures.addCallback( commitFuture, new FutureCallback>() { @Override - public void onSuccess( RpcResult result ) { + public void onSuccess( final RpcResult result ) { if( result.getResult() == TransactionStatus.COMMITED ) { // OK to make toast @@ -262,7 +262,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti } @Override - public void onFailure( Throwable ex ) { + public void onFailure( final Throwable ex ) { if( ex instanceof OptimisticLockFailedException ) { // Another thread is likely trying to make toast simultaneously and updated the @@ -331,7 +331,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti Futures.addCallback( commitFuture, new FutureCallback>() { @Override - public void onSuccess( RpcResult result ) { + public void onSuccess( final RpcResult result ) { if( result.getResult() != TransactionStatus.COMMITED ) { LOG.error( "Failed to update toaster status: " + result.getErrors() ); } @@ -340,7 +340,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti } @Override - public void onFailure( Throwable t ) { + public void onFailure( final Throwable t ) { // We shouldn't get an OptimisticLockFailedException (or any ex) as no // other component should be updating the operational state. LOG.error( "Failed to update toaster status", t ); @@ -348,7 +348,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti notifyCallback( false ); } - void notifyCallback( boolean result ) { + void notifyCallback( final boolean result ) { if( resultCallback != null ) { resultCallback.apply( result ); } @@ -400,7 +400,7 @@ public class OpendaylightToaster implements ToasterService, ToasterProviderRunti setToasterStatusUp( new Function() { @Override - public Void apply( Boolean result ) { + public Void apply( final Boolean result ) { currentMakeToastTask.set( null ); -- 2.36.6