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 / SchemaSourceProviders.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.yangtools.yang.model.util.repo;
9
10 import java.io.InputStream;
11 import java.io.StringBufferInputStream;
12
13 import org.opendaylight.yangtools.concepts.Delegator;
14
15 import com.google.common.base.Optional;
16
17 public class SchemaSourceProviders {
18
19     @SuppressWarnings("rawtypes")
20     private static final SchemaSourceProvider NOOP_PROVIDER = new AdvancedSchemaSourceProvider() {
21
22         @Override
23         public Optional getSchemaSource(String moduleName, Optional revision) {
24             return Optional.absent();
25         }
26
27         @Override
28         public Optional getSchemaSource(SourceIdentifier sourceIdentifier) {
29             return Optional.absent();
30         }
31
32     };
33
34     @SuppressWarnings("unchecked")
35     public static <T> SchemaSourceProvider<T> noopProvider() {
36         return (SchemaSourceProvider<T>) NOOP_PROVIDER;
37     }
38
39     public static SchemaSourceProvider<InputStream> inputStreamProviderfromStringProvider(
40             AdvancedSchemaSourceProvider<String> delegate) {
41         return new StringToInputStreamSchemaSourceProvider(delegate);
42     }
43
44     public static <O> AdvancedSchemaSourceProvider<O> toAdvancedSchemaSourceProvider(SchemaSourceProvider<O> schemaSourceProvider) {
45         if (schemaSourceProvider instanceof AdvancedSchemaSourceProvider<?>) {
46             return (AdvancedSchemaSourceProvider<O>) schemaSourceProvider;
47         }
48         return new SchemaSourceCompatibilityWrapper<O>(schemaSourceProvider);
49     }
50
51     private final static class StringToInputStreamSchemaSourceProvider implements //
52             AdvancedSchemaSourceProvider<InputStream>, Delegator<AdvancedSchemaSourceProvider<String>> {
53
54         private AdvancedSchemaSourceProvider<String> delegate;
55
56         public StringToInputStreamSchemaSourceProvider(AdvancedSchemaSourceProvider<String> delegate) {
57             this.delegate = delegate;
58         }
59
60         @Override
61         public AdvancedSchemaSourceProvider<String> getDelegate() {
62             return delegate;
63         }
64
65         @Override
66         public Optional<InputStream> getSchemaSource(SourceIdentifier sourceIdentifier) {
67             Optional<String> potentialSource = getDelegate().getSchemaSource(sourceIdentifier);
68             if (potentialSource.isPresent()) {
69                 String stringSource = potentialSource.get();
70                 @SuppressWarnings("deprecation")
71                 StringBufferInputStream stringInputStream = new StringBufferInputStream(stringSource);
72                 return Optional.<InputStream> of(stringInputStream);
73             }
74             return Optional.absent();
75         }
76
77         @Override
78         public Optional<InputStream> getSchemaSource(String moduleName, Optional<String> revision) {
79             return getSchemaSource(SourceIdentifier.create(moduleName, revision));
80         }
81     }
82
83     private final static class SchemaSourceCompatibilityWrapper<O> implements //
84             AdvancedSchemaSourceProvider<O>, //
85             Delegator<SchemaSourceProvider<O>> {
86
87         private final SchemaSourceProvider<O> delegate;
88
89         public SchemaSourceCompatibilityWrapper(SchemaSourceProvider<O> delegate) {
90             this.delegate = delegate;
91         }
92
93         @Override
94         public SchemaSourceProvider<O> getDelegate() {
95             return delegate;
96         }
97         
98         @Override
99         public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
100             
101             final String moduleName = sourceIdentifier.getName();
102             Optional<String> revision = Optional.fromNullable(sourceIdentifier.getRevision());
103             return delegate.getSchemaSource(moduleName, revision);
104         }
105         
106         @Override
107         public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
108             return delegate.getSchemaSource(moduleName, revision);
109         }
110     }
111
112 }