and some very minor unrelated pom.xml clean-up
Change-Id: I47fc27cca633972a7a678c0a0a2852c4ad799d65
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opendaylight.controller</groupId>
<artifactId>mdsal-it-parent</artifactId>
<parent>
<groupId>org.opendaylight.controller</groupId>
<artifactId>mdsal-it-parent</artifactId>
*/
package org.opendaylight.controller.sample.toaster.provider;
*/
package org.opendaylight.controller.sample.toaster.provider;
+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;
import com.google.common.util.concurrent.AsyncFunction;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.AsyncFunction;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean;
import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
import org.opendaylight.controller.md.sal.common.util.jmx.AbstractMXBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class OpendaylightToaster extends AbstractMXBean implements ToasterService, ToasterProviderRuntimeMXBean,
- DataTreeChangeListener<Toaster>, AutoCloseable {
+public class OpendaylightToaster extends AbstractMXBean
+ implements ToasterService, ToasterProviderRuntimeMXBean, DataTreeChangeListener<Toaster>, AutoCloseable {
private static final Logger LOG = LoggerFactory.getLogger(OpendaylightToaster.class);
private static final Logger LOG = LoggerFactory.getLogger(OpendaylightToaster.class);
- public static final InstanceIdentifier<Toaster> TOASTER_IID = InstanceIdentifier.builder(Toaster.class).build();
-
+ private static final InstanceIdentifier<Toaster> TOASTER_IID = InstanceIdentifier.builder(Toaster.class).build();
private static final DisplayString TOASTER_MANUFACTURER = new DisplayString("Opendaylight");
private static final DisplayString TOASTER_MODEL_NUMBER = new DisplayString("Model 1 - Binding Aware");
private static final DisplayString TOASTER_MANUFACTURER = new DisplayString("Opendaylight");
private static final DisplayString TOASTER_MODEL_NUMBER = new DisplayString("Model 1 - Binding Aware");
- private NotificationPublishService notificationProvider;
private DataBroker dataProvider;
private DataBroker dataProvider;
+ private NotificationPublishService notificationProvider;
private ListenerRegistration<OpendaylightToaster> dataTreeChangeListenerRegistration;
private final ExecutorService executor;
private ListenerRegistration<OpendaylightToaster> dataTreeChangeListenerRegistration;
private final ExecutorService executor;
- // The following holds the Future for the current make toast task.
- // This is used to cancel the current toast.
+ // This holds the Future for the current make toast task and is used to cancel the current toast.
private final AtomicReference<Future<?>> currentMakeToastTask = new AtomicReference<>();
private final AtomicReference<Future<?>> currentMakeToastTask = new AtomicReference<>();
private final AtomicLong amountOfBreadInStock = new AtomicLong( 100 );
private final AtomicLong amountOfBreadInStock = new AtomicLong( 100 );
private final AtomicLong toastsMade = new AtomicLong(0);
private final AtomicLong toastsMade = new AtomicLong(0);
-
- // Thread safe holder for our darkness multiplier.
private final AtomicLong darknessFactor = new AtomicLong( 1000 );
private final ToasterAppConfig toasterAppConfig;
public OpendaylightToaster() {
private final AtomicLong darknessFactor = new AtomicLong( 1000 );
private final ToasterAppConfig toasterAppConfig;
public OpendaylightToaster() {
- this(new ToasterAppConfigBuilder().setManufacturer(TOASTER_MANUFACTURER).setModelNumber(TOASTER_MODEL_NUMBER).
- setMaxMakeToastTries(2).build());
+ this(new ToasterAppConfigBuilder().setManufacturer(TOASTER_MANUFACTURER).setModelNumber(TOASTER_MODEL_NUMBER)
+ .setMaxMakeToastTries(2).build());
}
public OpendaylightToaster(ToasterAppConfig toasterAppConfig) {
}
public OpendaylightToaster(ToasterAppConfig toasterAppConfig) {
public void setDataProvider(final DataBroker salDataProvider) {
this.dataProvider = salDataProvider;
public void setDataProvider(final DataBroker salDataProvider) {
this.dataProvider = salDataProvider;
-
- dataProvider.registerDataTreeChangeListener(new DataTreeIdentifier<Toaster>(
- LogicalDatastoreType.CONFIGURATION, OpendaylightToaster.TOASTER_IID), this);
-
- setToasterStatusUp( null );
+ dataProvider.registerDataTreeChangeListener(new DataTreeIdentifier<>(CONFIGURATION, TOASTER_IID), this);
+ setToasterStatusUp(null);
dataTreeChangeListenerRegistration.close();
WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
dataTreeChangeListenerRegistration.close();
WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
- tx.delete(LogicalDatastoreType.OPERATIONAL,TOASTER_IID);
+ tx.delete(OPERATIONAL,TOASTER_IID);
Futures.addCallback( tx.submit(), new FutureCallback<Void>() {
@Override
public void onSuccess( final Void result ) {
Futures.addCallback( tx.submit(), new FutureCallback<Void>() {
@Override
public void onSuccess( final Void result ) {
}
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.
// 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.
public void onDataTreeChanged(Collection<DataTreeModification<Toaster>> changes) {
for(DataTreeModification<Toaster> change: changes) {
DataObjectModification<Toaster> rootNode = change.getRootNode();
public void onDataTreeChanged(Collection<DataTreeModification<Toaster>> changes) {
for(DataTreeModification<Toaster> change: changes) {
DataObjectModification<Toaster> rootNode = change.getRootNode();
- if(rootNode.getModificationType() == DataObjectModification.ModificationType.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: {}",
Toaster oldToaster = rootNode.getDataBefore();
Toaster newToaster = rootNode.getDataAfter();
LOG.info("onDataTreeChanged - Toaster config with path {} was added or replaced: old Toaster: {}, new Toaster: {}",
if(darkness != null) {
darknessFactor.set(darkness);
}
if(darkness != null) {
darknessFactor.set(darkness);
}
- } else if(rootNode.getModificationType() == DataObjectModification.ModificationType.DELETE) {
+ } else if(rootNode.getModificationType() == DELETE) {
LOG.info("onDataTreeChanged - Toaster config with path {} was deleted: old Toaster: {}",
change.getRootPath().getRootIdentifier(), rootNode.getDataBefore());
}
LOG.info("onDataTreeChanged - Toaster config with path {} was deleted: old Toaster: {}",
change.getRootPath().getRootIdentifier(), rootNode.getDataBefore());
}
- * RPC call implemented from the ToasterService interface that cancels the current
- * toast, if any.
+ * RPC call implemented from the ToasterService interface that cancels the current toast, if any.
*/
@Override
public Future<RpcResult<Void>> cancelToast() {
*/
@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.
+ // Always return success from the cancel toast call
return Futures.immediateFuture( RpcResultBuilder.<Void> success().build() );
}
return Futures.immediateFuture( RpcResultBuilder.<Void> success().build() );
}
}
private RpcError makeToasterOutOfBreadError() {
}
private RpcError makeToasterOutOfBreadError() {
- return RpcResultBuilder.newError( ErrorType.APPLICATION, "resource-denied",
+ return RpcResultBuilder.newError( APPLICATION, "resource-denied",
"Toaster is out of bread", "out-of-stock", null, null );
}
private RpcError makeToasterInUseError() {
"Toaster is out of bread", "out-of-stock", null, null );
}
private RpcError makeToasterInUseError() {
- return RpcResultBuilder.newWarning( ErrorType.APPLICATION, "in-use",
+ return RpcResultBuilder.newWarning( APPLICATION, "in-use",
"Toaster is busy", null, null, null );
}
"Toaster is busy", null, null, null );
}
// to make toast.
final ReadWriteTransaction tx = dataProvider.newReadWriteTransaction();
// to make toast.
final ReadWriteTransaction tx = dataProvider.newReadWriteTransaction();
- ListenableFuture<Optional<Toaster>> readFuture =
- tx.read( LogicalDatastoreType.OPERATIONAL, TOASTER_IID );
+ ListenableFuture<Optional<Toaster>> readFuture = tx.read(OPERATIONAL, TOASTER_IID);
final ListenableFuture<Void> commitFuture =
final ListenableFuture<Void> commitFuture =
- Futures.transform( readFuture, new AsyncFunction<Optional<Toaster>,Void>() {
-
- @Override
- public ListenableFuture<Void> apply(
- final Optional<Toaster> toasterData ) throws Exception {
+ Futures.transform( readFuture, (AsyncFunction<Optional<Toaster>, Void>) toasterData -> {
ToasterStatus toasterStatus = ToasterStatus.Up;
if( toasterData.isPresent() ) {
ToasterStatus toasterStatus = ToasterStatus.Up;
if( toasterData.isPresent() ) {
// 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.
// 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( LogicalDatastoreType.OPERATIONAL, TOASTER_IID,
+ tx.put( OPERATIONAL, TOASTER_IID,
buildToaster( ToasterStatus.Down ) );
return tx.submit();
}
buildToaster( ToasterStatus.Down ) );
return tx.submit();
}
// TransactionStatus in the RpcResult as an error condition.
return Futures.immediateFailedCheckedFuture(
new TransactionCommitFailedException( "", makeToasterInUseError() ) );
// 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>() {
}
private void setToasterStatusUp( final Function<Boolean,Void> resultCallback ) {
}
private void setToasterStatusUp( final Function<Boolean,Void> resultCallback ) {
WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
WriteTransaction tx = dataProvider.newWriteOnlyTransaction();
- tx.put( LogicalDatastoreType.OPERATIONAL,TOASTER_IID, buildToaster( ToasterStatus.Up ) );
+ tx.put( OPERATIONAL,TOASTER_IID, buildToaster( ToasterStatus.Up ) );
Futures.addCallback( tx.submit(), new FutureCallback<Void>() {
@Override
Futures.addCallback( tx.submit(), new FutureCallback<Void>() {
@Override
// 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.
// 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( new Function<Boolean,Void>() {
- @Override
- public Void apply( final Boolean result ) {
+ setToasterStatusUp( result -> {
currentMakeToastTask.set( null );
currentMakeToastTask.set( null );
futureResult.set( RpcResultBuilder.<Void>success().build() );
return null;
futureResult.set( RpcResultBuilder.<Void>success().build() );
return null;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResult;
-public class OpenDaylightToasterTest extends AbstractDataBrokerTest{
+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();
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opendaylight.controller.samples</groupId>
<artifactId>sal-samples</artifactId>
<version>1.4.0-SNAPSHOT</version>
</parent>
<!-- FIXME Use org.opendaylight.mdsal:binding-parent -->
<parent>
<groupId>org.opendaylight.controller.samples</groupId>
<artifactId>sal-samples</artifactId>
<version>1.4.0-SNAPSHOT</version>
</parent>
<!-- FIXME Use org.opendaylight.mdsal:binding-parent -->
<artifactId>sample-toaster</artifactId>
<packaging>bundle</packaging>
<artifactId>sample-toaster</artifactId>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
<dependencies>
<dependency>
<groupId>org.opendaylight.mdsal</groupId>
</plugin>
</plugins>
</build>
</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>
- <tag>HEAD</tag>
- <url>https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL</url>
- </scm>