Rename MainNode methods
[yangtools.git] / yang / yang-parser-impl / src / main / java / org / opendaylight / yangtools / yang / parser / stmt / rfc6020 / YangStatementSourceImpl.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 java.io.File;
13 import java.io.IOException;
14 import java.io.InputStream;
15 import java.net.URISyntaxException;
16 import org.antlr.v4.runtime.tree.ParseTreeWalker;
17 import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.StatementContext;
18 import org.opendaylight.yangtools.yang.common.YangVersion;
19 import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
20 import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
21 import org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl;
22 import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangStatementStreamSource;
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 import org.opendaylight.yangtools.yang.parser.util.NamedFileInputStream;
28 import org.opendaylight.yangtools.yang.parser.util.NamedInputStream;
29
30 /**
31  * This class represents implementation of StatementStreamSource in order to emit YANG statements using supplied
32  * StatementWriter.
33  *
34  * @deprecated Use {@link YangStatementStreamSource} instead.
35  */
36 @Deprecated
37 public final class YangStatementSourceImpl implements StatementStreamSource {
38     private final YangStatementParserListenerImpl yangStatementModelParser;
39     private final StatementContext statementContext;
40     private final String sourceName;
41
42     public YangStatementSourceImpl(final String fileName, final boolean isAbsolute) {
43         try {
44             final NamedFileInputStream is = loadFile(fileName, isAbsolute);
45             sourceName = is.toString();
46             statementContext = YangStatementStreamSource.parseYangSource(is);
47             yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
48         } catch (IOException | URISyntaxException | YangSyntaxErrorException e) {
49             throw Throwables.propagate(e);
50         }
51     }
52
53     public YangStatementSourceImpl(final InputStream inputStream) {
54         try {
55             sourceName = inputStream instanceof NamedInputStream ? inputStream.toString() : null;
56             statementContext = YangStatementStreamSource.parseYangSource(inputStream);
57             yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
58         } catch (IOException | YangSyntaxErrorException e) {
59             throw Throwables.propagate(e);
60         }
61     }
62
63     public YangStatementSourceImpl(final SourceIdentifier identifier, final StatementContext statementContext) {
64         this.statementContext = statementContext;
65         this.sourceName = identifier.getName();
66         yangStatementModelParser = new YangStatementParserListenerImpl(sourceName);
67     }
68
69     @Override
70     public void writePreLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) {
71         yangStatementModelParser.setAttributes(writer, stmtDef);
72         ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
73     }
74
75     @Override
76     public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
77             final PrefixToModule preLinkagePrefixes) {
78         writeLinkage(writer, stmtDef, preLinkagePrefixes, YangVersion.VERSION_1);
79     }
80
81     @Override
82     public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
83             final PrefixToModule preLinkagePrefixes, final YangVersion yangVersion) {
84         yangStatementModelParser.setAttributes(writer, stmtDef, preLinkagePrefixes, yangVersion);
85         ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
86     }
87
88     @Override
89     public void writeLinkageAndStatementDefinitions(final StatementWriter writer,
90             final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) {
91         writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes, YangVersion.VERSION_1);
92     }
93
94     @Override
95     public void writeLinkageAndStatementDefinitions(final StatementWriter writer,
96             final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) {
97         yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion);
98         ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
99     }
100
101     @Override
102     public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
103             final PrefixToModule prefixes) {
104         writeFull(writer, stmtDef, prefixes, YangVersion.VERSION_1);
105     }
106
107     @Override
108     public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
109             final PrefixToModule prefixes, final YangVersion yangVersion) {
110         yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion);
111         ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext);
112     }
113
114     private NamedFileInputStream loadFile(final String fileName, final boolean isAbsolute)
115             throws URISyntaxException, IOException {
116         //TODO: we need absolute path first!
117         return isAbsolute ? new NamedFileInputStream(new File(fileName), fileName)
118                 : new NamedFileInputStream(new File(getClass().getResource(fileName).toURI()), fileName);
119     }
120
121     public StatementContext getYangAST() {
122         return statementContext;
123     }
124
125     @Override
126     public String toString() {
127         return sourceName;
128     }
129 }