*/
package org.opendaylight.yangtools.yang2sources.plugin;
+import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import org.apache.maven.model.Resource;
-import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
+import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-class YangProvider {
- private static final Logger LOG = LoggerFactory.getLogger(YangProvider.class);
+abstract class YangProvider {
+ private static final class Default extends YangProvider {
+ private static final Logger LOG = LoggerFactory.getLogger(YangProvider.class);
- void addYangsToMetaInf(final MavenProject project, final File yangFilesRootDir,
- final Collection<File> excludedFiles) throws MojoFailureException {
+ @Override
+ void addYangsToMetaInf(final MavenProject project, final Collection<YangTextSchemaSource> modelsInProject)
+ throws IOException {
- // copy project's src/main/yang/*.yang to target/generated-sources/yang/META-INF/yang/*.yang
- File generatedYangDir = new GeneratedDirectories(project).getYangDir();
- addYangsToMetaInf(project, yangFilesRootDir, excludedFiles, generatedYangDir);
- }
+ final File generatedYangDir = new GeneratedDirectories(project).getYangDir();
+ LOG.debug("Generated dir {}", generatedYangDir);
- private static void addYangsToMetaInf(final MavenProject project, final File yangFilesRootDir,
- final Collection<File> excludedFiles, final File generatedYangDir) throws MojoFailureException {
+ // copy project's src/main/yang/*.yang to ${project.builddir}/generated-sources/yang/META-INF/yang/
+ // This honors setups like a Eclipse-profile derived one
+ final File withMetaInf = new File(generatedYangDir, YangToSourcesProcessor.META_INF_YANG_STRING);
+ withMetaInf.mkdirs();
- File withMetaInf = new File(generatedYangDir, YangToSourcesProcessor.META_INF_YANG_STRING);
- withMetaInf.mkdirs();
+ for (YangTextSchemaSource source : modelsInProject) {
+ final String fileName = source.getIdentifier().toYangFilename();
+ final File file = new File(withMetaInf, fileName);
- try {
- Collection<File> files = Util.listFiles(yangFilesRootDir, excludedFiles);
- for (File file : files) {
- org.apache.commons.io.FileUtils.copyFile(file, new File(withMetaInf, file.getName()));
+ source.copyTo(Files.asByteSink(file));
+ LOG.debug("Created file {} for {}", file, source.getIdentifier());
}
- } catch (IOException e) {
- LOG.warn("Failed to generate files into root {}", yangFilesRootDir, e);
- throw new MojoFailureException("Unable to list yang files into resource folder", e);
+
+ setResource(generatedYangDir, project);
+ LOG.debug("{} YANG files marked as resources: {}", YangToSourcesProcessor.LOG_PREFIX, generatedYangDir);
}
+ }
- setResource(generatedYangDir, project);
+ private static final YangProvider DEFAULT = new Default();
- LOG.debug("{} Yang files from: {} marked as resources: {}", YangToSourcesProcessor.LOG_PREFIX, yangFilesRootDir,
- YangToSourcesProcessor.META_INF_YANG_STRING_JAR);
+ static YangProvider getInstance() {
+ return DEFAULT;
}
+ abstract void addYangsToMetaInf(MavenProject project, Collection<YangTextSchemaSource> modelsInProject)
+ throws IOException;
+
static void setResource(final File targetYangDir, final MavenProject project) {
Resource res = new Resource();
res.setDirectory(targetYangDir.getPath());