import static org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil.*;
import static org.opendaylight.yangtools.binding.generator.util.BindingTypes.*;
import static org.opendaylight.yangtools.yang.model.util.SchemaContextUtil.*;
-
+import org.opendaylight.yangtools.yang.parser.util.ModuleDependencySort\r
\r
public class BindingGeneratorImpl implements BindingGenerator {\r
\r
schemaContext = context;\r
typeProvider = new TypeProviderImpl(context);\r
val Set<Module> modules = context.modules;\r
- genTypeBuilders = new HashMap();\r
- for (module : modules) {\r
-\r
- generatedTypes.addAll(allGroupingsToGenTypes(module));\r
-\r
- if (false == module.childNodes.isEmpty()) {\r
- generatedTypes.add(moduleToDataType(module));\r
- }\r
- generatedTypes.addAll(allTypeDefinitionsToGenTypes(module));\r
- generatedTypes.addAll(allContainersToGenTypes(module));\r
- generatedTypes.addAll(allListsToGenTypes(module));\r
- generatedTypes.addAll(allChoicesToGenTypes(module));\r
- generatedTypes.addAll(allRPCMethodsToGenType(module));\r
- generatedTypes.addAll(allNotificationsToGenType(module));\r
- generatedTypes.addAll(allIdentitiesToGenTypes(module, context));\r
- }\r
- for (module : modules) {\r
- generatedTypes.addAll(allAugmentsToGenTypes(module));\r
- \r
- }\r
- return generatedTypes;\r
+ return generateTypes(context,modules);
}\r
\r
/**\r
checkState(context.modules !== null,"Schema Context does not contain defined modules.");\r
checkArgument(modules !== null,"Set of Modules cannot be NULL.");\r
\r
- val List<Type> filteredGenTypes = new ArrayList();\r
+ val List<Type> filteredGenTypes = new ArrayList();
+ \r
schemaContext = context;\r
typeProvider = new TypeProviderImpl(context);\r
- val Set<Module> contextModules = context.modules;\r
+ val contextModules = ModuleDependencySort.sort(context.modules);\r
genTypeBuilders = new HashMap();\r
\r
for (contextModule : contextModules) {\r
val List<Type> generatedTypes = new ArrayList();\r
-\r
+ generatedTypes.addAll(allTypeDefinitionsToGenTypes(contextModule));\r
generatedTypes.addAll(allGroupingsToGenTypes(contextModule));\r
if (false == contextModule.childNodes.isEmpty()) {\r
generatedTypes.add(moduleToDataType(contextModule));\r
}\r
- generatedTypes.addAll(allTypeDefinitionsToGenTypes(contextModule));\r
generatedTypes.addAll(allContainersToGenTypes(contextModule));\r
generatedTypes.addAll(allListsToGenTypes(contextModule));\r
generatedTypes.addAll(allChoicesToGenTypes(contextModule));\r
checkArgument(module.name !== null,"Module name cannot be NULL.");\r
val Set<TypeDefinition<?>> typeDefinitions = module.typeDefinitions;\r
checkState(typeDefinitions !== null,'''Type Definitions for module «module.name» cannot be NULL.''');\r
-\r
\r
val List<Type> generatedTypes = new ArrayList();\r
for ( TypeDefinition<?> typedef : typeDefinitions) {\r
// and DataObject interface!!!\r
val targetPath = augSchema.targetPath;\r
val targetSchemaNode = findDataSchemaNode(schemaContext, targetPath);\r
- var targetType = yangToJavaMapping.get(targetSchemaNode.path);\r
- if(targetType == null) {\r
- // FIXME: augmentation should be added as last, all types should already be generated\r
- // and have assigned Java Types,\r
- val targetModule = findParentModule(schemaContext, targetSchemaNode);\r
- val targetBasePackage = moduleNamespaceToPackageName(targetModule);\r
- val typePackage = packageNameForGeneratedType(targetBasePackage, targetSchemaNode.getPath());\r
- val targetSchemaNodeName = targetSchemaNode.getQName().getLocalName();\r
- val typeName = parseToClassName(targetSchemaNodeName);\r
- targetType = new ReferencedTypeImpl(typePackage,typeName);\r
- }\r
if (targetSchemaNode !== null) {\r
+ var targetType = yangToJavaMapping.get(targetSchemaNode.path);
+ if(targetType == null) {
+ // FIXME: augmentation should be added as last, all types should already be generated
+ // and have assigned Java Types,
+ val targetModule = findParentModule(schemaContext, targetSchemaNode);
+ val targetBasePackage = moduleNamespaceToPackageName(targetModule);
+ val typePackage = packageNameForGeneratedType(targetBasePackage, targetSchemaNode.getPath());
+ val targetSchemaNodeName = targetSchemaNode.getQName().getLocalName();
+ val typeName = parseToClassName(targetSchemaNodeName);
+ targetType = new ReferencedTypeImpl(typePackage,typeName);
+ }
val augChildNodes = augSchema.childNodes;\r
if (!(targetSchemaNode instanceof ChoiceNode)) {\r
val augTypeBuilder = addRawAugmentGenTypeDefinition(augmentPackageName,\r
assertNotNull("Lf TO wasn't found.", lfLeaf);
assertEquals("Lf TO has incorrect number of occurences.", 1, lfLeafCounter);
assertEquals("Lf has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626.ParentContainer",
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer",
lfLeaf.getPackageName());
assertEquals("Lf generated TO has incorrect number of properties", 2, lfLeaf.getProperties().size());
assertNotNull("Lf1 TO wasn't found.", lf1Leaf);
assertEquals("Lf1 TO has incorrect number of occurences.", 1, lf1LeafCounter);
assertEquals("Lf1 has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626.ParentContainer",
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer",
lf1Leaf.getPackageName());
assertEquals("Lf generated TO has incorrect number of properties", 4, lf1Leaf.getProperties().size());
assertNotNull("Lf2 TO wasn't found.", lf2Leaf);
assertEquals("Lf2 TO has incorrect number of occurences.", 1, lf2LeafCounter);
assertEquals("Lf2 has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626.ParentContainer",
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer",
lf2Leaf.getPackageName());
assertEquals("Lf generated TO has incorrect number of properties", 2, lf2Leaf.getProperties().size());
assertNotNull("TypeUnion TO wasn't found.", typeUnionTypedef);
assertEquals("TypeUnion TO has incorrect number of occurences.", 1, typeUnionTypedefCounter);
assertEquals("TypeUnion has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626", typeUnionTypedef.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626", typeUnionTypedef.getPackageName());
assertEquals("TypeUnion generated TO has incorrect number of properties", 2, typeUnionTypedef.getProperties()
.size());
assertEquals("TypeUnion1 TO has incorrect number of occurences.", 1, typeUnion1Counter);
assertEquals("TypeUnion1 has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626", typeUnion1.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626", typeUnion1.getPackageName());
assertEquals("TypeUnion1 generated TO has incorrect number of properties", 4, typeUnion1.getProperties().size());
assertEquals("TypeUnion2 TO has incorrect number of occurences.", 1, typeUnion2Counter);
assertEquals("TypeUnion2 has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626", typeUnion2.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626", typeUnion2.getPackageName());
assertEquals("TypeUnion2 generated TO has incorrect number of properties", 2, typeUnion2.getProperties().size());
containsAttributes(typeUnion2, true, true, true, new NameTypePattern("string", "String"));
assertNotNull("UnionLeaf TO wasn't found.", unionLeaf);
assertEquals("BitLeaf has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626.ParentContainer",
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer",
bitLeaf.getPackageName());
assertEquals("UnionLeaf has incorrect package name.",
- "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev2013626.ParentContainer",
+ "org.opendaylight.yang.gen.v1.urn.bit.union.in.leaf.rev130626.ParentContainer",
bitLeaf.getPackageName());
List<GeneratedProperty> propertiesBitLeaf = bitLeaf.getProperties();
assertNotNull("Generated type for grouping-U wasn't generated.", groupingU);
assertEquals("GroupingU interface generated more than one time.", 1, groupingUCounter);
assertEquals("GroupingU is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.dependencies.rev2013718", groupingU.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.dependencies.rev130718", groupingU.getPackageName());
assertNotNull("Generated type for grouping-V wasn't generated.", groupingV);
assertEquals("GroupingV interface generated more than one time.", 1, groupingVCounter);
assertEquals("GroupingV is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.dependencies.rev2013718", groupingV.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.dependencies.rev130718", groupingV.getPackageName());
assertNotNull("Generated type for grouping-X wasn't generated.", groupingX);
assertEquals("GroupingX interface generated more than one time.", 1, groupingXCounter);
assertEquals("GroupingX is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.dependencies.rev2013718", groupingX.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.dependencies.rev130718", groupingX.getPackageName());
containsInterface("GroupingV", groupingU);
containsInterface("GroupingX", groupingU);
assertEquals("Case C interface generated more than one time.", 1, caseCCounter);
assertEquals(
"Case C is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses._case.rev2013718.container.with.choicetest.choice.test",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses._case.rev130718.container.with.choicetest.choice.test",
caseC.getPackageName());
assertNotNull("Generated type for grouping-case-test wasn't generated.", groupingCaseTest);
assertEquals("GroupingCaseTest interface generated more than one time.", 1, groupingCaseTestCounter);
assertEquals("GroupingCaseTest is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses._case.rev2013718", groupingCaseTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses._case.rev130718", groupingCaseTest.getPackageName());
containsInterface("GroupingCaseTest", caseC);
assertTrue("Case C shouldn't contain any method.", caseC.getMethodDefinitions().isEmpty());
assertEquals("GroupingContainerTest interface - incorrect number of occurences", 1,
groupingContainerTestCounter);
assertEquals("GroupingContainerTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.container.rev2013718",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.container.rev130718",
groupingContainerTest.getPackageName());
assertNotNull("Generated type for container-test wasn't generated", containerTest);
assertEquals("ContainerTest interface - incorrect number of occurences", 1, containerTestCount);
assertEquals("ContainerTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.container.rev2013718", containerTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.container.rev130718", containerTest.getPackageName());
containsInterface("GroupingContainerTest", containerTest);
assertNotNull("Generated type for grouping-grouping-test wasn't generated", groupingGroupingTest);
assertEquals("GroupingGroupingTest interface - incorrect number of occurences", 1, groupingGroupingTestCounter);
assertEquals("GroupingGroupingTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.grouping.rev2013718",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.grouping.rev130718",
groupingGroupingTest.getPackageName());
assertNotNull("Generated type for grouping-test wasn't generated", groupingTest);
assertEquals("GroupingTest interface - incorrect number of occurences", 1, groupingTestCount);
assertEquals("GroupingTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.grouping.rev2013718", groupingTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.grouping.rev130718", groupingTest.getPackageName());
containsInterface("GroupingGroupingTest", groupingTest);
assertNotNull("Generated type for grouping-list-test wasn't generated", groupingListTest);
assertEquals("GroupingListTest interface - incorrect number of occurences", 1, groupingListTestCounter);
assertEquals("GroupingListTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev2013718", groupingListTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev130718", groupingListTest.getPackageName());
assertNotNull("Generated type for list-test wasn't generated", listTest);
assertEquals("ListTest interface - incorrect number of occurences", 1, listTestCounter);
assertEquals("ListTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev2013718", listTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev130718", listTest.getPackageName());
assertNotNull("Generated type for container-grouping-list-test wasn't generated", containerGroupingListTest);
assertEquals("ContainerGroupingListTest interface - incorrect number of occurences", 1,
containerGroupingListTestCounter);
assertEquals("ContainerGroupingListTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev2013718.grouping.list.test",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev130718.grouping.list.test",
containerGroupingListTest.getPackageName());
assertNotNull("Generated type for list-grouping-list-test wasn't generated", listGroupingListTest);
assertEquals("ListGroupingListTest interface - incorrect number of occurences", 1, listGroupingListTestCounter);
assertEquals("ListGroupingListTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev2013718.grouping.list.test",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.list.rev130718.grouping.list.test",
listGroupingListTest.getPackageName());
containsInterface("GroupingListTest", listTest);
assertNotNull("Generated type for grouping-list-test wasn't generated", groupingModulTest);
assertEquals("GroupingModulTest interface - incorrect number of occurences", 1, groupingModulTestCounter);
assertEquals("GroupingModulTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.modul.rev2013718", groupingModulTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.modul.rev130718", groupingModulTest.getPackageName());
assertNotNull("Generated type for modul wasn't generated", groupingUsesModulData);
assertEquals("GroupingUsesModulData interface - incorrect number of occurences", 1,
groupingUsesModulDataCounter);
assertEquals("GroupingUsesModulData isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.modul.rev2013718",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.modul.rev130718",
groupingUsesModulData.getPackageName());
containsInterface("GroupingModulTest", groupingUsesModulData);
assertNotNull("Generated type for RPC test input wasn't generated", rpcTestInput);
assertEquals("RpcTestInput interface - incorrect number of occurences", 1, rpcTestInputCounter);
assertEquals("RpcTestInput isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev2013718", rpcTestInput.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev130718", rpcTestInput.getPackageName());
assertNotNull("Generated type for RPC test output wasn't generated", rpcTestOutput);
assertEquals("RpcTestOutput interface - incorrect number of occurences", 1, rpcTestOutputCounter);
assertEquals("RpcTestOutput isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev2013718", rpcTestOutput.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev130718", rpcTestOutput.getPackageName());
assertNotNull("Generated type for grouping-rpc-input-test wasn't generated", groupingRpcInputTest);
assertEquals("RpcTestOutput interface - incorrect number of occurences", 1, groupingRpcInputTestCounter);
assertEquals("GroupingRpcInputTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev2013718", groupingRpcInputTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev130718", groupingRpcInputTest.getPackageName());
assertNotNull("Generated type for grouping-rpc-output-test wasn't generated", groupingRpcOutputTest);
assertEquals("RpcTestOutput interface - incorrect number of occurences", 1, groupingRpcOutputTestCounter);
assertEquals("GroupingRpcOutputTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev2013718", groupingRpcOutputTest.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev130718", groupingRpcOutputTest.getPackageName());
assertNotNull("Generated type for container-grouping-rpc-input-test wasn't generated",
containerGroupingRpcInputTest);
assertEquals("ContainerGroupingRpcInputTest interface - incorrect number of occurences", 1,
containerGroupingRpcInputTestCounter);
assertEquals("ContainerGroupingRpcInputTest isn't in correct package",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev2013718.grouping.rpc.input.test",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.rpc.rev130718.grouping.rpc.input.test",
containerGroupingRpcInputTest.getPackageName());
containsInterface("GroupingRpcInputTest", rpcTestInput);
assertNotNull("Generated type for augment /container-augment wasn't generated.", containerAugment1);
assertEquals("ContainerAugment1 interface generated more than one time.", 1, containerAugment1Counter);
assertEquals("ContainerAugment1 is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.augment.rev2013718", containerAugment1.getPackageName());
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.augment.rev130718", containerAugment1.getPackageName());
assertNotNull("Generated type for grouping-augment-test wasn't generated.", groupingAugmentTest);
assertEquals("GroupingAugmentTest interface generated more than one time.", 1, groupingAugmentTestCounter);
assertEquals("groupingAugmentTest is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.augment.rev2013718",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.augment.rev130718",
groupingAugmentTest.getPackageName());
containsInterface("GroupingAugmentTest", containerAugment1);
assertNotNull("Generated type for notification-test wasn't generated.", notificationTest);
assertEquals("NotificationTest interface generated more than one time.", 1, notificationTestCounter);
assertEquals("NotificationTest is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.notification.rev2013718",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.notification.rev130718",
notificationTest.getPackageName());
assertNotNull("Generated type for grouping-notification-test wasn't generated.", groupingNotificationTest);
assertEquals("GroupingNotificationTest interface generated more than one time.", 1,
groupingNotificationTestCounter);
assertEquals("groupingNotificationTest is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.notification.rev2013718",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.notification.rev130718",
groupingNotificationTest.getPackageName());
assertNotNull("Generated type for container-grouping-notification-test wasn't generated.",
assertEquals("ContainerGroupingNotificationTest interface generated more than one time.", 1,
containerGroupingNotificationTestCounter);
assertEquals("ContainerGroupingNotificationTest is in wrong package.",
- "org.opendaylight.yang.gen.v1.urn.grouping.uses.notification.rev2013718.grouping.notification.test",
+ "org.opendaylight.yang.gen.v1.urn.grouping.uses.notification.rev130718.grouping.notification.test",
containerGroupingNotificationTest.getPackageName());
containsInterface("GroupingNotificationTest", notificationTest);