import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
+import com.google.common.io.Files;
/**
* Generate sources from yang files using user provided set of
@Mojo(name = "generate-sources", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresDependencyResolution = ResolutionScope.COMPILE, requiresProject = true)
public final class YangToSourcesMojo extends AbstractMojo {
private static final String LOG_PREFIX = "yang-to-sources:";
- private static final String INPUT_RESOURCE_DIR = "META-INF/yangs/";
+ private static final String INPUT_RESOURCE_DIR = "META-INF/yang/";
private static final String OUTPUT_RESOURCE_DIR = "/target/external-resources/";
/**
if (yangFiles.isEmpty()) {
getLog().warn(
- Util.message("No %s file found in %s", LOG_PREFIX,
- Util.YANG_SUFFIX, yangFilesRootDir));
+ Util.message(
+ "No %s file found in %s or in dependencies",
+ LOG_PREFIX, Util.YANG_SUFFIX, yangFilesRootDir));
return null;
}
yangFiles.addAll(getFilesFromYangRoot());
// load files from dependencies
- yangFiles.addAll(getFilesFromDependencies());
-
+ Collection<File> filesFromDependencies = getFilesFromDependencies();
+ yangFiles.addAll(filesFromDependencies);
for (ResourceProviderArg resourceProvider : resourceProviders) {
try {
File rootDir = new File(yangFilesRootDir);
try {
- if(!rootDir.isAbsolute()) {
- yangFilesLoaded = Util.listFiles(project.getBasedir().getAbsolutePath() + yangFilesRootDir);
- } else {
+ if (rootDir.isAbsolute()) {
yangFilesLoaded = Util.listFiles(yangFilesRootDir);
+ } else {
+ String path = project.getBasedir().getAbsolutePath()
+ + File.separator + yangFilesRootDir;
+ yangFilesLoaded = Util.listFiles(path);
}
-
- } catch(FileNotFoundException e) {
- getLog().warn("Directory '" + yangFilesRootDir + "' does not exists.");
+ } catch (FileNotFoundException e) {
+ getLog().warn(
+ "yangFilesRootDir[" + rootDir.getAbsolutePath()
+ + "] does not exists.");
yangFilesLoaded = new ArrayList<File>();
}
+
Collection<File> yangFiles = new ArrayList<File>(yangFilesLoaded);
try {
- for(File yangFile : yangFilesLoaded) {
+ for (File yangFile : yangFilesLoaded) {
InputStream is = new FileInputStream(yangFile);
- yangFiles.add(createFileFromStream(is, project.getBasedir().getAbsolutePath() + OUTPUT_RESOURCE_DIR + yangFile.getName()));
+ yangFiles.add(createFileFromStream(is,
+ project.getBasedir().getAbsolutePath()
+ + OUTPUT_RESOURCE_DIR + yangFile.getName()));
resources.add(is);
}
- } catch(IOException e) {
+ } catch (IOException e) {
getLog().warn("Exception while loading yang files.", e);
}
return yangFiles;
continue;
}
InputStream entryStream = zip.getInputStream(entry);
- String newEntryName = entryName.substring(INPUT_RESOURCE_DIR.length());
- File f = createFileFromStream(entryStream, project.getBasedir().getAbsolutePath() + OUTPUT_RESOURCE_DIR + newEntryName);
+ String newEntryName = entryName
+ .substring(INPUT_RESOURCE_DIR.length());
+ File tmp = Files.createTempDir();
+ File f = createFileFromStream(entryStream,
+ tmp.getAbsolutePath() + newEntryName);
yangFiles.add(f);
resources.add(entryStream);
return yangFiles;
}
- private File createFileFromStream(InputStream is, String absoluteName) throws IOException {
+ private File createFileFromStream(InputStream is, String absoluteName)
+ throws IOException {
File f = new File(absoluteName);
- if(!f.exists()) {
+ if (!f.exists()) {
f.getParentFile().mkdirs();
}
f.createNewFile();
ZipEntry entry = entries.nextElement();
String entryName = entry.getName();
- if(entryName.startsWith(INPUT_RESOURCE_DIR)) {
- if(entry.isDirectory()) {
+ if (entryName.startsWith(INPUT_RESOURCE_DIR)) {
+ if (entry.isDirectory()) {
continue;
}
if (!Util.acceptedFilter(entryName, filter)) {
try {
resource.close();
} catch (IOException e) {
- getLog().warn("Failed to close resources: "+ resource, e);
+ getLog().warn("Failed to close resources: " + resource, e);
}
}
}