Migrate users of mdsalutil-api/Abstract listener base classes to tools/listeners
[genius.git] / mdsalutil / mdsalutil-impl / src / main / java / org / opendaylight / genius / mdsalutil / internal / UpgradeStateListener.java
1 /*
2  * Copyright (c) 2017 Red Hat, Inc. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.genius.mdsalutil.internal;
10
11 import java.util.concurrent.atomic.AtomicBoolean;
12 import javax.annotation.Nonnull;
13 import javax.inject.Inject;
14 import javax.inject.Singleton;
15
16 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
17 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
20 import org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker;
21 import org.opendaylight.genius.mdsalutil.UpgradeState;
22 import org.opendaylight.genius.tools.mdsal.listener.AbstractClusteredSyncDataTreeChangeListener;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsalutil.rev170830.Config;
24 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
25 import org.ops4j.pax.cdi.api.OsgiService;
26 import org.ops4j.pax.cdi.api.OsgiServiceProvider;
27 import org.slf4j.Logger;
28 import org.slf4j.LoggerFactory;
29
30 @Singleton
31 @OsgiServiceProvider(classes = UpgradeState.class)
32 public class UpgradeStateListener extends AbstractClusteredSyncDataTreeChangeListener<Config> implements UpgradeState {
33     private static final Logger LOG = LoggerFactory.getLogger(UpgradeStateListener.class);
34
35     private final AtomicBoolean isUpgradeInProgress = new AtomicBoolean(false);
36
37     @Inject
38     public UpgradeStateListener(@OsgiService final DataBroker dataBroker, final Config config) {
39         super(dataBroker, new DataTreeIdentifier<>(
40                 LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Config.class)));
41         // When this config value is set from a file it is not accessible via the yang tree...
42         // so we just write it once here just in case.
43         try {
44             SingleTransactionDataBroker.syncWrite(dataBroker, LogicalDatastoreType.CONFIGURATION,
45                     InstanceIdentifier.create(Config.class), config);
46         } catch (TransactionCommitFailedException e) {
47             LOG.error("Failed to write mdsalutil config", e);
48         }
49     }
50
51     @Override
52     public boolean isUpgradeInProgress() {
53         return isUpgradeInProgress.get();
54     }
55
56     @Override
57     public void add(@Nonnull InstanceIdentifier<Config> instanceIdentifier, @Nonnull Config config) {
58         isUpgradeInProgress.set(config.isUpgradeInProgress());
59         LOG.info("UpgradeStateListener.add: isUpgradeInProgress = {}", config.isUpgradeInProgress());
60     }
61
62     @Override
63     public void remove(@Nonnull InstanceIdentifier<Config> instanceIdentifier, @Nonnull Config config) {
64         isUpgradeInProgress.set(false);
65         LOG.info("UpgradeStateListener.remove: isUpgradeInProgress = {}", false);
66     }
67
68     @Override
69     public void update(@Nonnull InstanceIdentifier<Config> instanceIdentifier,
70                        @Nonnull Config originalConfig, @Nonnull Config updatedConfig) {
71         isUpgradeInProgress.set(updatedConfig.isUpgradeInProgress());
72         LOG.info("UpgradeStateListener.update: isUpgradeInProgress = {}", updatedConfig.isUpgradeInProgress());
73     }
74 }