* 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 {
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);
}
}
}
}
}
+ private static final Logger LOG = LoggerFactory.getLogger(FutureSchema.class);
+
@GuardedBy("postponedOperations")
private final Set<FutureSchemaPredicate> postponedOperations = new LinkedHashSet<>();
private final long duration;
private volatile BindingRuntimeContext runtimeContext;
FutureSchema(final long time, final TimeUnit unit) {
- this.duration = time;
+ duration = time;
this.unit = requireNonNull(unit);
}
}
}
- 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();
}
});
}
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;