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 package org.opendaylight.yangtools.yang.model.util.repo;
2
3 import java.io.InputStream;
4 import java.io.StringBufferInputStream;
5
6 import org.opendaylight.yangtools.concepts.Delegator;
7
8 import com.google.common.base.Optional;
9
10 public class SchemaSourceProviders {
11
12     @SuppressWarnings("rawtypes")
13     private static final SchemaSourceProvider NOOP_PROVIDER = new SchemaSourceProvider() {
14
15         @Override
16         public Optional getSchemaSource(String moduleName, Optional revision) {
17             return Optional.absent();
18         }
19
20         @Override
21         public Optional getSchemaSource(SourceIdentifier sourceIdentifier) {
22             return Optional.absent();
23         }
24
25     };
26
27     @SuppressWarnings("unchecked")
28     public static <T> SchemaSourceProvider<T> noopProvider() {
29         return (SchemaSourceProvider<T>) NOOP_PROVIDER;
30     }
31
32     public static SchemaSourceProvider<InputStream> inputStreamProviderfromStringProvider(
33             SchemaSourceProvider<String> delegate) {
34         return new StringToInputStreamSchemaSourceProvider(delegate);
35     }
36
37     private final static class StringToInputStreamSchemaSourceProvider implements //
38             SchemaSourceProvider<InputStream>, Delegator<SchemaSourceProvider<String>> {
39
40         private SchemaSourceProvider<String> delegate;
41
42         public StringToInputStreamSchemaSourceProvider(SchemaSourceProvider<String> delegate) {
43             this.delegate = delegate;
44         }
45
46         @Override
47         public SchemaSourceProvider<String> getDelegate() {
48             return delegate;
49         }
50
51         @Override
52         public Optional<InputStream> getSchemaSource(SourceIdentifier sourceIdentifier) {
53             Optional<String> potential = getDelegate().getSchemaSource(sourceIdentifier);
54             if (potential.isPresent()) {
55                 String stringStream = potential.get();
56                 return Optional.<InputStream> of(new StringBufferInputStream(stringStream));
57             }
58             return Optional.absent();
59         }
60
61         @Override
62         public Optional<InputStream> getSchemaSource(String moduleName, Optional<String> revision) {
63             return getSchemaSource(SourceIdentifier.create(moduleName, revision));
64         }
65     }
66
67 }