Remove binding spec2
[mdsal.git] / binding2 / mdsal-binding2-generator-impl / src / main / java / org / opendaylight / mdsal / binding / javav2 / generator / impl / ModuleToGenType.java
diff --git a/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/ModuleToGenType.java b/binding2/mdsal-binding2-generator-impl/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/impl/ModuleToGenType.java
deleted file mode 100755 (executable)
index 3515c47..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (c) 2017 Cisco Systems, Inc. and others.  All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package org.opendaylight.mdsal.binding.javav2.generator.impl;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.groupingsToGenTypes;
-import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.moduleTypeBuilder;
-import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.processUsesImplements;
-import static org.opendaylight.mdsal.binding.javav2.generator.impl.GenHelperUtil.resolveNotification;
-import static org.opendaylight.mdsal.binding.javav2.generator.util.BindingTypes.NOTIFICATION_LISTENER;
-
-import com.google.common.annotations.Beta;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-
-import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext;
-import org.opendaylight.mdsal.binding.javav2.generator.spi.TypeProvider;
-import org.opendaylight.mdsal.binding.javav2.generator.util.TypeComments;
-import org.opendaylight.mdsal.binding.javav2.generator.yang.types.TypeProviderImpl;
-import org.opendaylight.mdsal.binding.javav2.model.api.Type;
-import org.opendaylight.mdsal.binding.javav2.model.api.YangSourceDefinition;
-import org.opendaylight.mdsal.binding.javav2.model.api.type.builder.GeneratedTypeBuilder;
-import org.opendaylight.mdsal.binding.javav2.spec.runtime.BindingNamespaceType;
-import org.opendaylight.mdsal.binding.javav2.util.BindingMapping;
-import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
-import org.opendaylight.yangtools.yang.model.api.IdentitySchemaNode;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.NotificationDefinition;
-import org.opendaylight.yangtools.yang.model.api.NotificationNodeContainer;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-import org.opendaylight.yangtools.yang.model.api.TypeDefinition;
-import org.opendaylight.yangtools.yang.model.util.DataNodeIterator;
-
-@Beta
-final class ModuleToGenType {
-
-    private ModuleToGenType() {
-        throw new UnsupportedOperationException("Utility class");
-    }
-
-    static Map<Module, ModuleContext> generate(final Module module, final Map<String, Map<String, GeneratedTypeBuilder>>
-            genTypeBuilders, final SchemaContext schemaContext, final TypeProvider typeProvider, Map<Module,
-            ModuleContext> genCtx, final boolean verboseClassComments) {
-
-        genCtx.put(module, new ModuleContext());
-        genCtx = allTypeDefinitionsToGenTypes(module, genCtx, typeProvider);
-        genCtx = groupingsToGenTypes(module, module.getGroupings(), genCtx, schemaContext, verboseClassComments,
-                genTypeBuilders, typeProvider);
-        genCtx = allIdentitiesToGenTypes(module, schemaContext, genCtx, verboseClassComments, genTypeBuilders,
-                typeProvider);
-
-        if (!module.getChildNodes().isEmpty()) {
-            final GeneratedTypeBuilder moduleType = GenHelperUtil.moduleToDataType(module, genCtx,
-                    verboseClassComments);
-            genCtx.get(module).addModuleNode(moduleType);
-            final String basePackageName = BindingMapping.getRootPackageName(module);
-            GenHelperUtil.resolveDataSchemaNodes(module, basePackageName, moduleType, moduleType, module
-                            .getChildNodes(), genCtx, schemaContext, verboseClassComments, genTypeBuilders,
-                    typeProvider,
-                    BindingNamespaceType.Data);
-            processUsesImplements(module, module, schemaContext, genCtx, BindingNamespaceType.Data);
-        }
-
-        genCtx = notificationsToGenType(module, genCtx, schemaContext, genTypeBuilders, verboseClassComments,
-                typeProvider);
-
-        //after potential parent data schema nodes
-        genCtx = actionsAndRPCMethodsToGenType(module, genCtx, schemaContext, verboseClassComments,
-                genTypeBuilders, typeProvider);
-
-        return genCtx;
-    }
-
-    /**
-     * Converts all extended type definitions of module to the list of
-     * <code>Type</code> objects.
-     *
-     * @param module module from which is obtained set of type definitions
-     * @throws IllegalArgumentException <ul>
-     *                                  <li>if module is null</li>
-     *                                  <li>if name of module is null</li>
-     *                                  </ul>
-     * @throws IllegalStateException    if set of type definitions from module is null
-     */
-    private static Map<Module, ModuleContext> allTypeDefinitionsToGenTypes(final Module module, final Map<Module,
-            ModuleContext> genCtx,
-                                                                           final TypeProvider typeProvider) {
-        Preconditions.checkArgument(module != null, "Module reference cannot be NULL.");
-        Preconditions.checkArgument(module.getName() != null, "Module name cannot be NULL.");
-        final DataNodeIterator it = new DataNodeIterator(module);
-        final List<TypeDefinition<?>> typeDefinitions = it.allTypedefs();
-        Preconditions.checkState(typeDefinitions != null, "Type Definitions for module «module.name» cannot be NULL.");
-
-        typeDefinitions.stream().filter(Objects::nonNull).forEach(typedef -> {
-            final Type type = ((TypeProviderImpl) typeProvider).generatedTypeForExtendedDefinitionType(typedef,
-                    typedef);
-            if (type != null) {
-                final ModuleContext ctx = genCtx.get(module);
-                ctx.addTypedefType(typedef.getPath(), type);
-                ctx.addTypeToSchema(type, typedef);
-            }
-        });
-        return genCtx;
-    }
-
-    private static Map<Module, ModuleContext> actionsAndRPCMethodsToGenType(final Module module, Map<Module,
-            ModuleContext> genCtx, final SchemaContext schemaContext, final boolean verboseClassComments,
-                                                                            final Map<String, Map<String,
-                                                                                    GeneratedTypeBuilder>>
-                                                                                    genTypeBuilders, final
-                                                                            TypeProvider typeProvider) {
-
-        genCtx = RpcActionGenHelper.rpcMethodsToGenType(module, genCtx, schemaContext, verboseClassComments,
-                genTypeBuilders, typeProvider);
-        genCtx = RpcActionGenHelper.actionMethodsToGenType(module, genCtx, schemaContext, verboseClassComments,
-                genTypeBuilders, typeProvider);
-
-        return genCtx;
-    }
-
-    /**
-     * Converts all <b>identities</b> of the module to the list of
-     * <code>Type</code> objects.
-     *
-     * @param module        module from which is obtained set of all identity objects to
-     *                      iterate over them
-     * @param schemaContext schema context only used as input parameter for method
-     *      {@link GenHelperUtil#identityToGenType(Module, String, IdentitySchemaNode, SchemaContext,Map, boolean)}
-     * @param genCtx        generated context
-     * @return returns generated context
-     */
-    private static Map<Module, ModuleContext> allIdentitiesToGenTypes(final Module module,
-                                                                      final SchemaContext schemaContext, Map<Module,
-            ModuleContext> genCtx, boolean verboseClassComments,
-                                                                      final Map<String, Map<String,
-                                                                              GeneratedTypeBuilder>> genTypeBuilders,
-                                                                      final TypeProvider typeProvider) {
-
-        final Set<IdentitySchemaNode> schemaIdentities = module.getIdentities();
-        final String basePackageName = BindingMapping.getRootPackageName(module);
-
-        if (schemaIdentities != null && !schemaIdentities.isEmpty()) {
-            for (final IdentitySchemaNode identity : schemaIdentities) {
-                GenHelperUtil.identityToGenType(module, basePackageName, identity, schemaContext, genCtx,
-                        verboseClassComments);
-            }
-        }
-
-        return genCtx;
-    }
-
-    /**
-     * Converts all <b>notifications</b> of the module to the list of
-     * <code>Type</code> objects. In addition are to this list added containers
-     * and lists which are part of this notification.
-     *
-     * @param module module from which is obtained set of all notification objects
-     *               to iterate over them
-     * @throws IllegalArgumentException <ul>
-     *                                  <li>if the module equals null</li>
-     *                                  <li>if the name of module equals null</li>
-     *                                  </ul>
-     * @throws IllegalStateException    if set of notifications from module is null
-     */
-    private static Map<Module, ModuleContext> notificationsToGenType(final Module module, final Map<Module,
-            ModuleContext> genCtx,
-                                                                     final SchemaContext schemaContext, final
-                                                                     Map<String, Map<String, GeneratedTypeBuilder>>
-                                                                             genTypeBuilders,
-                                                                     final boolean verboseClassComments, final
-                                                                     TypeProvider typeProvider) {
-        checkArgument(module != null, "Module reference cannot be NULL.");
-        checkArgument(module.getName() != null, "Module name cannot be NULL.");
-        final Set<NotificationDefinition> notifications = module.getNotifications();
-        if (notifications.isEmpty()) {
-            return genCtx;
-        }
-
-        final GeneratedTypeBuilder listenerInterface = moduleTypeBuilder(module, "Listener", verboseClassComments,
-                genCtx.get(module));
-        listenerInterface.addImplementsType(NOTIFICATION_LISTENER);
-        final String basePackageName = BindingMapping.getRootPackageName(module);
-
-        for (final NotificationDefinition notification : notifications) {
-            if (notification != null) {
-                resolveNotification(listenerInterface, null, basePackageName, notification, module, schemaContext,
-                        verboseClassComments, genTypeBuilders, typeProvider, genCtx);
-                processUsesImplements(notification, module, schemaContext, genCtx, BindingNamespaceType.Notification);
-            }
-        }
-
-        //YANG 1.1 allows notifications be tied to containers and lists
-        final Collection<DataSchemaNode> potentials = module.getChildNodes();
-        Set<NotificationDefinition> tiedNotifications = null;
-
-        for (final DataSchemaNode potential : potentials) {
-            if (potential instanceof NotificationNodeContainer) {
-                tiedNotifications = ((NotificationNodeContainer) potential)
-                        .getNotifications();
-                for (final NotificationDefinition tiedNotification : tiedNotifications) {
-                    if (tiedNotification != null) {
-                        resolveNotification(listenerInterface, potential.getQName().getLocalName(), basePackageName,
-                                tiedNotification, module, schemaContext, verboseClassComments, genTypeBuilders,
-                                typeProvider, genCtx);
-                        processUsesImplements(tiedNotification, module, schemaContext, genCtx, BindingNamespaceType
-                                .Notification);
-                    }
-                }
-            }
-        }
-
-        if (verboseClassComments) {
-            if (tiedNotifications != null) {
-                YangSourceDefinition.of(module,
-                        ImmutableSet.<NotificationDefinition>builder().addAll(notifications).addAll(tiedNotifications)
-                                .build()).ifPresent(listenerInterface::setYangSourceDefinition);
-            } else {
-                YangSourceDefinition.of(module, notifications).ifPresent(listenerInterface::setYangSourceDefinition);
-            }
-            listenerInterface.addComment(TypeComments.javadoc(
-                    "Interface for receiving the following YANG notifications defined in module <b>" + module.getName()
-                            + "</b>").get());
-        }
-
-        genCtx.get(module).addTopLevelNodeType(listenerInterface);
-
-        return genCtx;
-    }
-}