update deprecated transform and addCallback methods
[groupbasedpolicy.git] / sxp-integration / sxp-ise-adapter / src / main / java / org / opendaylight / groupbasedpolicy / sxp_ise_adapter / impl / GbpIseConfigListenerImpl.java
index 69c1f8d37bfb441cbb44fdd669cd903cbbb20873..ae15aa5fd2e8b5c387b31f72d54cbb255dd70437 100644 (file)
@@ -12,10 +12,12 @@ import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.Date;
+import java.util.Optional;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -28,11 +30,13 @@ import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
 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.TransactionCommitFailedException;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.GbpSxpIseAdapter;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseSourceConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatus;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.gbp.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatusBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.GbpSxpIseAdapter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseHarvestStatusBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.IseSourceConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.integration.sxp.ise.adapter.model.rev160630.gbp.sxp.ise.adapter.ise.source.config.ConnectionConfig;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -48,11 +52,14 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
 
     private final DataBroker dataBroker;
     private final GbpIseSgtHarvester gbpIseSgtHarvester;
+    @Nonnull private final EPPolicyTemplateProviderFacade templateProviderFacade;
     private final ThreadPoolExecutor pool;
 
-    public GbpIseConfigListenerImpl(@Nonnull final DataBroker dataBroker, @Nonnull final GbpIseSgtHarvester gbpIseSgtHarvester) {
+    public GbpIseConfigListenerImpl(@Nonnull final DataBroker dataBroker, @Nonnull final GbpIseSgtHarvester gbpIseSgtHarvester,
+                                    @Nonnull final EPPolicyTemplateProviderFacade templateProviderFacade) {
         this.dataBroker = dataBroker;
         this.gbpIseSgtHarvester = gbpIseSgtHarvester;
+        this.templateProviderFacade = templateProviderFacade;
         pool = new ThreadPoolExecutor(1, 1, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(10),
                 new ThreadFactoryBuilder().setNameFormat("ise-sgt-harverster-%d").build()) {
             @Override
@@ -69,14 +76,20 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
     public void onDataTreeChanged(@Nonnull final Collection<DataTreeModification<IseSourceConfig>> collection) {
         for (DataTreeModification<IseSourceConfig> modification : collection) {
             final IseSourceConfig iseSourceConfig = modification.getRootNode().getDataAfter();
+            final IseContext iseContext = new IseContext(iseSourceConfig);
+            templateProviderFacade.assignIseContext(iseContext);
             if (iseSourceConfig != null) {
+                final Optional<ConnectionConfig> connectionConfig = Optional.ofNullable(iseSourceConfig.getConnectionConfig());
+                LOG.debug("Ise-source config assigned: {} -> {}", iseSourceConfig.getTenant(),
+                        connectionConfig.map(ConnectionConfig::getIseRestUrl).orElse(new Uri("n/a")));
                 pool.submit(() -> {
-                    final ListenableFuture<Integer> harvestResult = gbpIseSgtHarvester.harvest(iseSourceConfig);
-                    Futures.addCallback(harvestResult, new FutureCallback<Integer>() {
+                    final ListenableFuture<Collection<SgtInfo>> harvestResult = gbpIseSgtHarvester.harvestAll(iseContext);
+                    Futures.addCallback(harvestResult, new FutureCallback<Collection<SgtInfo>>() {
                         @Override
-                        public void onSuccess(@Nullable final Integer result) {
-                            LOG.debug("ise harvest finished, outcome: {}", result);
-                            storeOutcome(true, result.intValue(), null);
+                        public void onSuccess(@Nullable final Collection<SgtInfo> result) {
+                            final Integer counter = Optional.ofNullable(result).map(Collection::size).orElse(0);
+                            LOG.debug("ise harvest finished, outcome: {}", counter);
+                            storeOutcome(true, counter, null);
                         }
 
                         @Override
@@ -84,7 +97,7 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
                             LOG.debug("ise harvest failed", t);
                             storeOutcome(false, 0, t.getMessage());
                         }
-                    });
+                    }, MoreExecutors.directExecutor());
 
                     try {
                         harvestResult.get(30, TimeUnit.SECONDS);
@@ -92,6 +105,8 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
                         LOG.debug("failed to finish ise-sgt-harvest task properly on time", e);
                     }
                 });
+            } else {
+                LOG.debug("Ise-source config removed");
             }
         }
     }
@@ -117,7 +132,7 @@ public class GbpIseConfigListenerImpl implements GbpIseConfigListener {
 
     @Override
     public void close() throws Exception {
-        if (!pool.isTerminated()) {
+        if (! pool.isTerminated()) {
             pool.shutdown();
             final boolean terminated = pool.awaitTermination(10, TimeUnit.SECONDS);
             if (! terminated) {