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;
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;
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;
@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;
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)
}
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) {
}
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);
}
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!");
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;
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;