/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/eplv10.html */ package org.opendaylight.yangtools.yang.model.util.repo; import org.opendaylight.yangtools.concepts.Delegator; import com.google.common.base.Optional; import static com.google.common.base.Preconditions.*; public abstract class AbstractCachingSchemaSourceProvider implements AdvancedSchemaSourceProvider, Delegator> { public class CompatibilitySchemaSourceProviderInstance implements SchemaSourceProvider { @Override public Optional getSchemaSource(String moduleName, Optional revision) { // TODO Auto-generated method stub return null; } } private final AdvancedSchemaSourceProvider defaultDelegate; protected AbstractCachingSchemaSourceProvider(AdvancedSchemaSourceProvider delegate) { this.defaultDelegate = delegate; } @Override public Optional getSchemaSource(String moduleName, Optional revision) { checkNotNull(moduleName, "Module name should not be null."); checkNotNull(revision, "Revision should not be null"); return getSchemaSource(SourceIdentifier.create(moduleName, revision)); } @Override public Optional getSchemaSource(SourceIdentifier sourceIdentifier) { return getSchemaSourceImpl(sourceIdentifier, defaultDelegate); } protected final Optional getSchemaSourceImpl(SourceIdentifier identifier, AdvancedSchemaSourceProvider delegate) { checkNotNull(identifier, "Source identifier name should not be null."); Optional cached = getCachedSchemaSource(identifier); if (cached.isPresent()) { return cached; } Optional live = delegate.getSchemaSource(identifier); return cacheSchemaSource(identifier, live); } abstract protected Optional cacheSchemaSource(SourceIdentifier identifier, Optional stream); abstract protected Optional getCachedSchemaSource(SourceIdentifier identifier); public AdvancedSchemaSourceProvider getDelegate() { return defaultDelegate; } public SchemaSourceProvider createInstanceFor(SchemaSourceProvider delegate) { checkNotNull(delegate, "Delegate should not be null"); return new SchemaSourceProviderInstance(SchemaSourceProviders.toAdvancedSchemaSourceProvider(delegate)); } private class SchemaSourceProviderInstance implements // AdvancedSchemaSourceProvider, Delegator> { private final AdvancedSchemaSourceProvider delegate; protected SchemaSourceProviderInstance(AdvancedSchemaSourceProvider delegate) { super(); this.delegate = delegate; } @Override public Optional getSchemaSource(String moduleName, Optional revision) { return getSchemaSource(SourceIdentifier.create(moduleName, revision)); } @Override public AdvancedSchemaSourceProvider getDelegate() { return delegate; } @Override public Optional getSchemaSource(SourceIdentifier sourceIdentifier) { return getSchemaSourceImpl(sourceIdentifier, getDelegate()); } } }