2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/eplv10.html
8 package org.opendaylight.yangtools.yang.model.util.repo;
10 import org.opendaylight.yangtools.concepts.Delegator;
11 import org.opendaylight.yangtools.concepts.Registration;
13 import com.google.common.base.Optional;
15 import static com.google.common.base.Preconditions.*;
17 public abstract class AbstractCachingSchemaSourceProvider<I, O> implements AdvancedSchemaSourceProvider<O>,
18 Delegator<AdvancedSchemaSourceProvider<I>> {
20 public class CompatibilitySchemaSourceProviderInstance implements SchemaSourceProvider<O> {
23 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
24 // TODO Auto-generated method stub
30 private final AdvancedSchemaSourceProvider<I> defaultDelegate;
32 protected AbstractCachingSchemaSourceProvider(AdvancedSchemaSourceProvider<I> delegate) {
33 this.defaultDelegate = delegate;
37 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
38 checkNotNull(moduleName, "Module name should not be null.");
39 checkNotNull(revision, "Revision should not be null");
40 return getSchemaSource(SourceIdentifier.create(moduleName, revision));
44 public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
45 return getSchemaSourceImpl(sourceIdentifier, defaultDelegate);
48 protected final Optional<O> getSchemaSourceImpl(SourceIdentifier identifier,
49 AdvancedSchemaSourceProvider<I> delegate) {
50 checkNotNull(identifier, "Source identifier name should not be null.");
52 Optional<O> cached = getCachedSchemaSource(identifier);
53 if (cached.isPresent()) {
56 Optional<I> live = delegate.getSchemaSource(identifier);
57 return cacheSchemaSource(identifier, live);
60 abstract protected Optional<O> cacheSchemaSource(SourceIdentifier identifier, Optional<I> stream);
62 abstract protected Optional<O> getCachedSchemaSource(SourceIdentifier identifier);
64 public AdvancedSchemaSourceProvider<I> getDelegate() {
65 return defaultDelegate;
68 public SchemaSourceProvider<O> createInstanceFor(SchemaSourceProvider<I> delegate) {
69 checkNotNull(delegate, "Delegate should not be null");
70 return new SchemaSourceProviderInstance(SchemaSourceProviders.toAdvancedSchemaSourceProvider(delegate));
74 private class SchemaSourceProviderInstance implements //
75 AdvancedSchemaSourceProvider<O>,
76 Delegator<AdvancedSchemaSourceProvider<I>> {
78 private final AdvancedSchemaSourceProvider<I> delegate;
80 protected SchemaSourceProviderInstance(AdvancedSchemaSourceProvider<I> delegate) {
82 this.delegate = delegate;
86 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
87 return getSchemaSource(SourceIdentifier.create(moduleName, revision));
91 public AdvancedSchemaSourceProvider<I> getDelegate() {
96 public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
97 return getSchemaSourceImpl(sourceIdentifier, getDelegate());