Commit 66254b4d authored by Philip Makedonski's avatar Philip Makedonski
Browse files

+ added support for loading related yang modules from root parent

parent 942c61ea
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -14,6 +14,8 @@ public class YANGConverter {
//		inputPath = "samples/simple/links.yang";
//		inputPath = "samples/simple/example.yang";
//		inputPath = "samples/simple/acme.yang";
		inputPath = "samples/simple";
		inputPath = "samples";
		String output = processToString(inputPath, inputPath+".tdltx");
		System.out.println(output);
	}
+58 −21
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@ import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;

import org.eclipse.core.resources.IProject;
import org.etsi.mts.tdl.CollectionDataType;
import org.etsi.mts.tdl.DataType;
import org.etsi.mts.tdl.EnumDataType;
@@ -19,6 +20,7 @@ import org.etsi.mts.tdl.StructuredDataInstance;
import org.etsi.mts.tdl.StructuredDataType;
import org.etsi.mts.tdl.tdlFactory;
import org.etsi.mts.tdl.tdlPackage;
import org.etsi.mts.tdl.helper.TDLHelper;
import org.etsi.mts.tdl.transform.AbstractTranslator;
import org.opendaylight.yangtools.odlext.parser.MountStatementSupport;
import org.opendaylight.yangtools.yang.common.QName;
@@ -72,34 +74,69 @@ public class Yang2TDLTranslator extends AbstractTranslator {
		drm = getTypeFor(sourceMappingTag, tdlPackage.Literals.DATA_RESOURCE_MAPPING);
		drm.setResourceURI(new File(targetFilename).getName());
		
		//TODO: resolve files
		//TODO: extract
        CrossSourceStatementReactor reactor = createReactor();
		BuildAction build = reactor.newBuild();
		Files.list(Path.of("samples", "ietf"))
			.filter(p->p.toString().endsWith("yang"))
			.forEach(p -> 
			build.addLibSource(moduleFromPath(p.toString()))
		);
		Files.list(Path.of("samples", "nfv"))
			.filter(p->p.toString().endsWith("yang"))
			.forEach(p -> 
			build.addSource(moduleFromPath(p.toString()))

		//TODO: extract
		//DONE: resolve files -> load everything from the root folder (naive approach)
		//TODO: handle folders as well?
		//TODO: handle duplicates modules?
		System.out.println("Load YANG libraries from parent:");
		Path target = Path.of(targetFilename);
		Path parent = target;
		while (parent.getParent() != null) {
			parent = parent.getParent();
		}
		if (parent != target) {
			Files.walk(parent).filter(f->
					f.toFile().isFile() &&
					f.toString().endsWith(".yang") &&
					!f.toString().equals(targetFilename)
				).forEach(f -> {
					System.out.println(f);
					build.addLibSource(moduleFromPath(f.toString()));
				}
			);
//		Files.list(Path.of("samples", "mwt"))
//		Files.find(parent, 20, (f, p) -> 
//			p.isRegularFile() && 
//			f.toString().endsWith(".yang") &&
//			!f.toString().equals(targetFilename)
//		).forEach(f -> {
//				System.out.println(f);
//				build.addLibSource(moduleFromPath(f.toString()));
//			}
//		);
		}

		//TODO: provide some base libraries by default?
//		Files.list(Path.of("samples", "ietf"))
//			.filter(p->p.toString().endsWith("yang"))
//			.forEach(p -> 
//			build.addSource(moduleFromPath(p.toString()))
//			build.addLibSource(moduleFromPath(p.toString()))
//		);
//		Files.list(Path.of("samples", "simple"))
		System.out.println("Processing: "+target);
		if (target.toFile().isDirectory()) {
			Files.walk(target).filter(f->
					f.toFile().isFile() &&
					f.toString().endsWith(".yang") &&
					!f.toString().equals(targetFilename)
					).forEach(f -> {
						System.out.println(f);
						build.addSource(moduleFromPath(f.toString()));
					}
				);
			//non-recursive version
//			Files.list(target)
//				.filter(p->p.toString().endsWith("yang"))
//				.forEach(p -> 
//				build.addSource(moduleFromPath(p.toString()))
//			);
//		build.addSource(moduleFromPath(targetFilename));
		} else {
			build.addSource(moduleFromPath(targetFilename));
		}
		SchemaContext schemaContext = build.buildEffective();
		//TODO: handle multimodule paths?
		//TODO: include meta-data
		//TODO: handle multimodule paths? -> can handle folders recursively
		//TODO: include meta-data -> need to sort out multipe annotations
		//TODO: library of built-in types
		//TODO: add extensions
		translate(schemaContext);