+
+ private List<GeneratedTransferObject> resolveTypeDefsFromContext() {
+ final List<GeneratedTransferObject> genTypeDefs = new ArrayList<GeneratedTransferObject>();
+ final Set<Module> modules = schemaContext.getModules();
+ if (modules != null) {
+ for (final Module module : modules) {
+ if (module != null) {
+ final String moduleName = module.getName();
+ final String basePackageName = BindingGeneratorUtil
+ .moduleNamespaceToPackageName(module);
+
+ final Set<TypeDefinition<?>> typeDefinitions = module
+ .getTypeDefinitions();
+
+ if ((typeDefinitions != null) && (basePackageName != null)) {
+ for (final TypeDefinition<?> typedef : typeDefinitions) {
+ final GeneratedTransferObject genTransObj = toGeneratedTransferObject(
+ basePackageName, moduleName, typedef);
+ if (genTransObj != null) {
+ genTypeDefs.add(genTransObj);
+ }
+ }
+ // for (final TypeDefinition<?> typedef :
+ // typeDefinitions) {
+ // addUnionGeneratedTypeDefinition(basePackageName,
+ // module.getName(), typedef);
+ // }
+ }
+ }
+ }
+ }
+ return genTypeDefs;
+ }
+
+ private GeneratedTransferObject toGeneratedTransferObject(
+ final String basePackageName, final String moduleName,
+ final TypeDefinition<?> typedef) {
+ if ((basePackageName != null) && (moduleName != null)
+ && (typedef != null) && (typedef.getQName() != null)) {
+ final GeneratedTOBuilder genTOBuilder = typedefToTransferObject(
+ basePackageName, typedef);
+
+ final String typedefName = typedef.getQName().getLocalName();
+ final String propertyName = BindingGeneratorUtil
+ .parseToValidParamName(typedefName);
+
+ final TypeDefinition<?> baseTypeDefinition = baseTypeDefForExtendedType(typedef);
+ if (!(baseTypeDefinition instanceof LeafrefTypeDefinition)
+ && !(baseTypeDefinition instanceof IdentityrefTypeDefinition)) {
+ Type returnType = null;
+ if (baseTypeDefinition instanceof EnumTypeDefinition) {
+ final EnumTypeDefinition enumTypeDef = (EnumTypeDefinition) baseTypeDefinition;
+ returnType = resolveEnumFromTypeDefinition(enumTypeDef,
+ typedefName);
+ } else {
+ returnType = BaseYangTypes.BASE_YANG_TYPES_PROVIDER
+ .javaTypeForSchemaDefinitionType(baseTypeDefinition);
+ }
+
+ if (returnType != null) {
+ final GeneratedPropertyBuilder genPropBuilder = genTOBuilder
+ .addProperty(propertyName);
+
+ genPropBuilder.addReturnType(returnType);
+ genTOBuilder.addEqualsIdentity(genPropBuilder);
+ genTOBuilder.addHashIdentity(genPropBuilder);
+ genTOBuilder.addToStringProperty(genPropBuilder);
+
+ Map<String, GeneratedTransferObject> transferObjectsMap = genTypeDefsContextMap
+ .get(moduleName);
+ if (transferObjectsMap == null) {
+ transferObjectsMap = new HashMap<String, GeneratedTransferObject>();
+ genTypeDefsContextMap.put(moduleName,
+ transferObjectsMap);
+ }
+
+ final GeneratedTransferObject transferObject = genTOBuilder
+ .toInstance();
+ if (transferObject != null) {
+ transferObjectsMap.put(typedefName, transferObject);
+ return transferObject;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ private void addUnionGeneratedTypeDefinition(final String basePackageName,
+ final String moduleName, final TypeDefinition<?> typedef) {
+ if ((basePackageName != null) && (moduleName != null)
+ && (typedef != null) && (typedef.getQName() != null)) {
+ final TypeDefinition<?> baseTypeDefinition = baseTypeDefForExtendedType(typedef);
+
+ if ((baseTypeDefinition != null)
+ && (baseTypeDefinition instanceof UnionTypeDefinition)) {
+ final UnionTypeDefinition unionTypeDef = (UnionTypeDefinition) baseTypeDefinition;
+
+ final List<TypeDefinition<?>> unionTypes = unionTypeDef
+ .getTypes();
+ final Map<String, GeneratedTransferObject> genTOsMap = genTypeDefsContextMap
+ .get(moduleName);
+ final GeneratedTOBuilder unionGenTransObject = typedefToTransferObject(
+ basePackageName, typedef);
+ if ((unionTypes != null) && (genTOsMap != null)
+ && (unionGenTransObject != null)) {
+ for (final TypeDefinition<?> unionType : unionTypes) {
+ final String typeName = unionType.getQName()
+ .getLocalName();
+ final GeneratedTransferObject genTransferObject = genTOsMap
+ .get(typeName);
+
+ if (genTransferObject != null) {
+ unionGenTransObject
+ .addProperty(
+ BindingGeneratorUtil
+ .parseToValidParamName(genTransferObject
+ .getName()))
+ .addReturnType(genTransferObject);
+ }
+ }
+ genTOsMap.put(unionTypeDef.getQName().getLocalName(),
+ unionGenTransObject.toInstance());
+ }
+ }
+ }
+ }
+
+ private GeneratedTOBuilder typedefToTransferObject(
+ final String basePackageName, final TypeDefinition<?> typedef) {
+
+ final String packageName = BindingGeneratorUtil
+ .packageNameForGeneratedType(basePackageName, typedef.getPath());
+ final String typeDefTOName = typedef.getQName().getLocalName();
+
+ if ((packageName != null) && (typedef != null)
+ && (typeDefTOName != null)) {
+ final String genTOName = BindingGeneratorUtil
+ .parseToClassName(typeDefTOName);
+ final GeneratedTOBuilder newType = new GeneratedTOBuilderImpl(
+ packageName, genTOName);
+
+ return newType;
+ }
+ return null;
+ }