Bump yangtools to 13.0.0
[mdsal.git] / binding / mdsal-binding-dom-adapter / src / main / java / org / opendaylight / mdsal / binding / dom / adapter / FutureSchema.java
index 0dfa8419e1dadb1d683678fb37428b3d78a5f39e..fbe1d71f70b23168a5ae009665ea9367adc26782 100644 (file)
@@ -5,25 +5,25 @@
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.mdsal.binding.dom.adapter;
 
 import static java.util.Objects.requireNonNull;
 
 import com.google.common.util.concurrent.SettableFuture;
-import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Date;
 import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
 import java.util.function.Predicate;
-import javax.annotation.concurrent.GuardedBy;
-import org.opendaylight.mdsal.binding.generator.util.BindingRuntimeContext;
+import org.checkerframework.checker.lock.qual.GuardedBy;
+import org.opendaylight.mdsal.binding.runtime.api.BindingRuntimeContext;
 import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.common.QNameModule;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 abstract class FutureSchema implements AutoCloseable {
     private static final class Waiting extends FutureSchema {
@@ -48,15 +48,16 @@ abstract class FutureSchema implements AutoCloseable {
 
         final boolean waitForSchema() {
             try {
-                schemaPromise.get(FutureSchema.this.duration, FutureSchema.this.unit);
+                schemaPromise.get(duration, unit);
                 return true;
             } catch (final InterruptedException | ExecutionException e) {
-                throw new RuntimeException(e);
+                throw new IllegalStateException(e);
             } catch (final TimeoutException e) {
+                LOG.trace("Wait for {} timed out", schemaPromise, e);
                 return false;
             } finally {
-                synchronized (FutureSchema.this.postponedOperations) {
-                    FutureSchema.this.postponedOperations.remove(this);
+                synchronized (postponedOperations) {
+                    postponedOperations.remove(this);
                 }
             }
         }
@@ -72,6 +73,8 @@ abstract class FutureSchema implements AutoCloseable {
         }
     }
 
+    private static final Logger LOG = LoggerFactory.getLogger(FutureSchema.class);
+
     @GuardedBy("postponedOperations")
     private final Set<FutureSchemaPredicate> postponedOperations = new LinkedHashSet<>();
     private final long duration;
@@ -80,7 +83,7 @@ abstract class FutureSchema implements AutoCloseable {
     private volatile BindingRuntimeContext runtimeContext;
 
     FutureSchema(final long time, final TimeUnit unit) {
-        this.duration = time;
+        duration = time;
         this.unit = requireNonNull(unit);
     }
 
@@ -125,11 +128,11 @@ abstract class FutureSchema implements AutoCloseable {
         }
     }
 
-    boolean waitForSchema(final URI namespace, final Date revision) {
+    boolean waitForSchema(final QNameModule module) {
         return addPostponedOpAndWait(new FutureSchemaPredicate() {
             @Override
             public boolean test(final BindingRuntimeContext input) {
-                return input.getSchemaContext().findModuleByNamespaceAndRevision(namespace, revision) != null;
+                return input.modelContext().findModule(module).isPresent();
             }
         });
     }
@@ -140,7 +143,7 @@ abstract class FutureSchema implements AutoCloseable {
             public boolean test(final BindingRuntimeContext context) {
                 return bindingClasses.stream().allMatch(clz -> {
                     if (Augmentation.class.isAssignableFrom(clz)) {
-                        return context.getAugmentationDefinition(clz) != null;
+                        return context.getAugmentationDefinition(clz.asSubclass(Augmentation.class)) != null;
                     }
 
                     return context.getSchemaDefinition(clz) != null;