Fix checkstyle/findbugs violations in the toaster sample 07/57007/3
authorTom Pantelis <tompantelis@gmail.com>
Sun, 14 May 2017 11:34:12 +0000 (07:34 -0400)
committerStephen Kitt <skitt@redhat.com>
Mon, 15 May 2017 08:26:27 +0000 (08:26 +0000)
Also enable enforcement.

Change-Id: I25a6b036be4735abffd6b6d4e0b8ed9add637a95
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
opendaylight/md-sal/samples/toaster-consumer/pom.xml
opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/api/KitchenService.java
opendaylight/md-sal/samples/toaster-consumer/src/main/java/org/opendaylight/controller/sample/kitchen/impl/KitchenServiceImpl.java
opendaylight/md-sal/samples/toaster-provider/pom.xml
opendaylight/md-sal/samples/toaster-provider/src/main/java/org/opendaylight/controller/sample/toaster/provider/OpendaylightToaster.java
opendaylight/md-sal/samples/toaster-provider/src/main/resources/org/opendaylight/blueprint/toaster-provider.xml
opendaylight/md-sal/samples/toaster-provider/src/test/java/org/opendaylight/controller/sample/toaster/provider/OpenDaylightToasterTest.java

index 50b5253891e657ee406f5c422d87cbb4d83c8ef2..0df3a90fa40cd6397e0794e6aeacdd28be13e7d5 100644 (file)
     </dependency>
   </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+         <groupId>org.apache.maven.plugins</groupId>
+         <artifactId>maven-checkstyle-plugin</artifactId>
+         <configuration>
+           <propertyExpansion>checkstyle.violationSeverity=error</propertyExpansion>
+         </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>findbugs-maven-plugin</artifactId>
+        <configuration>
+          <failOnError>true</failOnError>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
   <scm>
     <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
     <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
index 469a0068a299a21d31be0df483b04b7294de6b56..b4c621797987a5e14da6b24cc238185f708d355f 100644 (file)
@@ -9,11 +9,9 @@
 package org.opendaylight.controller.sample.kitchen.api;
 
 import java.util.concurrent.Future;
-
 import org.opendaylight.yang.gen.v1.http.netconfcentral.org.ns.toaster.rev091120.ToastType;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public interface KitchenService {
-    Future<RpcResult<Void>> makeBreakfast( EggsType eggs, Class<? extends ToastType> toast,
-                                           int toastDoneness );
+    Future<RpcResult<Void>> makeBreakfast(EggsType eggs, Class<? extends ToastType> toast, int toastDoneness);
 }
index 55bb9e426707684a302fb4275d475aaa5f1767cd..0583368c20f97e7601dbbf0c0b37f720116636b2 100644 (file)
@@ -17,7 +17,6 @@ import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 import java.util.List;
-import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
@@ -43,12 +42,11 @@ import org.slf4j.LoggerFactory;
 public class KitchenServiceImpl extends AbstractMXBean
         implements KitchenService, KitchenServiceRuntimeMXBean, ToasterListener {
 
-    private static final Logger log = LoggerFactory.getLogger( KitchenServiceImpl.class );
+    private static final Logger LOG = LoggerFactory.getLogger(KitchenServiceImpl.class);
 
     private final ToasterService toaster;
 
-    private final ListeningExecutorService executor =
-                                   MoreExecutors.listeningDecorator( Executors.newCachedThreadPool() );
+    private final ListeningExecutorService executor = MoreExecutors.listeningDecorator(Executors.newCachedThreadPool());
 
     private volatile boolean toasterOutOfBread;
 
@@ -58,98 +56,77 @@ public class KitchenServiceImpl extends AbstractMXBean
     }
 
     @Override
