Added support for parsing submodules & added dependency utility parser
[yangtools.git] / yang / yang-model-util / src / main / java / org / opendaylight / yangtools / yang / model / util / repo / AbstractCachingSchemaSourceProvider.java
index 021531e21f5ca254f441a8e8c340c8423cbd6ef7..f3f2c2ca0ad384f3e10b0e8f6a4c7e02449de68d 100644 (file)
@@ -1,3 +1,10 @@
+/*
+ * 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;
@@ -7,63 +14,87 @@ import com.google.common.base.Optional;
 
 import static com.google.common.base.Preconditions.*;
 
-public abstract class AbstractCachingSchemaSourceProvider<I, O> implements SchemaSourceProvider<O>,
-        Delegator<SchemaSourceProvider<I>> {
+public abstract class AbstractCachingSchemaSourceProvider<I, O> implements AdvancedSchemaSourceProvider<O>,
+        Delegator<AdvancedSchemaSourceProvider<I>> {
 
-    private final SchemaSourceProvider<I> defaultDelegate;
+    public class CompatibilitySchemaSourceProviderInstance implements SchemaSourceProvider<O> {
 
-    protected AbstractCachingSchemaSourceProvider(SchemaSourceProvider<I> delegate) {
+        @Override
+        public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+    }
+
+    private final AdvancedSchemaSourceProvider<I> defaultDelegate;
+
+    protected AbstractCachingSchemaSourceProvider(AdvancedSchemaSourceProvider<I> delegate) {
         this.defaultDelegate = delegate;
     }
 
     @Override
     public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
-        return getSchemaSourceImpl(moduleName, revision, defaultDelegate);
-    }
-
-    private Optional<O> getSchemaSourceImpl(String moduleName, Optional<String> revision,
-            SchemaSourceProvider<I> delegate) {
         checkNotNull(moduleName, "Module name should not be null.");
         checkNotNull(revision, "Revision should not be null");
+        return getSchemaSource(SourceIdentifier.create(moduleName, revision));
+    }
+    
+    @Override
+    public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
+        return getSchemaSourceImpl(sourceIdentifier, defaultDelegate);
+    }
 
-        Optional<O> cached = getCachedSchemaSource(moduleName, revision);
+    protected final Optional<O> getSchemaSourceImpl(SourceIdentifier identifier,
+            AdvancedSchemaSourceProvider<I> delegate) {
+        checkNotNull(identifier, "Source identifier name should not be null.");
+
+        Optional<O> cached = getCachedSchemaSource(identifier);
         if (cached.isPresent()) {
             return cached;
         }
-        Optional<I> live = delegate.getSchemaSource(moduleName, revision);
-        return cacheSchemaSource(moduleName, revision, live);
+        Optional<I> live = delegate.getSchemaSource(identifier);
+        return cacheSchemaSource(identifier, live);
     }
 
-    abstract protected Optional<O> cacheSchemaSource(String moduleName, Optional<String> revision, Optional<I> stream);
+    abstract protected Optional<O> cacheSchemaSource(SourceIdentifier identifier, Optional<I> stream);
 
-    abstract protected Optional<O> getCachedSchemaSource(String moduleName, Optional<String> revision);
+    abstract protected Optional<O> getCachedSchemaSource(SourceIdentifier identifier);
 
-    public SchemaSourceProvider<I> getDelegate() {
+    public AdvancedSchemaSourceProvider<I> getDelegate() {
         return defaultDelegate;
     }
 
     public SchemaSourceProvider<O> createInstanceFor(SchemaSourceProvider<I> delegate) {
         checkNotNull(delegate, "Delegate should not be null");
-        return new SchemaSourceProviderInstance(delegate);
+        return new SchemaSourceProviderInstance(SchemaSourceProviders.toAdvancedSchemaSourceProvider(delegate));
+            
     }
 
-    private class SchemaSourceProviderInstance implements SchemaSourceProvider<O>, Delegator<SchemaSourceProvider<I>> {
+    private class SchemaSourceProviderInstance implements //
+    AdvancedSchemaSourceProvider<O>, 
+    Delegator<AdvancedSchemaSourceProvider<I>> {
 
-        private final SchemaSourceProvider<I> delegate;
+        private final AdvancedSchemaSourceProvider<I> delegate;
 
-        protected SchemaSourceProviderInstance(SchemaSourceProvider<I> delegate) {
+        protected SchemaSourceProviderInstance(AdvancedSchemaSourceProvider<I> delegate) {
             super();
             this.delegate = delegate;
         }
 
         @Override
         public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
-            return getSchemaSourceImpl(moduleName, revision, getDelegate());
+            return getSchemaSource(SourceIdentifier.create(moduleName, revision));
         }
 
         @Override
-        public SchemaSourceProvider<I> getDelegate() {
+        public AdvancedSchemaSourceProvider<I> getDelegate() {
             return delegate;
         }
+
+        @Override
+        public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
+            return getSchemaSourceImpl(sourceIdentifier, getDelegate());
+        }
     }
 }