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 com.google.common.base.Optional;
13 import static com.google.common.base.Preconditions.*;
15 public abstract class AbstractCachingSchemaSourceProvider<I, O> implements AdvancedSchemaSourceProvider<O>,
16 Delegator<AdvancedSchemaSourceProvider<I>> {
18 public class CompatibilitySchemaSourceProviderInstance implements SchemaSourceProvider<O> {
21 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
22 // TODO Auto-generated method stub
28 private final AdvancedSchemaSourceProvider<I> defaultDelegate;
30 protected AbstractCachingSchemaSourceProvider(AdvancedSchemaSourceProvider<I> delegate) {
31 this.defaultDelegate = delegate;
35 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
36 checkNotNull(moduleName, "Module name should not be null.");
37 checkNotNull(revision, "Revision should not be null");
38 return getSchemaSource(SourceIdentifier.create(moduleName, revision));
42 public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
43 return getSchemaSourceImpl(sourceIdentifier, defaultDelegate);
46 protected final Optional<O> getSchemaSourceImpl(SourceIdentifier identifier,
47 AdvancedSchemaSourceProvider<I> delegate) {
48 checkNotNull(identifier, "Source identifier name should not be null.");
50 Optional<O> cached = getCachedSchemaSource(identifier);
51 if (cached.isPresent()) {
54 Optional<I> live = delegate.getSchemaSource(identifier);
55 return cacheSchemaSource(identifier, live);
58 abstract protected Optional<O> cacheSchemaSource(SourceIdentifier identifier, Optional<I> stream);
60 abstract protected Optional<O> getCachedSchemaSource(SourceIdentifier identifier);
62 public AdvancedSchemaSourceProvider<I> getDelegate() {
63 return defaultDelegate;
66 public SchemaSourceProvider<O> createInstanceFor(SchemaSourceProvider<I> delegate) {
67 checkNotNull(delegate, "Delegate should not be null");
68 return new SchemaSourceProviderInstance(SchemaSourceProviders.toAdvancedSchemaSourceProvider(delegate));
72 private class SchemaSourceProviderInstance implements //
73 AdvancedSchemaSourceProvider<O>,
74 Delegator<AdvancedSchemaSourceProvider<I>> {
76 private final AdvancedSchemaSourceProvider<I> delegate;
78 protected SchemaSourceProviderInstance(AdvancedSchemaSourceProvider<I> delegate) {
80 this.delegate = delegate;
84 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
85 return getSchemaSource(SourceIdentifier.create(moduleName, revision));
89 public AdvancedSchemaSourceProvider<I> getDelegate() {
94 public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
95 return getSchemaSourceImpl(sourceIdentifier, getDelegate());