Added method 'parseYangModels(File yangFile, File directory)'. Method is usefull if user don't want to explicitly specify all yang files, but define only yang files destination directory instead.
Signed-off-by: Martin Vitez <mvitez@cisco.com>
*/
public interface YangModelParser {
+ /**
+ * Parse yangFile file and all yang files found in directory.
+ *
+ * @param yangFile
+ * file to parse
+ * @param directory
+ * directory which contains additional yang files
+ * @return Set of Yang Modules
+ */
+ Set<Module> parseYangModels(final File yangFile, final File directory);
+
/**
* Parse one or more Yang model files and return the definitions of Yang
* modules defined in *.yang files; <br>
import java.util.Set;
import java.util.TreeMap;
+import com.google.common.base.Preconditions;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.tree.ParseTree;
private static final String FAIL_DEVIATION_TARGET = "Failed to find deviation target.";
+ @Override
+ public Set<Module> parseYangModels(final File yangFile, final File directory) {
+ Preconditions.checkState(yangFile.exists(), yangFile + " does not exists");
+ Preconditions.checkState(directory.exists(), directory + " does not exists");
+ Preconditions.checkState(directory.isDirectory(), directory + " is not a directory");
+
+ final String yangFileName = yangFile.getName();
+ final String[] fileList = directory.list();
+ Preconditions.checkNotNull(fileList, directory + " not found");
+
+ final List<File> modules = new ArrayList<>();
+ for (String fileName : fileList) {
+ if (fileName.equals(yangFileName)) {
+ continue;
+ }
+ modules.add(new File(directory, fileName));
+ }
+ modules.add(yangFile);
+
+ return parseYangModels(modules);
+ }
+
@Override
public Set<Module> parseYangModels(final List<File> yangFiles) {
return Sets.newLinkedHashSet(parseYangModelsMapped(yangFiles).values());
import static org.junit.Assert.*;
+import java.io.File;
import java.io.FileNotFoundException;
import java.net.URI;
+import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.opendaylight.yangtools.yang.model.api.type.LengthConstraint;
import org.opendaylight.yangtools.yang.model.api.type.PatternConstraint;
import org.opendaylight.yangtools.yang.model.api.type.StringTypeDefinition;
+import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;
import org.opendaylight.yangtools.yang.model.util.BitsType;
import org.opendaylight.yangtools.yang.model.util.EnumerationType;
import org.opendaylight.yangtools.yang.model.util.ExtendedType;
@Before
public void init() throws FileNotFoundException {
- testedModules = TestUtils.loadModules(getClass().getResource("/types").getPath());
+ File yangFile = new File(getClass().getResource("/types/custom-types-test@2012-4-4.yang").getPath());
+ File dependenciesDir = new File(getClass().getResource("/ietf").getPath());
+ YangModelParser parser = new YangParserImpl();
+ testedModules = parser.parseYangModels(yangFile, dependenciesDir);
}
@Test
import static org.junit.Assert.*;
+import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.junit.Test;
+import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;
import org.opendaylight.yangtools.yang.parser.util.YangParseException;
import org.opendaylight.yangtools.yang.parser.util.YangValidationException;
}
}
+ @Test
+ public void testWrongDependenciesDir() throws Exception {
+ try {
+ File yangFile = new File(getClass().getResource("/types/custom-types-test@2012-4-4.yang").getPath());
+ File dependenciesDir = new File("/invalid");
+ YangModelParser parser = new YangParserImpl();
+ parser.parseYangModels(yangFile, dependenciesDir);
+ fail("Exception should by thrown");
+ } catch (IllegalStateException e) {
+ String expected = "/invalid does not exists";
+ assertEquals(expected, e.getMessage());
+ }
+ }
+
+ @Test
+ public void testWrongDependenciesDir2() throws Exception {
+ try {
+ File yangFile = new File(getClass().getResource("/types/custom-types-test@2012-4-4.yang").getPath());
+ File dependenciesDir = new File(getClass().getResource("/model").getPath());
+ YangModelParser parser = new YangParserImpl();
+ parser.parseYangModels(yangFile, dependenciesDir);
+ fail("Exception should by thrown");
+ } catch (YangValidationException e) {
+ String expected = "Not existing module imported";
+ assertTrue(e.getMessage().contains(expected));
+ }
+ }
+
}
import static org.junit.Assert.*;
+import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URI;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.UsesNode;
import org.opendaylight.yangtools.yang.model.api.type.RangeConstraint;
+import org.opendaylight.yangtools.yang.model.parser.api.YangModelParser;
import org.opendaylight.yangtools.yang.model.util.ExtendedType;
import com.google.common.collect.Lists;
@Test
public void testTypeFromContext() throws Exception {
SchemaContext context = null;
- String resource = "/types/ietf-inet-types@2010-09-24.yang";
+ String resource = "/ietf/ietf-inet-types@2010-09-24.yang";
InputStream stream = new FileInputStream(getClass().getResource(resource).getPath());
context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream)));
stream.close();
@Test
public void testIdentity() throws Exception {
SchemaContext context = null;
- try (InputStream stream = new FileInputStream(getClass().getResource("/types/custom-types-test@2012-4-4.yang")
- .getPath())) {
- context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream)));
- }
+ File yangFile = new File(getClass().getResource("/types/custom-types-test@2012-4-4.yang").getPath());
+ File dependenciesDir = new File(getClass().getResource("/ietf").getPath());
+ YangModelParser parser = new YangParserImpl();
+ context = parser.resolveSchemaContext(parser.parseYangModels(yangFile, dependenciesDir));
+
Module module = null;
try (InputStream stream = new FileInputStream(getClass().getResource("/context-test/test3.yang").getPath())) {
module = TestUtils.loadModuleWithContext(stream, context);
@Test
public void testUnknownNodes() throws Exception {
SchemaContext context = null;
- try (InputStream stream = new FileInputStream(getClass().getResource("/types/custom-types-test@2012-4-4.yang")
- .getPath())) {
- context = parser.resolveSchemaContext(TestUtils.loadModules(Lists.newArrayList(stream)));
- }
+ File yangFile = new File(getClass().getResource("/types/custom-types-test@2012-4-4.yang").getPath());
+ File dependenciesDir = new File(getClass().getResource("/ietf").getPath());
+ YangModelParser parser = new YangParserImpl();
+ context = parser.resolveSchemaContext(parser.parseYangModels(yangFile, dependenciesDir));
Module module = null;
try (InputStream stream = new FileInputStream(getClass().getResource("/context-test/test3.yang").getPath())) {
namespace "urn:custom.types.demo";
prefix "iit";
+ // imports added only for testing purposes
+ import iana-afn-safi {
+ prefix "afn";
+ }
+ import iana-if-type {
+ prefix "if";
+ }
+ import iana-timezones {
+ prefix "tz";
+ }
+ import ietf-inet-types {
+ prefix "inet";
+ }
+ import ietf-yang-types {
+ prefix "yang";
+ }
+
organization "opendaylight";
contact "WILL-BE-DEFINED-LATER";
revision 2012-04-16 {