import com.google.common.io.ByteSource;
import com.google.common.io.ByteStreams;
import java.io.File;
+import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
+import org.apache.commons.io.FileUtils;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.ArtifactResolutionRequest;
private Util() {
}
+ static final String YANG_SUFFIX = "yang";
+
private static final Logger LOG = LoggerFactory.getLogger(Util.class);
+ static Collection<File> listFiles(final File root, final Collection<File> excludedFiles)
+ throws FileNotFoundException {
+ if (!root.exists()) {
+ LOG.warn("{} YANG source directory {} not found. No code will be generated.", LOG_PREFIX, root);
+
+ return Collections.emptyList();
+ }
+ Collection<File> result = new ArrayList<>();
+ Collection<File> yangFiles = FileUtils.listFiles(root, new String[] { YANG_SUFFIX }, true);
+ for (File f : yangFiles) {
+ if (excludedFiles.contains(f)) {
+ LOG.info("{} {} file excluded {}", LOG_PREFIX, Util.YANG_SUFFIX.toUpperCase(), f);
+ } else {
+ result.add(f);
+ }
+ }
+
+ return result;
+ }
+
static List<File> getClassPath(final MavenProject project) {
- final List<File> dependencies = new ArrayList<>();
+ List<File> dependencies = new ArrayList<>();
for (Artifact element : project.getArtifacts()) {
File asFile = element.getFile();
if (isJar(asFile) || asFile.isDirectory()) {
import java.io.IOException;
import java.io.Reader;
import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
-import java.util.stream.Collectors;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
-import org.opendaylight.yangtools.yang.common.YangConstants;
+import org.codehaus.plexus.util.FileUtils;
import org.opendaylight.yangtools.yang.model.parser.api.YangSyntaxErrorException;
import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceException;
import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
* files in current project and optionally any jars/files in the
* dependencies.
*/
- final Collection<File> yangFilesInProject = listFiles(yangFilesRootDir, excludedFiles);
+ final Collection<File> yangFilesInProject = Util.listFiles(yangFilesRootDir, excludedFiles);
final Collection<File> allFiles = new ArrayList<>(yangFilesInProject);
if (inspectDependencies) {
return Optional.of(reactor);
} catch (Exception e) {
// MojoExecutionException is thrown since execution cannot continue
- LOG.error("{} Unable to parse YANG files from {}", LOG_PREFIX, yangFilesRootDir, e);
+ LOG.error("{} Unable to parse {} files from {}", LOG_PREFIX, Util.YANG_SUFFIX, yangFilesRootDir, e);
Throwable rootCause = Throwables.getRootCause(e);
- throw new MojoExecutionException(LOG_PREFIX + " Unable to parse YANG files from " + yangFilesRootDir,
- rootCause);
+ throw new MojoExecutionException(LOG_PREFIX + " Unable to parse " + Util.YANG_SUFFIX + " files from "
+ + yangFilesRootDir, rootCause);
}
}
return reactor.toContext();
}
- private static Collection<File> listFiles(final File root, final Collection<File> excludedFiles)
- throws IOException {
- if (!root.isDirectory()) {
- LOG.warn("{} YANG source directory {} not found. No code will be generated.", LOG_PREFIX, root);
- return ImmutableList.of();
- }
-
- return Files.walk(root.toPath()).map(Path::toFile).filter(File::isFile).filter(f -> {
- if (excludedFiles.contains(f)) {
- LOG.info("{} YANG file excluded {}", LOG_PREFIX, f);
- return false;
- }
- return true;
- }).filter(f -> f.getName().endsWith(YangConstants.RFC6020_YANG_FILE_EXTENSION)).collect(Collectors.toList());
- }
-
private static Collection<YangTextSchemaSource> toUniqueSources(final Collection<YangTextSchemaSource> sources)
throws IOException {
final Map<String, YangTextSchemaSource> byContent = new HashMap<>();
LOG.debug("{} Folder: {} marked as resources for generator: {}", LOG_PREFIX, resourceBaseDir,
codeGeneratorCfg.getCodeGeneratorClass());
- if (outputDir.exists()) {
- Files.walk(outputDir.toPath()).sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete);
- LOG.info("{} Succesfully deleted output directory {}", LOG_PREFIX, outputDir);
- }
+ FileUtils.deleteDirectory(outputDir);
+ LOG.info("{} Succesfully deleted output directory {}", LOG_PREFIX, outputDir);
+
Collection<File> generated = g.generateSources(context.getContext(), outputDir, context.getYangModules(),
context::moduleToResourcePath);