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 java.io.InputStream;
11 import java.io.StringBufferInputStream;
13 import org.opendaylight.yangtools.concepts.Delegator;
15 import com.google.common.base.Optional;
17 public class SchemaSourceProviders {
19 @SuppressWarnings("rawtypes")
20 private static final SchemaSourceProvider NOOP_PROVIDER = new AdvancedSchemaSourceProvider() {
23 public Optional getSchemaSource(String moduleName, Optional revision) {
24 return Optional.absent();
28 public Optional getSchemaSource(SourceIdentifier sourceIdentifier) {
29 return Optional.absent();
34 @SuppressWarnings("unchecked")
35 public static <T> SchemaSourceProvider<T> noopProvider() {
36 return (SchemaSourceProvider<T>) NOOP_PROVIDER;
39 public static SchemaSourceProvider<InputStream> inputStreamProviderfromStringProvider(
40 AdvancedSchemaSourceProvider<String> delegate) {
41 return new StringToInputStreamSchemaSourceProvider(delegate);
44 public static <O> AdvancedSchemaSourceProvider<O> toAdvancedSchemaSourceProvider(SchemaSourceProvider<O> schemaSourceProvider) {
45 if (schemaSourceProvider instanceof AdvancedSchemaSourceProvider<?>) {
46 return (AdvancedSchemaSourceProvider<O>) schemaSourceProvider;
48 return new SchemaSourceCompatibilityWrapper<O>(schemaSourceProvider);
51 private final static class StringToInputStreamSchemaSourceProvider implements //
52 AdvancedSchemaSourceProvider<InputStream>, Delegator<AdvancedSchemaSourceProvider<String>> {
54 private AdvancedSchemaSourceProvider<String> delegate;
56 public StringToInputStreamSchemaSourceProvider(AdvancedSchemaSourceProvider<String> delegate) {
57 this.delegate = delegate;
61 public AdvancedSchemaSourceProvider<String> getDelegate() {
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);
74 return Optional.absent();
78 public Optional<InputStream> getSchemaSource(String moduleName, Optional<String> revision) {
79 return getSchemaSource(SourceIdentifier.create(moduleName, revision));
83 private final static class SchemaSourceCompatibilityWrapper<O> implements //
84 AdvancedSchemaSourceProvider<O>, //
85 Delegator<SchemaSourceProvider<O>> {
87 private final SchemaSourceProvider<O> delegate;
89 public SchemaSourceCompatibilityWrapper(SchemaSourceProvider<O> delegate) {
90 this.delegate = delegate;
94 public SchemaSourceProvider<O> getDelegate() {
99 public Optional<O> getSchemaSource(SourceIdentifier sourceIdentifier) {
101 final String moduleName = sourceIdentifier.getName();
102 Optional<String> revision = Optional.fromNullable(sourceIdentifier.getRevision());
103 return delegate.getSchemaSource(moduleName, revision);
107 public Optional<O> getSchemaSource(String moduleName, Optional<String> revision) {
108 return delegate.getSchemaSource(moduleName, revision);