Fix CodeGeneratorImpl checkstyle
[mdsal.git] / binding / maven-sal-api-gen-plugin / src / main / java / org / opendaylight / mdsal / binding / maven / api / gen / plugin / CodeGeneratorImpl.java
index cd531e6089cbc7f8b37696ce453d7ea34e2acb1e..4fa2004d095bbff94dc826b3d92f454c100ceb5a 100644 (file)
@@ -17,8 +17,6 @@ import com.google.common.collect.ListMultimap;
 import com.google.common.collect.MultimapBuilder;
 import com.google.common.collect.Table;
 import com.google.common.collect.Table.Cell;
-import com.google.common.util.concurrent.ListeningExecutorService;
-import com.google.common.util.concurrent.MoreExecutors;
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.IOException;
@@ -31,11 +29,8 @@ import java.nio.file.Path;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Optional;
 import java.util.ServiceLoader;
 import java.util.Set;
-import java.util.concurrent.ForkJoinPool;
-import java.util.function.Function;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 import org.apache.maven.project.MavenProject;
@@ -48,9 +43,11 @@ import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
 import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
 import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
 import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
 import org.opendaylight.yangtools.yang2sources.spi.BuildContextAware;
 import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware;
+import org.opendaylight.yangtools.yang2sources.spi.ModuleResourceResolver;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.sonatype.plexus.build.incremental.BuildContext;
@@ -70,8 +67,7 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
 
     @Override
     public Collection<File> generateSources(final EffectiveModelContext context, final File outputDir,
-            final Set<Module> yangModules, final Function<Module, Optional<String>> moduleResourcePathResolver)
-                    throws IOException {
+            final Set<Module> yangModules, final ModuleResourceResolver moduleResourcePathResolver) throws IOException {
         final File outputBaseDir;
 
         outputBaseDir = outputDir == null ? getDefaultOutputBaseDir() : outputDir;
@@ -139,7 +135,6 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
         LOG.debug("Parent directories created in {}", sw);
 
         // Step four: submit all code generation tasks (via parallelStream()) and wait for them to complete
-        final ListeningExecutorService service = MoreExecutors.listeningDecorator(ForkJoinPool.commonPool());
         sw.reset().start();
         final List<File> result = dirs.values().parallelStream()
                 .map(GenerationTask::generateFile)
@@ -152,7 +147,8 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
     }
 
     private Collection<? extends File> generateModuleInfos(final File outputBaseDir, final Set<Module> yangModules,
-            final EffectiveModelContext context, final Function<Module, Optional<String>> moduleResourcePathResolver) {
+            final EffectiveModelContext context, final ModuleResourceResolver moduleResourcePathResolver)
+                throws IOException {
         Builder<File> result = ImmutableSet.builder();
         Builder<String> bindingProviders = ImmutableSet.builder();
         for (Module module : yangModules) {
@@ -171,9 +167,9 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
     }
 
     private File writeMetaInfServices(final File outputBaseDir, final Class<YangModelBindingProvider> serviceClass,
-            final ImmutableSet<String> services) {
+            final ImmutableSet<String> services) throws IOException {
         File metainfServicesFolder = new File(outputBaseDir, "META-INF" + File.separator + "services");
-        metainfServicesFolder.mkdirs();
+        Files.createDirectories(metainfServicesFolder.toPath());
         File serviceFile = new File(metainfServicesFolder, serviceClass.getName());
 
         String src = Joiner.on('\n').join(services);
@@ -219,11 +215,12 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
     }
 
     private Set<File> generateYangModuleInfo(final File outputBaseDir, final Module module,
-            final EffectiveModelContext ctx, final Function<Module, Optional<String>> moduleResourcePathResolver,
-            final Builder<String> providerSourceSet) {
+            final EffectiveModelContext ctx, final ModuleResourceResolver moduleResourcePathResolver,
+            final Builder<String> providerSourceSet) throws IOException {
         Builder<File> generatedFiles = ImmutableSet.builder();
 
-        final YangModuleInfoTemplate template = new YangModuleInfoTemplate(module, ctx, moduleResourcePathResolver);
+        final YangModuleInfoTemplate template = new YangModuleInfoTemplate(module, ctx,
+            mod -> moduleResourcePathResolver.findModuleResourcePath(module, YangTextSchemaSource.class));
         String moduleInfoSource = template.generate();
         if (moduleInfoSource.isEmpty()) {
             throw new IllegalStateException("Generated code should not be empty!");
@@ -234,18 +231,17 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
             BindingMapping.getRootPackageName(module.getQNameModule()));
 
         generatedFiles.add(writeJavaSource(packageDir, BindingMapping.MODULE_INFO_CLASS_NAME, moduleInfoSource));
-        generatedFiles
-                .add(writeJavaSource(packageDir, BindingMapping.MODEL_BINDING_PROVIDER_CLASS_NAME, providerSource));
+        generatedFiles.add(writeJavaSource(packageDir, BindingMapping.MODEL_BINDING_PROVIDER_CLASS_NAME,
+            providerSource));
         providerSourceSet.add(template.getModelBindingProviderName());
 
         return generatedFiles.build();
 
     }
 
-    private File writeJavaSource(final File packageDir, final String className, final String source) {
-        if (!packageDir.exists()) {
-            packageDir.mkdirs();
-        }
+    private File writeJavaSource(final File packageDir, final String className, final String source)
+            throws IOException {
+        Files.createDirectories(packageDir.toPath());
         final File file = new File(packageDir, className + ".java");
         writeFile(file, source);
         return file;
@@ -258,10 +254,10 @@ public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContext
                 try (BufferedWriter bw = new BufferedWriter(fw)) {
                     bw.write(source);
                 }
-            } catch (Exception e) {
+            } catch (RuntimeException e) {
                 LOG.error("Could not write file: {}", file, e);
             }
-        } catch (Exception e) {
+        } catch (IOException e) {
             LOG.error("Could not create file: {}", file, e);
         }
         return file;