2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
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
8 package org.opendaylight.controller.yang;
11 import java.util.ArrayList;
12 import java.util.HashSet;
13 import java.util.List;
16 import org.opendaylight.controller.sal.binding.generator.api.BindingGenerator;
17 import org.opendaylight.controller.sal.binding.generator.impl.BindingGeneratorImpl;
18 import org.opendaylight.controller.sal.binding.model.api.GeneratedTransferObject;
19 import org.opendaylight.controller.sal.binding.model.api.GeneratedType;
20 import org.opendaylight.controller.sal.binding.model.api.Type;
21 import org.opendaylight.controller.sal.java.api.generator.GeneratorJavaFile;
22 import org.opendaylight.controller.yang.model.api.Module;
23 import org.opendaylight.controller.yang.model.api.SchemaContext;
24 import org.opendaylight.controller.yang.parser.impl.YangParserImpl;
27 private static final String ERR_MSG = "2 parameters expected: 1. -f=<path-to-input-folder>, 2. -o=<output-folder>";
29 public static void main(String[] args) throws Exception {
30 if (args.length != 2) {
31 System.err.println(ERR_MSG);
35 String inputFilesDir = null;
36 String outputFilesDir = null;
37 if (args[0].startsWith("-f=")) {
38 inputFilesDir = args[0].substring(3);
40 System.err.println("Missing input-folder declaration (-f=)");
43 if (args[1].startsWith("-o=")) {
44 outputFilesDir = args[1].substring(3);
46 System.err.println("Missing output-folder declaration (-o=)");
49 File resourceDir = new File(inputFilesDir);
50 if (!resourceDir.exists()) {
51 throw new IllegalArgumentException(
52 "Specified input-folder does not exists: "
53 + resourceDir.getAbsolutePath());
56 final File outputFolder = new File(outputFilesDir);
57 if (!outputFolder.exists()) {
58 outputFolder.mkdirs();
61 String[] dirList = resourceDir.list();
62 List<File> inputFiles = new ArrayList<File>();
63 for (String fileName : dirList) {
64 inputFiles.add(new File(resourceDir, fileName));
67 final YangParserImpl parser = new YangParserImpl();
68 final BindingGenerator bindingGenerator = new BindingGeneratorImpl();
69 final Set<Module> modulesToBuild = parser.parseYangModels(inputFiles);
71 final SchemaContext context = parser
72 .resolveSchemaContext(modulesToBuild);
73 final List<Type> types = bindingGenerator.generateTypes(context);
74 final Set<GeneratedType> typesToGenerate = new HashSet<GeneratedType>();
75 final Set<GeneratedTransferObject> tosToGenerate = new HashSet<GeneratedTransferObject>();
76 for (Type type : types) {
77 if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) {
78 typesToGenerate.add((GeneratedType) type);
81 if (type instanceof GeneratedTransferObject) {
82 tosToGenerate.add((GeneratedTransferObject) type);
83 } else if (type instanceof GeneratedType) {
84 typesToGenerate.add((GeneratedType) type);
88 final GeneratorJavaFile generator = new GeneratorJavaFile(typesToGenerate, tosToGenerate);
90 generator.generateToFile(outputFolder);
91 System.out.println("Modules built: " + modulesToBuild.size());