import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentMap;
+import org.apache.commons.io.IOUtils;
import org.apache.maven.model.Resource;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.parser.impl.YangParserImpl;
+import org.opendaylight.yangtools.yang.parser.repo.URLSchemaContextResolver;
import org.opendaylight.yangtools.yang.parser.util.NamedFileInputStream;
import org.opendaylight.yangtools.yang2sources.plugin.ConfigArg.CodeGeneratorArg;
import org.opendaylight.yangtools.yang2sources.plugin.Util.ContextHolder;
private final boolean inspectDependencies;
private final BuildContext buildContext;
private final YangProvider yangProvider;
+ private final URLSchemaContextResolver resolver;
@VisibleForTesting
YangToSourcesProcessor(Log log, File yangFilesRootDir, File[] excludedFiles, List<CodeGeneratorArg> codeGenerators,
this.project = Util.checkNotNull(project, "project");
this.inspectDependencies = inspectDependencies;
this.yangProvider = yangProvider;
+ this.resolver = URLSchemaContextResolver.create("maven-plugin");
}
YangToSourcesProcessor(BuildContext buildContext, Log log, File yangFilesRootDir, File[] excludedFiles, List<CodeGeneratorArg> codeGenerators,
* dependencies.
*/
final Collection<File> yangFilesInProject = Util.listFiles(yangFilesRootDir, excludedFiles, log);
+
+
final Collection<File> allFiles = new ArrayList<>(yangFilesInProject);
if (inspectDependencies) {
allFiles.addAll(Util.findYangFilesInDependencies(log, project));
final List<InputStream> yangsInProject = new ArrayList<>();
for (final File f : yangFilesInProject) {
+ // FIXME: This is hack - normal path should be reported.
yangsInProject.add(new NamedFileInputStream(f, META_INF_YANG_STRING + File.separator + f.getName()));
}
YangsInZipsResult dependentYangResult = Util.findYangFilesInDependenciesAsStream(log, project);
Closeable dependentYangResult1 = dependentYangResult;
closeables.add(dependentYangResult1);
- all.addAll(dependentYangResult.getYangStreams());
+ List<InputStream> yangStreams = toStreamsWithoutDuplicates(dependentYangResult.getYangStreams());
+ all.addAll(yangStreams);
+ closeables.addAll(yangStreams);
}
allYangModules = parser.parseYangModelsFromStreamsMapped(all);
}
}
+ private List<InputStream> toStreamsWithoutDuplicates(List<YangSourceFromDependency> list) throws IOException {
+ ConcurrentMap<String, YangSourceFromDependency> byContent = Maps.newConcurrentMap();
+
+ for (YangSourceFromDependency yangFromDependency : list) {
+ try (InputStream dataStream = yangFromDependency.openStream()) {
+ String contents = IOUtils.toString(dataStream);
+ byContent.putIfAbsent(contents, yangFromDependency);
+ }
+
+ }
+ List<InputStream> inputs = new ArrayList<>(byContent.size());
+ for (YangSourceFromDependency entry : byContent.values()) {
+ inputs.add(entry.openStream());
+ }
+ return inputs;
+ }
+
static class YangProvider {
void addYangsToMetaInf(Log log, MavenProject project, File yangFilesRootDir, File[] excludedFiles)