BUG-7054: add YinStatementStreamSource
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / YinStatementSourceImpl.java
1 /*
2  * Copyright (c) 2015 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/epl-v10.html
7  */
8
9 package org.opendaylight.yangtools.yang.parser.stmt.rfc6020;
10
11 import com.google.common.base.Throwables;
12 import com.google.common.collect.ForwardingObject;
13 import com.google.common.io.ByteSource;
14 import com.google.common.io.ByteStreams;
15 import com.google.common.io.Files;
16 import java.io.File;
17 import java.io.InputStream;
18 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
19 import org.opendaylight.yangtools.yang.model.repo.api.YinDomSchemaSource;
20 import org.opendaylight.yangtools.yang.model.repo.api.YinTextSchemaSource;
21 import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YinStatementStreamSource;
22 import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YinTextToDomTransformer;
23 import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule;
24 import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition;
25 import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource;
26 import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter;
27
28 /**
29  *
30  * This class represents implementation of StatementStreamSource
31  * in order to emit YIN statements using supplied StatementWriter
32  *
33  * @deprecated Scheduled for removal. Use {@link YinStatementStreamSource} instead.
34  */
35 @Deprecated
36 public final class YinStatementSourceImpl extends ForwardingObject implements StatementStreamSource {
37     private final StatementStreamSource delegate;
38
39     private YinStatementSourceImpl(final YinDomSchemaSource source) {
40         this.delegate = YinStatementStreamSource.create(source);
41     }
42
43     @Override
44     public StatementStreamSource delegate() {
45         return delegate;
46     }
47
48     public YinStatementSourceImpl(final InputStream inputStream) {
49         this(newStreamSource(inputStream));
50     }
51
52     private static YinDomSchemaSource newStreamSource(final InputStream inputStream) {
53         final SourceIdentifier id = YinTextSchemaSource.identifierFromFilename(inputStream.toString());
54
55         try {
56             final YinTextSchemaSource text = YinTextSchemaSource.delegateForByteSource(id,
57                 ByteSource.wrap(ByteStreams.toByteArray(inputStream)));
58             return YinTextToDomTransformer.TRANSFORMATION.apply(text).get();
59         } catch (Exception e) {
60             throw Throwables.propagate(e);
61         }
62     }
63
64     private static YinDomSchemaSource newStreamSource(final String fileName, final boolean isAbsolute) {
65         try {
66             final File file;
67             if (isAbsolute) {
68                 file = new File(fileName);
69             } else {
70                 file = new File(YinStatementSourceImpl.class.getResource(fileName).toURI());
71             }
72
73             final YinTextSchemaSource text = YinTextSchemaSource.delegateForByteSource(
74                 YinTextSchemaSource.identifierFromFilename(file.getName()), Files.asByteSource(file));
75
76             return YinTextToDomTransformer.TRANSFORMATION.apply(text).get();
77         } catch (Exception e) {
78             throw Throwables.propagate(e);
79         }
80     }
81
82     public YinStatementSourceImpl(final String fileName, final boolean isAbsolute) {
83         this(newStreamSource(fileName, isAbsolute));
84     }
85
86     @Override
87     public void writePreLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) {
88         delegate.writePreLinkage(writer, stmtDef);
89     }
90
91     @Override
92     public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
93             final PrefixToModule preLinkagePrefixes) {
94         delegate.writeLinkage(writer, stmtDef, preLinkagePrefixes);
95
96     }
97
98     @Override
99     public void writeLinkageAndStatementDefinitions(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
100             final PrefixToModule prefixes) {
101         delegate.writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes);
102     }
103
104     @Override
105     public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
106             final PrefixToModule prefixes) {
107         delegate().writeFull(writer, stmtDef, prefixes);
108     }
109
110
111 }