X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=yang%2Fyang-parser-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fyangtools%2Fyang%2Fparser%2Frepo%2FYangTextSchemaContextResolver.java;h=4f536abcf7f2edec97d31a804a1370cc05293027;hb=3310cd312a6419064b7a2850865e434970ba5a67;hp=bb6b4b5c54b85b60bd96129d9a326417d8f97bb9;hpb=c88a5514bcfae1f6d139752d2807fea4bb6e541e;p=yangtools.git diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java index bb6b4b5c54..4f536abcf7 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/repo/YangTextSchemaContextResolver.java @@ -13,7 +13,6 @@ import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediate import static org.opendaylight.yangtools.util.concurrent.FluentFutures.immediateFluentFuture; import com.google.common.annotations.Beta; -import com.google.common.base.MoreObjects.ToStringHelper; import com.google.common.base.Verify; import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.ImmutableSet; @@ -21,19 +20,17 @@ import com.google.common.collect.Multimap; import com.google.common.util.concurrent.FluentFuture; import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; -import java.io.InputStream; import java.net.URL; +import java.time.Duration; import java.util.Collection; import java.util.Optional; import java.util.Set; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import org.eclipse.jdt.annotation.NonNull; import org.opendaylight.yangtools.yang.common.Revision; import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; -import org.opendaylight.yangtools.yang.model.api.SchemaContext; import org.opendaylight.yangtools.yang.model.parser.api.YangParserFactory; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.EffectiveModelContextFactory; @@ -46,27 +43,27 @@ import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.model.repo.api.StatementParserMode; import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource; +import org.opendaylight.yangtools.yang.model.repo.spi.GuavaSchemaSourceCache; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource; import org.opendaylight.yangtools.yang.model.repo.spi.PotentialSchemaSource.Costs; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaListenerRegistration; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceProvider; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistration; import org.opendaylight.yangtools.yang.model.repo.spi.SchemaSourceRegistry; -import org.opendaylight.yangtools.yang.model.repo.util.InMemorySchemaSourceCache; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.ASTSchemaSource; -import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToASTTransformer; +import org.opendaylight.yangtools.yang.parser.rfc7950.ir.IRSchemaSource; +import org.opendaylight.yangtools.yang.parser.rfc7950.repo.TextToIRTransformer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public final class YangTextSchemaContextResolver implements AutoCloseable, SchemaSourceProvider { private static final Logger LOG = LoggerFactory.getLogger(YangTextSchemaContextResolver.class); - private static final long SOURCE_LIFETIME_SECONDS = 60; + private static final Duration SOURCE_LIFETIME = Duration.ofSeconds(60); private final Collection requiredSources = new ConcurrentLinkedDeque<>(); private final Multimap texts = ArrayListMultimap.create(); private final AtomicReference> currentSchemaContext = new AtomicReference<>(Optional.empty()); - private final InMemorySchemaSourceCache cache; + private final GuavaSchemaSourceCache cache; private final SchemaListenerRegistration transReg; private final SchemaSourceRegistry registry; private final SchemaRepository repository; @@ -77,11 +74,10 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem this.repository = requireNonNull(repository); this.registry = requireNonNull(registry); - final TextToASTTransformer t = TextToASTTransformer.create(repository, registry); + final TextToIRTransformer t = TextToIRTransformer.create(repository, registry); transReg = registry.registerSchemaSourceListener(t); - cache = InMemorySchemaSourceCache.createSoftCache(registry, ASTSchemaSource.class, SOURCE_LIFETIME_SECONDS, - TimeUnit.SECONDS); + cache = GuavaSchemaSourceCache.createSoftCache(registry, IRSchemaSource.class, SOURCE_LIFETIME); } public static @NonNull YangTextSchemaContextResolver create(final String name) { @@ -107,7 +103,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem throws SchemaSourceException, IOException, YangSyntaxErrorException { checkArgument(source != null); - final ASTSchemaSource ast = TextToASTTransformer.transformText(source); + final IRSchemaSource ast = TextToIRTransformer.transformText(source); LOG.trace("Resolved source {} to source {}", source, ast); // AST carries an accurate identifier, check if it matches the one supplied by the source. If it @@ -178,18 +174,7 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem final String path = url.getPath(); final String fileName = path.substring(path.lastIndexOf('/') + 1); - final SourceIdentifier guessedId = guessSourceIdentifier(fileName); - return registerSource(new YangTextSchemaSource(guessedId) { - @Override - public InputStream openStream() throws IOException { - return url.openStream(); - } - - @Override - protected ToStringHelper addToStringAttributes(final ToStringHelper toStringHelper) { - return toStringHelper.add("url", url); - } - }); + return registerSource(YangTextSchemaSource.forURL(url, guessSourceIdentifier(fileName))); } private static SourceIdentifier guessSourceIdentifier(final @NonNull String fileName) { @@ -270,33 +255,8 @@ public final class YangTextSchemaContextResolver implements AutoCloseable, Schem return sc; } - /** - * Try to parse all currently available yang files and build new schema context. - * - * @return new schema context iif there is at least 1 yang file registered and new schema context was successfully - * built. - * @deprecated Use {@link #getEffectiveModelContext()} instead. - */ - @Deprecated(forRemoval = true) - public Optional getSchemaContext() { - return getEffectiveModelContext(); - } - - /** - * Try to parse all currently available yang files and build new schema context depending on specified parsing mode. - * - * @param statementParserMode mode of statement parser - * @return new schema context iif there is at least 1 yang file registered and - * new schema context was successfully built. - * @deprecated Use {@link #getEffectiveModelContext(StatementParserMode)} instead. - */ - @Deprecated(forRemoval = true) - public Optional getSchemaContext(final StatementParserMode statementParserMode) { - return getEffectiveModelContext(statementParserMode); - } - @Override - public synchronized FluentFuture getSource( + public synchronized @NonNull FluentFuture getSource( final SourceIdentifier sourceIdentifier) { final Collection ret = texts.get(sourceIdentifier);