-    public Future<RpcResult<Void>> makeBreakfast( EggsType eggsType, Class<? extends ToastType> toastType,
-                                                  int toastDoneness ) {
+    public Future<RpcResult<Void>> makeBreakfast(EggsType eggsType, Class<? extends ToastType> toastType,
+            int toastDoneness) {
+        // Call makeToast and use JdkFutureAdapters to convert the Future to a ListenableFuture, The
+        // OpendaylightToaster impl already returns a ListenableFuture so the conversion is actually a no-op.
 
-        // Call makeToast and use JdkFutureAdapters to convert the Future to a ListenableFuture,
-        // The OpendaylightToaster impl already returns a ListenableFuture so the conversion is
-        // actually a no-op.
+        ListenableFuture<RpcResult<Void>> makeToastFuture = JdkFutureAdapters
+                .listenInPoolThread(makeToast(toastType, toastDoneness), executor);
 
-        ListenableFuture<RpcResult<Void>> makeToastFuture = JdkFutureAdapters.listenInPoolThread(
-                makeToast( toastType, toastDoneness ), executor );
+        ListenableFuture<RpcResult<Void>> makeEggsFuture = makeEggs(eggsType);
 
-        ListenableFuture<RpcResult<Void>> makeEggsFuture = makeEggs( eggsType );
+        // Combine the 2 ListenableFutures into 1 containing a list RpcResults.
 
-        // Combine the 2 ListenableFutures into 1 containing a list of RpcResults.
-
-        ListenableFuture<List<RpcResult<Void>>> combinedFutures =
-                Futures.allAsList( ImmutableList.of( makeToastFuture, makeEggsFuture ) );
+        ListenableFuture<List<RpcResult<Void>>> combinedFutures = Futures
+                .allAsList(ImmutableList.of(makeToastFuture, makeEggsFuture));
 
         // Then transform the RpcResults into 1.
 
-        return Futures.transform( combinedFutures,
-            new AsyncFunction<List<RpcResult<Void>>,RpcResult<Void>>() {
-                @Override
-                public ListenableFuture<RpcResult<Void>> apply( List<RpcResult<Void>> results )
-                                                                                 throws Exception {
-                    boolean atLeastOneSucceeded = false;
-                    Builder<RpcError> errorList = ImmutableList.builder();
-                    for( RpcResult<Void> result: results ) {
-                        if( result.isSuccessful() ) {
-                            atLeastOneSucceeded = true;
-                        }
-
-                        if( result.getErrors() != null ) {
-                            errorList.addAll( result.getErrors() );
-                        }
+        return Futures.transform(combinedFutures,
+            (AsyncFunction<List<RpcResult<Void>>, RpcResult<Void>>) results -> {
+                boolean atLeastOneSucceeded = false;
+                Builder<RpcError> errorList = ImmutableList.builder();
+                for (RpcResult<Void> result : results) {
+                    if (result.isSuccessful()) {
+                        atLeastOneSucceeded = true;
                     }
 
-                    return Futures.immediateFuture(
-                              RpcResultBuilder.<Void> status( atLeastOneSucceeded )
-                                              .withRpcErrors( errorList.build() ).build() );
+                    if (result.getErrors() != null) {
+                        errorList.addAll(result.getErrors());
+                    }
                 }
-        } );
-    }
-
-    private ListenableFuture<RpcResult<Void>> makeEggs( EggsType eggsType ) {
 
-        return executor.submit( new Callable<RpcResult<Void>>() {
-
-            @Override
-            public RpcResult<Void> call() throws Exception {
+                return Futures.immediateFuture(RpcResultBuilder.<Void>status(atLeastOneSucceeded)
+                        .withRpcErrors(errorList.build()).build());
+            });
+    }
 
-                // We don't actually do anything here - just return a successful result.
-                return RpcResultBuilder.<Void> success().build();
-            }
-        } );
+    private ListenableFuture<RpcResult<Void>> makeEggs(EggsType eggsType) {
+        return executor.submit(() -> RpcResultBuilder.<Void>success().build());
     }
 
-    private Future<RpcResult<Void>> makeToast( Class<? extends ToastType> toastType,
-                                               int toastDoneness ) {
+    private Future<RpcResult<Void>> makeToast(Class<? extends ToastType> toastType, int toastDoneness) {
 
-        if( toasterOutOfBread )
-        {
-            log.info( "We're out of toast but we can make eggs" );
-            return Futures.immediateFuture( RpcResultBuilder.<Void> success()
-                     .withWarning( ErrorType.APPLICATION, "partial-operation",
-                                      "Toaster is out of bread but we can make you eggs" ).build() );
+        if (toasterOutOfBread) {
+            LOG.info("We're out of toast but we can make eggs");
+            return Futures.immediateFuture(RpcResultBuilder.<Void>success().withWarning(ErrorType.APPLICATION,
+                    "partial-operation", "Toaster is out of bread but we can make you eggs").build());
         }
 
         // Access the ToasterService to make the toast.
 
-        MakeToastInput toastInput = new MakeToastInputBuilder()
-            .setToasterDoneness( (long) toastDoneness )
-            .setToasterToastType( toastType )
-            .build();
+        MakeToastInput toastInput = new MakeToastInputBuilder().setToasterDoneness((long) toastDoneness)
+                .setToasterToastType(toastType).build();
 
-        return toaster.makeToast( toastInput );
+        return toaster.makeToast(toastInput);
     }
 
     @Override
     public Boolean makeScrambledWithWheat() {
         try {
             // This call has to block since we must return a result to the JMX client.
-            RpcResult<Void> result = makeBreakfast( EggsType.SCRAMBLED, WheatBread.class, 2 ).get();
-            if( result.isSuccessful() ) {
-                log.info( "makeBreakfast succeeded" );
+            RpcResult<Void> result = makeBreakfast(EggsType.SCRAMBLED, WheatBread.class, 2).get();
+            if (result.isSuccessful()) {
+                LOG.info("makeBreakfast succeeded");
             } else {
-                log.warn( "makeBreakfast failed: " + result.getErrors() );
+                LOG.warn("makeBreakfast failed: " + result.getErrors());
             }
 
             return result.isSuccessful();
 
-        } catch( InterruptedException | ExecutionException e ) {
-            log.warn( "An error occurred while maing breakfast: " + e );
+        } catch (InterruptedException | ExecutionException e) {
+            LOG.warn("An error occurred while maing breakfast: " + e);
         }
 
         return Boolean.FALSE;
@@ -159,8 +136,8 @@ public class KitchenServiceImpl extends AbstractMXBean
      * Implemented from the ToasterListener interface.
      */
     @Override
-    public void onToasterOutOfBread( ToasterOutOfBread notification ) {
-        log.info( "ToasterOutOfBread notification" );
+    public void onToasterOutOfBread(ToasterOutOfBread notification) {
+        LOG.info("ToasterOutOfBread notification");
         toasterOutOfBread = true;
     }
 
@@ -168,8 +145,8 @@ public class KitchenServiceImpl extends AbstractMXBean
      * Implemented from the ToasterListener interface.
      */
     @Override
-    public void onToasterRestocked( ToasterRestocked notification ) {
-        log.info( "ToasterRestocked notification - amountOfBread: " + notification.getAmountOfBread() );
+    public void onToasterRestocked(ToasterRestocked notification) {
+        LOG.info("ToasterRestocked notification - amountOfBread: " + notification.getAmountOfBread());
         toasterOutOfBread = false;
     }
 }
index 247105ba9975e72d3c2a7c7c1144ea72c2ce1ebb..85737db3153037fbeb9ee353ec3a9962a7447721 100644 (file)
     </dependency>
   </dependencies>
 
+  <build>
+    <plugins>
+      <plugin>
+         <groupId>org.apache.maven.plugins</groupId>
+         <artifactId>maven-checkstyle-plugin</artifactId>
+         <configuration>
+           <propertyExpansion>checkstyle.violationSeverity=error</propertyExpansion>
+         </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>findbugs-maven-plugin</artifactId>
+        <configuration>
+          <failOnError>true</failOnError>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
   <scm>
     <connection>scm:git:http://git.opendaylight.org/gerrit/controller.git</connection>
     <developerConnection>scm:git:ssh://git.opendaylight.org:29418/controller.git</developerConnection>
index b876fa2cd3ac15fe21f5dfb84650371d7eebb64d..a7c9a7818535151b87db7d7f30193ebce6811c10 100644 (file)
@@ -7,11 +7,11 @@
  */
 package org.opendaylight.controller.sample.toaster.provider;
 
+import static org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType.DELETE;
+import static org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType.WRITE;
 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.CONFIGURATION;
 import static org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType.OPERATIONAL;
 import static org.opendaylight.yangtools.yang.common.RpcError.ErrorType.APPLICATION;
-import static org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType.DELETE;
-import static org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType.WRITE;
 
 import com.google.common.base.Function;
 import com.google.common.base.Optional;
@@ -69,7 +69,7 @@ public class OpendaylightToaster extends AbstractMXBean
     private static final DisplayString TOASTER_MANUFACTURER = new DisplayString("Opendaylight");
     private static final DisplayString TOASTER_MODEL_NUMBER = new DisplayString("Model 1 - Binding Aware");
 
-    private DataBroker dataProvider;
+    private DataBroker dataBroker;
     private NotificationPublishService notificationProvider;
     private ListenerRegistration<OpendaylightToaster> dataTreeChangeListenerRegistration;
 
@@ -79,9 +79,9 @@ public class OpendaylightToaster extends AbstractMXBean
     private final AtomicReference<Future<?>> currentMakeToastTask = new AtomicReference<>();
 
     // Thread safe holders
-    private final AtomicLong amountOfBreadInStock = new AtomicLong( 100 );
+    private final AtomicLong amountOfBreadInStock = new AtomicLong(100);
     private final AtomicLong toastsMade = new AtomicLong(0);
-    private final AtomicLong darknessFactor = new AtomicLong( 1000 );
+    private final AtomicLong darknessFactor = new AtomicLong(1000);
 
     private final ToasterAppConfig toasterAppConfig;
 
@@ -100,9 +100,9 @@ public class OpendaylightToaster extends AbstractMXBean
         this.notificationProvider = notificationPublishService;
     }
 
-    public void setDataProvider(final DataBroker salDataProvider) {
-        this.dataProvider = salDataProvider;
-        dataProvider.registerDataTreeChangeListener(new DataTreeIdentifier<>(CONFIGURATION, TOASTER_IID), this);
+    public void setDataBroker(final DataBroker dataBroker) {
+        this.dataBroker = dataBroker;
+        dataBroker.registerDataTreeChangeListener(new DataTreeIdentifier<>(CONFIGURATION, TOASTER_IID), this);
         setToasterStatusUp(null);
     }
 
@@ -114,33 +114,31 @@ public class OpendaylightToaster extends AbstractMXBean
         // When we close this service we need to shutdown our executor!
         executor.shutdown();
 
-        if (dataProvider != null) {
+        if (dataBroker != null) {
             dataTreeChangeListenerRegistration.close();
 
-            WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
+            WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
             tx.delete(OPERATIONAL,TOASTER_IID);
-            Futures.addCallback( tx.submit(), new FutureCallback<Void>() {
+            Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
                 @Override
-                public void onSuccess( final Void result ) {
-                    LOG.debug( "Delete Toaster commit result: " + result );
+                public void onSuccess(final Void result) {
+                    LOG.debug("Delete Toaster commit result: " + result);
                 }
 
                 @Override
-                public void onFailure( final Throwable t ) {
-                    LOG.error( "Delete of Toaster failed", t );
+                public void onFailure(final Throwable failure) {
+                    LOG.error("Delete of Toaster failed", failure);
                 }
-            } );
+            });
         }
     }
 
-    private Toaster buildToaster( final ToasterStatus status ) {
+    private Toaster buildToaster(final ToasterStatus status) {
         // note - we are simulating a device whose manufacture and model are
         // fixed (embedded) into the hardware.
         // This is why the manufacture and model number are hardcoded.
-        return new ToasterBuilder().setToasterManufacturer( toasterAppConfig.getManufacturer() )
-                                   .setToasterModelNumber( toasterAppConfig.getModelNumber() )
-                                   .setToasterStatus( status )
-                                   .build();
+        return new ToasterBuilder().setToasterManufacturer(toasterAppConfig.getManufacturer())
+                .setToasterModelNumber(toasterAppConfig.getModelNumber()).setToasterStatus(status).build();
     }
 
     /**
@@ -148,19 +146,20 @@ public class OpendaylightToaster extends AbstractMXBean
      */
     @Override
     public void onDataTreeChanged(Collection<DataTreeModification<Toaster>> changes) {
-        for(DataTreeModification<Toaster> change: changes) {
+        for (DataTreeModification<Toaster> change: changes) {
             DataObjectModification<Toaster> rootNode = change.getRootNode();
-            if(rootNode.getModificationType() == WRITE) {
+            if (rootNode.getModificationType() == WRITE) {
                 Toaster oldToaster = rootNode.getDataBefore();
                 Toaster newToaster = rootNode.getDataAfter();
-                LOG.info("onDataTreeChanged - Toaster config with path {} was added or replaced: old Toaster: {}, new Toaster: {}",
-                        change.getRootPath().getRootIdentifier(), oldToaster, newToaster);
+                LOG.info("onDataTreeChanged - Toaster config with path {} was added or replaced: "
+                        + "old Toaster: {}, new Toaster: {}", change.getRootPath().getRootIdentifier(),
+                        oldToaster, newToaster);
 
                 Long darkness = newToaster.getDarknessFactor();
-                if(darkness != null) {
+                if (darkness != null) {
                     darknessFactor.set(darkness);
                 }
-            } else if(rootNode.getModificationType() == DELETE) {
+            } else if (rootNode.getModificationType() == DELETE) {
                 LOG.info("onDataTreeChanged - Toaster config with path {} was deleted: old Toaster: {}",
                         change.getRootPath().getRootIdentifier(), rootNode.getDataBefore());
             }
@@ -172,13 +171,13 @@ public class OpendaylightToaster extends AbstractMXBean
      */
     @Override
     public Future<RpcResult<Void>> cancelToast() {
-        Future<?> current = currentMakeToastTask.getAndSet( null );
-        if( current != null ) {
-            current.cancel( true );
+        Future<?> current = currentMakeToastTask.getAndSet(null);
+        if (current != null) {
+            current.cancel(true);
         }
 
         // Always return success from the cancel toast call
-        return Futures.immediateFuture( RpcResultBuilder.<Void> success().build() );
+        return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
     }
 
     /**
@@ -190,106 +189,98 @@ public class OpendaylightToaster extends AbstractMXBean
 
         final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
 
-        checkStatusAndMakeToast( input, futureResult, toasterAppConfig.getMaxMakeToastTries() );
+        checkStatusAndMakeToast(input, futureResult, toasterAppConfig.getMaxMakeToastTries());
 
         return futureResult;
     }
 
     private RpcError makeToasterOutOfBreadError() {
-        return RpcResultBuilder.newError( APPLICATION, "resource-denied",
-                "Toaster is out of bread", "out-of-stock", null, null );
+        return RpcResultBuilder.newError(APPLICATION, "resource-denied", "Toaster is out of bread", "out-of-stock",
+                null, null);
     }
 
     private RpcError makeToasterInUseError() {
-        return RpcResultBuilder.newWarning( APPLICATION, "in-use",
-                "Toaster is busy", null, null, null );
+        return RpcResultBuilder.newWarning(APPLICATION, "in-use", "Toaster is busy", null, null, null);
     }
 
-    private void checkStatusAndMakeToast( final MakeToastInput input,
-                                          final SettableFuture<RpcResult<Void>> futureResult,
-                                          final int tries ) {
-
+    private void checkStatusAndMakeToast(final MakeToastInput input, final SettableFuture<RpcResult<Void>> futureResult,
+            final int tries) {
         // Read the ToasterStatus and, if currently Up, try to write the status to Down.
         // If that succeeds, then we essentially have an exclusive lock and can proceed
         // to make toast.
-
-        final ReadWriteTransaction tx = dataProvider.newReadWriteTransaction();
+        final ReadWriteTransaction tx = dataBroker.newReadWriteTransaction();
         ListenableFuture<Optional<Toaster>> readFuture = tx.read(OPERATIONAL, TOASTER_IID);
 
         final ListenableFuture<Void> commitFuture =
-            Futures.transform( readFuture, (AsyncFunction<Optional<Toaster>, Void>) toasterData -> {
-
-                    ToasterStatus toasterStatus = ToasterStatus.Up;
-                    if( toasterData.isPresent() ) {
-                        toasterStatus = toasterData.get().getToasterStatus();
-                    }
-
-                    LOG.debug( "Read toaster status: {}", toasterStatus );
+            Futures.transform(readFuture, (AsyncFunction<Optional<Toaster>, Void>) toasterData -> {
+                ToasterStatus toasterStatus = ToasterStatus.Up;
+                if (toasterData.isPresent()) {
+                    toasterStatus = toasterData.get().getToasterStatus();
+                }
 
-                    if( toasterStatus == ToasterStatus.Up ) {
+                LOG.debug("Read toaster status: {}", toasterStatus);
 
-                        if( outOfBread() ) {
-                            LOG.debug( "Toaster is out of bread" );
+                if (toasterStatus == ToasterStatus.Up) {
 
-                            return Futures.immediateFailedCheckedFuture(
-                                    new TransactionCommitFailedException( "", makeToasterOutOfBreadError() ) );
-                        }
+                    if (outOfBread()) {
+                        LOG.debug("Toaster is out of bread");
+                        return Futures.immediateFailedCheckedFuture(
+                                new TransactionCommitFailedException("", makeToasterOutOfBreadError()));
+                    }
 
-                        LOG.debug( "Setting Toaster status to Down" );
+                    LOG.debug("Setting Toaster status to Down");
 
-                        // We're not currently making toast - try to update the status to Down
-                        // to indicate we're going to make toast. This acts as a lock to prevent
-                        // concurrent toasting.
-                        tx.put( OPERATIONAL, TOASTER_IID,
-                                buildToaster( ToasterStatus.Down ) );
-                        return tx.submit();
-                    }
+                    // We're not currently making toast - try to update the status to Down
+                    // to indicate we're going to make toast. This acts as a lock to prevent
+                    // concurrent toasting.
+                    tx.put(OPERATIONAL, TOASTER_IID, buildToaster(ToasterStatus.Down));
+                    return tx.submit();
+                }
 
-                    LOG.debug( "Oops - already making toast!" );
+                LOG.debug("Oops - already making toast!");
 
-                    // Return an error since we are already making toast. This will get
-                    // propagated to the commitFuture below which will interpret the null
-                    // TransactionStatus in the RpcResult as an error condition.
-                    return Futures.immediateFailedCheckedFuture(
-                            new TransactionCommitFailedException( "", makeToasterInUseError() ) );
-        );
+                // Return an error since we are already making toast. This will get
+                // propagated to the commitFuture below which will interpret the null
+                // TransactionStatus in the RpcResult as an error condition.
+                return Futures.immediateFailedCheckedFuture(
+                        new TransactionCommitFailedException("", makeToasterInUseError()));
+            });
 
-        Futures.addCallback( commitFuture, new FutureCallback<Void>() {
+        Futures.addCallback(commitFuture, new FutureCallback<Void>() {
             @Override
-            public void onSuccess( final Void result ) {
+            public void onSuccess(final Void result) {
                 // OK to make toast
-                currentMakeToastTask.set( executor.submit( new MakeToastTask( input, futureResult ) ) );
+                currentMakeToastTask.set(executor.submit(new MakeToastTask(input, futureResult)));
             }
 
             @Override
-            public void onFailure( final Throwable ex ) {
-                if( ex instanceof OptimisticLockFailedException ) {
+            public void onFailure(final Throwable ex) {
+                if (ex instanceof OptimisticLockFailedException) {
 
                     // Another thread is likely trying to make toast simultaneously and updated the
                     // status before us. Try reading the status again - if another make toast is
                     // now in progress, we should get ToasterStatus.Down and fail.
 
-                    if( ( tries - 1 ) > 0 ) {
-                        LOG.debug( "Got OptimisticLockFailedException - trying again" );
-
-                        checkStatusAndMakeToast( input, futureResult, tries - 1 );
-                    }
-                    else {
-                        futureResult.set( RpcResultBuilder.<Void> failed()
-                                .withError( ErrorType.APPLICATION, ex.getMessage() ).build() );
+                    if (tries - 1 > 0) {
+                        LOG.debug("Got OptimisticLockFailedException - trying again");
+                        checkStatusAndMakeToast(input, futureResult, tries - 1);
+                    } else {
+                        futureResult.set(RpcResultBuilder.<Void>failed()
+                                .withError(ErrorType.APPLICATION, ex.getMessage()).build());
                     }
-
-                } else {
-
-                    LOG.debug( "Failed to commit Toaster status", ex );
+                } else if (ex instanceof TransactionCommitFailedException) {
+                    LOG.debug("Failed to commit Toaster status", ex);
 
                     // Probably already making toast.
-                    futureResult.set( RpcResultBuilder.<Void> failed()
-                            .withRpcErrors( ((TransactionCommitFailedException)ex).getErrorList() )
-                            .build() );
+                    futureResult.set(RpcResultBuilder.<Void>failed()
+                            .withRpcErrors(((TransactionCommitFailedException)ex).getErrorList()).build());
+                } else {
+                    LOG.debug("Unexpected error committing Toaster status", ex);
+                    futureResult.set(RpcResultBuilder.<Void>failed().withError(ErrorType.APPLICATION,
+                            "Unexpected error committing Toaster status", ex).build());
                 }
             }
-        } );
+        });
     }
 
     /**
@@ -299,17 +290,17 @@ public class OpendaylightToaster extends AbstractMXBean
      */
     @Override
     public Future<RpcResult<java.lang.Void>> restockToaster(final RestockToasterInput input) {
-        LOG.info( "restockToaster: " + input );
+        LOG.info("restockToaster: " + input);
 
-        amountOfBreadInStock.set( input.getAmountOfBreadToStock() );
+        amountOfBreadInStock.set(input.getAmountOfBreadToStock());
 
-        if( amountOfBreadInStock.get() > 0 ) {
+        if (amountOfBreadInStock.get() > 0) {
             ToasterRestocked reStockedNotification = new ToasterRestockedBuilder()
-                .setAmountOfBread( input.getAmountOfBreadToStock() ).build();
-            notificationProvider.offerNotification( reStockedNotification );
+                    .setAmountOfBread(input.getAmountOfBreadToStock()).build();
+            notificationProvider.offerNotification(reStockedNotification);
         }
 
-        return Futures.immediateFuture( RpcResultBuilder.<Void> success().build() );
+        return Futures.immediateFuture(RpcResultBuilder.<Void>success().build());
     }
 
     /**
@@ -317,8 +308,8 @@ public class OpendaylightToaster extends AbstractMXBean
      */
     @Override
     public void clearToastsMade() {
-        LOG.info( "clearToastsMade" );
-        toastsMade.set( 0 );
+        LOG.info("clearToastsMade");
+        toastsMade.set(0);
     }
 
     /**
@@ -329,35 +320,34 @@ public class OpendaylightToaster extends AbstractMXBean
         return toastsMade.get();
     }
 
-    private void setToasterStatusUp( final Function<Boolean,Void> resultCallback ) {
-        WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
-        tx.put( OPERATIONAL,TOASTER_IID, buildToaster( ToasterStatus.Up ) );
+    private void setToasterStatusUp(final Function<Boolean,Void> resultCallback) {
+        WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
+        tx.put(OPERATIONAL,TOASTER_IID, buildToaster(ToasterStatus.Up));
 
-        Futures.addCallback( tx.submit(), new FutureCallback<Void>() {
+        Futures.addCallback(tx.submit(), new FutureCallback<Void>() {
             @Override
-            public void onSuccess( final Void result ) {
-                notifyCallback( true );
+            public void onSuccess(final Void result) {
+                notifyCallback(true);
             }
 
             @Override
-            public void onFailure( final Throwable t ) {
+            public void onFailure(final Throwable failure) {
                 // 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 );
+                LOG.error("Failed to update toaster status", failure);
 
-                notifyCallback( false );
+                notifyCallback(false);
             }
 
-            void notifyCallback( final boolean result ) {
-                if( resultCallback != null ) {
-                    resultCallback.apply( result );
+            void notifyCallback(final boolean result) {
+                if (resultCallback != null) {
+                    resultCallback.apply(result);
                 }
             }
-        } );
+        });
     }
 
-    private boolean outOfBread()
-    {
+    private boolean outOfBread() {
         return amountOfBreadInStock.get() == 0;
     }
 
@@ -366,48 +356,40 @@ public class OpendaylightToaster extends AbstractMXBean
         final MakeToastInput toastRequest;
         final SettableFuture<RpcResult<Void>> futureResult;
 
-        public MakeToastTask( final MakeToastInput toastRequest,
-                              final SettableFuture<RpcResult<Void>> futureResult ) {
+        MakeToastTask(final MakeToastInput toastRequest, final SettableFuture<RpcResult<Void>> futureResult) {
             this.toastRequest = toastRequest;
             this.futureResult = futureResult;
         }
 
         @Override
         public Void call() {
-            try
-            {
+            try {
                 // make toast just sleeps for n seconds per doneness level.
-                long darknessFactor = OpendaylightToaster.this.darknessFactor.get();
-                Thread.sleep(darknessFactor * toastRequest.getToasterDoneness());
+                Thread.sleep(OpendaylightToaster.this.darknessFactor.get() * toastRequest.getToasterDoneness());
 
-            }
-            catch( InterruptedException e ) {
-                LOG.info( "Interrupted while making the toast" );
+            } catch (InterruptedException e) {
+                LOG.info("Interrupted while making the toast");
             }
 
             toastsMade.incrementAndGet();
 
             amountOfBreadInStock.getAndDecrement();
-            if( outOfBread() ) {
-                LOG.info( "Toaster is out of bread!" );
+            if (outOfBread()) {
+                LOG.info("Toaster is out of bread!");
 
-                notificationProvider.offerNotification( new ToasterOutOfBreadBuilder().build() );
+                notificationProvider.offerNotification(new ToasterOutOfBreadBuilder().build());
             }
 
             // Set the Toaster status back to up - this essentially releases the toasting lock.
             // We can't clear the current toast task nor set the Future result until the
             // update has been committed so we pass a callback to be notified on completion.
 
-            setToasterStatusUp( result -> {
-
-                    currentMakeToastTask.set( null );
-
-                    LOG.debug("Toast done");
-
-                    futureResult.set( RpcResultBuilder.<Void>success().build() );
-
-                    return null;
-            } );
+            setToasterStatusUp(result -> {
+                currentMakeToastTask.set(null);
+                LOG.debug("Toast done");
+                futureResult.set(RpcResultBuilder.<Void>success().build());
+                return null;
+            });
 
             return null;
         }
index 4a2be5d256a328bfcada788c9a49b71ef90f9934..d58c26a792e10391f04ac258bc90f27d7a5a397d 100644 (file)
@@ -53,7 +53,7 @@
   <bean id="toaster" class="org.opendaylight.controller.sample.toaster.provider.OpendaylightToaster"
           init-method="register" destroy-method="unregister">
     <argument ref="toasterAppConfig"/>
-    <property name="dataProvider" ref="dataBroker"/>
+    <property name="dataBroker" ref="dataBroker"/>
     <property name="notificationProvider" ref="notificationService"/>
   </bean>
 
@@ -61,4 +61,4 @@
        element automatically figures out the RpcService interface although it can be explicitly specified.
    -->
   <odl:rpc-implementation ref="toaster"/>
-</blueprint>
\ No newline at end of file
+</blueprint>
index 1f5f0f7cd815df746708632e4fe6f0f8e87dc24b..c6f0dc1d3f615b8159337ed22c891216dbcd2460 100644 (file)
@@ -13,6 +13,7 @@ import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
+
 import com.google.common.base.Optional;
 import java.util.concurrent.Future;
 import org.junit.Ignore;
@@ -32,63 +33,56 @@ import org.opendaylight.yangtools.yang.common.RpcResult;
 
 public class OpenDaylightToasterTest extends AbstractDataBrokerTest {
 
-    private static InstanceIdentifier<Toaster> TOASTER_IID =
-                        InstanceIdentifier.builder( Toaster.class ).build();
+    private static InstanceIdentifier<Toaster> TOASTER_IID = InstanceIdentifier.builder(Toaster.class).build();
     OpendaylightToaster toaster;
 
     @Override
     protected void setupWithDataBroker(DataBroker dataBroker) {
         toaster = new OpendaylightToaster();
-        toaster.setDataProvider( dataBroker );
+        toaster.setDataBroker(dataBroker);
 
         /**
          * Doesn't look like we have support for the NotificationProviderService yet, so mock it
          * for now.
          */
-        NotificationPublishService mockNotification = mock( NotificationPublishService.class );
-        toaster.setNotificationProvider( mockNotification );
+        NotificationPublishService mockNotification = mock(NotificationPublishService.class);
+        toaster.setNotificationProvider(mockNotification);
     }
 
     @Test
     public void testToasterInitOnStartUp() throws Exception {
         DataBroker broker = getDataBroker();
 
-        ReadOnlyTransaction rTx = broker.newReadOnlyTransaction();
-        Optional<Toaster> optional = rTx.read( LogicalDatastoreType.OPERATIONAL, TOASTER_IID ).get();
-        assertNotNull( optional );
-        assertTrue( "Operational toaster not present", optional.isPresent() );
+        ReadOnlyTransaction readTx = broker.newReadOnlyTransaction();
+        Optional<Toaster> optional = readTx.read(LogicalDatastoreType.OPERATIONAL, TOASTER_IID).get();
+        assertNotNull(optional);
+        assertTrue("Operational toaster not present", optional.isPresent());
 
-        Toaster toaster = optional.get();
+        Toaster toasterData = optional.get();
 
-        assertEquals( Toaster.ToasterStatus.Up, toaster.getToasterStatus() );
-        assertEquals( new DisplayString("Opendaylight"),
-                      toaster.getToasterManufacturer() );
-        assertEquals( new DisplayString("Model 1 - Binding Aware"),
-                      toaster.getToasterModelNumber() );
+        assertEquals(Toaster.ToasterStatus.Up, toasterData.getToasterStatus());
+        assertEquals(new DisplayString("Opendaylight"), toasterData.getToasterManufacturer());
+        assertEquals(new DisplayString("Model 1 - Binding Aware"), toasterData.getToasterModelNumber());
 
-        Optional<Toaster> configToaster =
-                            rTx.read( LogicalDatastoreType.CONFIGURATION, TOASTER_IID ).get();
-        assertFalse( "Didn't expect config data for toaster.",
-                     configToaster.isPresent() );
+        Optional<Toaster> configToaster = readTx.read(LogicalDatastoreType.CONFIGURATION, TOASTER_IID).get();
+        assertFalse("Didn't expect config data for toaster.", configToaster.isPresent());
     }
 
     @Test
-    @Ignore //ignored because it is not an e test right now. Illustrative purposes only.
-    public void testSomething() throws Exception{
-        MakeToastInput toastInput = new MakeToastInputBuilder()
-                                        .setToasterDoneness( 1L )
-                                        .setToasterToastType( WheatBread.class )
-                                        .build();
+    @Ignore //ignored because it is not a test right now. Illustrative purposes only.
+    public void testSomething() throws Exception {
+        MakeToastInput toastInput = new MakeToastInputBuilder().setToasterDoneness(1L)
+                .setToasterToastType(WheatBread.class).build();
 
-        //NOTE: In a real test we would want to override the Thread.sleep() to prevent our junit test
-        //for sleeping for a second...
-        Future<RpcResult<Void>> makeToast = toaster.makeToast( toastInput );
+        // NOTE: In a real test we would want to override the Thread.sleep() to
+        // prevent our junit test
+        // for sleeping for a second...
+        Future<RpcResult<Void>> makeToast = toaster.makeToast(toastInput);
 
         RpcResult<Void> rpcResult = makeToast.get();
 
-        assertNotNull( rpcResult );
-        assertTrue( rpcResult.isSuccessful() );
-         //etc
+        assertNotNull(rpcResult);
+        assertTrue(rpcResult.isSuccessful());
+        // etc
     }
-
 }