1 package org.opendaylight.yangtools.yang.model.util.repo;
3 import org.opendaylight.yangtools.concepts.Delegator;
4 import org.opendaylight.yangtools.concepts.Registration;
6 import com.google.common.base.Optional;
8 import static com.google.common.base.Preconditions.*;
10 public abstract class AbstractCachingSchemaSourceProvider<I, O> implements SchemaSourceProvider<O>,
11 Delegator<SchemaSourceProvider<I>> {
13 private final SchemaSourceProvider<I> defaultDelegate;
15 protected AbstractCachingSchemaSourceProvider(SchemaSourceProvider<I> delegate) {
16 this.defaultDelegate = delegate;
20 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
21 checkNotNull(moduleName, "Module name should not be null.");
22 checkNotNull(revision, "Revision should not be null");
23 return getSchemaSource(SourceIdentifier.create(moduleName, revision));
27 public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
28 return getSchemaSourceImpl(sourceIdentifier, defaultDelegate);
31 protected final Optional<O> getSchemaSourceImpl(SourceIdentifier identifier,
32 SchemaSourceProvider<I> delegate) {
33 checkNotNull(identifier, "Source identifier name should not be null.");
35 Optional<O> cached = getCachedSchemaSource(identifier);
36 if (cached.isPresent()) {
39 Optional<I> live = delegate.getSchemaSource(identifier);
40 return cacheSchemaSource(identifier, live);
43 abstract protected Optional<O> cacheSchemaSource(SourceIdentifier identifier, Optional<I> stream);
45 abstract protected Optional<O> getCachedSchemaSource(SourceIdentifier identifier);
47 public SchemaSourceProvider<I> getDelegate() {
48 return defaultDelegate;
51 public SchemaSourceProvider<O> createInstanceFor(SchemaSourceProvider<I> delegate) {
52 checkNotNull(delegate, "Delegate should not be null");
53 return new SchemaSourceProviderInstance(delegate);
56 private class SchemaSourceProviderInstance implements //
57 SchemaSourceProvider<O>,
58 Delegator<SchemaSourceProvider<I>> {
60 private final SchemaSourceProvider<I> delegate;
62 protected SchemaSourceProviderInstance(SchemaSourceProvider<I> delegate) {
64 this.delegate = delegate;
68 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
69 return getSchemaSource(SourceIdentifier.create(moduleName, revision));
73 public SchemaSourceProvider<I> getDelegate() {
78 public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
79 return getSchemaSourceImpl(sourceIdentifier, getDelegate());