/*
* 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 com.google.common.collect.ForwardingObject;
import com.google.common.io.ByteSource;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
import java.io.File;
import java.io.InputStream;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
import org.opendaylight.yangtools.yang.model.repo.api.YinDomSchemaSource;
import org.opendaylight.yangtools.yang.model.repo.api.YinTextSchemaSource;
import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YinStatementStreamSource;
import org.opendaylight.yangtools.yang.parser.rfc6020.repo.YinTextToDomTransformer;
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;
/**
* This class represents implementation of StatementStreamSource
* in order to emit YIN statements using supplied StatementWriter.
*
* @deprecated Scheduled for removal. Use {@link YinStatementStreamSource} instead.
*/
@Deprecated
public final class YinStatementSourceImpl extends ForwardingObject implements StatementStreamSource {
private final StatementStreamSource delegate;
private YinStatementSourceImpl(final YinDomSchemaSource source) {
this.delegate = YinStatementStreamSource.create(source);
}
@Override
public StatementStreamSource delegate() {
return delegate;
}
public YinStatementSourceImpl(final InputStream inputStream) {
this(newStreamSource(inputStream));
}
private static YinDomSchemaSource newStreamSource(final InputStream inputStream) {
final SourceIdentifier id = YinTextSchemaSource.identifierFromFilename(inputStream.toString());
try {
final YinTextSchemaSource text = YinTextSchemaSource.delegateForByteSource(id,
ByteSource.wrap(ByteStreams.toByteArray(inputStream)));
return YinTextToDomTransformer.TRANSFORMATION.apply(text).get();
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
private static YinDomSchemaSource newStreamSource(final String fileName, final boolean isAbsolute) {
try {
final File file;
if (isAbsolute) {
file = new File(fileName);
} else {
file = new File(YinStatementSourceImpl.class.getResource(fileName).toURI());
}
final YinTextSchemaSource text = YinTextSchemaSource.delegateForByteSource(
YinTextSchemaSource.identifierFromFilename(file.getName()), Files.asByteSource(file));
return YinTextToDomTransformer.TRANSFORMATION.apply(text).get();
} catch (Exception e) {
throw Throwables.propagate(e);
}
}
public YinStatementSourceImpl(final String fileName, final boolean isAbsolute) {
this(newStreamSource(fileName, isAbsolute));
}
@Override
public void writePreLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef) {
delegate.writePreLinkage(writer, stmtDef);
}
@Override
public void writeLinkage(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
final PrefixToModule preLinkagePrefixes) {
delegate.writeLinkage(writer, stmtDef, preLinkagePrefixes);
}
@Override
public void writeLinkageAndStatementDefinitions(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
final PrefixToModule prefixes) {
delegate.writeLinkageAndStatementDefinitions(writer, stmtDef, prefixes);
}
@Override
public void writeFull(final StatementWriter writer, final QNameToStatementDefinition stmtDef,
final PrefixToModule prefixes) {
delegate().writeFull(writer, stmtDef, prefixes);
}
}