/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; import com.google.common.base.Throwables; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.URISyntaxException; import org.antlr.v4.runtime.tree.ParseTreeWalker; import org.opendaylight.yangtools.antlrv4.code.gen.YangStatementParser.StatementContext; import org.opendaylight.yangtools.yang.common.YangVersion; import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException; import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier; import org.opendaylight.yangtools.yang.parser.impl.YangStatementParserListenerImpl; import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YangStatementStreamSource; import org.opendaylight.yangtools.yang.parser.spi.source.PrefixToModule; import org.opendaylight.yangtools.yang.parser.spi.source.QNameToStatementDefinition; import org.opendaylight.yangtools.yang.parser.spi.source.StatementStreamSource; import org.opendaylight.yangtools.yang.parser.spi.source.StatementWriter; import org.opendaylight.yangtools.yang.parser.util.NamedFileInputStream; import org.opendaylight.yangtools.yang.parser.util.NamedInputStream; /** * This class represents implementation of StatementStreamSource in order to emit YANG statements using supplied * StatementWriter. * * @deprecated Use {@link YangStatementStreamSource} instead. */ @Deprecated public final class YangStatementSourceImpl implements StatementStreamSource { private final YangStatementParserListenerImpl yangStatementModelParser; private final StatementContext statementContext; private final String sourceName; public YangStatementSourceImpl(final String fileName, final boolean isAbsolute) { try { final NamedFileInputStream is = loadFile(fileName, isAbsolute); sourceName = is.toString(); statementContext = YangStatementStreamSource.parseYangSource(is); yangStatementModelParser = new YangStatementParserListenerImpl(sourceName); } catch (IOException | URISyntaxException | YangSyntaxErrorException e) { throw Throwables.propagate(e); } } public YangStatementSourceImpl(final InputStream inputStream) { try { sourceName = inputStream instanceof NamedInputStream ? inputStream.toString() : null; statementContext = YangStatementStreamSource.parseYangSource(inputStream); yangStatementModelParser = new YangStatementParserListenerImpl(sourceName); } catch (IOException | YangSyntaxErrorException e) { throw Throwables.propagate(e); } } public YangStatementSourceImpl(final SourceIdentifier identifier, final StatementContext statementContext) { this.statementContext = statementContext; this.sourceName = identifier.getName(); yangStatementModelParser = new YangStatementParserListenerImpl(sourceName); } @Override public void writePreLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) { yangStatementModelParser.setAttributes(writer, stmtDef); ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext); } @Override public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule preLinkagePrefixes) { writeLinkage(writer, stmtDef, preLinkagePrefixes, YangVersion.VERSION_1); } @Override public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule preLinkagePrefixes, final YangVersion yangVersion) { yangStatementModelParser.setAttributes(writer, stmtDef, preLinkagePrefixes, yangVersion); ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext); } @Override public void writeLinkageAndStatementDefinitions(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) { writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes, YangVersion.VERSION_1); } @Override public void writeLinkageAndStatementDefinitions(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) { yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion); ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext); } @Override public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes) { writeFull(writer, stmtDef, prefixes, YangVersion.VERSION_1); } @Override public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef, final PrefixToModule prefixes, final YangVersion yangVersion) { yangStatementModelParser.setAttributes(writer, stmtDef, prefixes, yangVersion); ParseTreeWalker.DEFAULT.walk(yangStatementModelParser, statementContext); } private NamedFileInputStream loadFile(final String fileName, final boolean isAbsolute) throws URISyntaxException, IOException { //TODO: we need absolute path first! return isAbsolute ? new NamedFileInputStream(new File(fileName), fileName) : new NamedFileInputStream(new File(getClass().getResource(fileName).toURI()), fileName); } public StatementContext getYangAST() { return statementContext; } @Override public String toString() { return sourceName; } }