import java.io.IOException;
import java.util.Collection;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
-import java.util.function.Function;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.Module;
* @return collection of files that were generated from schema context
*/
Collection<File> generateSources(EffectiveModelContext context, File outputBaseDir, Set<Module> currentModules,
- Function<Module, Optional<String>> moduleResourcePathResolver) throws IOException;
+ ModuleResourceResolver moduleResourcePathResolver) throws IOException;
/**
* Provided map contains all configuration that was set in pom for code
--- /dev/null
+/*
+ * Copyright (c) 2020 PANTHEON.tech, s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.yangtools.yang2sources.spi;
+
+import com.google.common.annotations.Beta;
+import java.util.Optional;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
+
+/**
+ * An SPI-level interface to find the schema source for a particular YANG module, as packaged in the final artifact.
+ * The module must be part of the current resolution context.
+ */
+@Beta
+@FunctionalInterface
+public interface ModuleResourceResolver {
+ /**
+ * Find the path of the packaged resource which corresponds to the specified module in the specified representation.
+ *
+ * @param module Requested module
+ * @param representation Requested representation
+ * @return Path to packaged resource
+ * @throws NullPointerException if any argument is null
+ * @throws IllegalArgumentException if the requested representation is not supported by this resolver
+ */
+ Optional<String> findModuleResourcePath(Module module, Class<? extends SchemaSourceRepresentation> representation);
+}
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
-import java.util.function.Function;
import org.apache.maven.project.MavenProject;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.Module;
@Override
public Collection<File> generateSources(final EffectiveModelContext context, final File outputBaseDir,
- final Set<Module> currentModules, final Function<Module, Optional<String>> moduleResourcePathResolver)
+ final Set<Module> currentModules, final ModuleResourceResolver moduleResourcePathResolver)
throws IOException {
LOG.debug("{} generateSources:context: {}", getClass().getCanonicalName(), context);
LOG.debug("{} generateSources:outputBaseDir: {}", getClass().getCanonicalName(), outputBaseDir);
*/
package org.opendaylight.yangtools.yang2sources.plugin;
+import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
import com.google.common.collect.ImmutableSet;
import org.opendaylight.yangtools.concepts.Immutable;
import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
import org.opendaylight.yangtools.yang.model.repo.api.SourceIdentifier;
+import org.opendaylight.yangtools.yang.model.repo.api.YangTextSchemaSource;
+import org.opendaylight.yangtools.yang2sources.spi.ModuleResourceResolver;
-final class ContextHolder implements Immutable {
+final class ContextHolder implements Immutable, ModuleResourceResolver {
private final EffectiveModelContext context;
private final Set<Module> modules;
private final Set<SourceIdentifier> sources;
this.sources = ImmutableSet.copyOf(sources);
}
+ @Override
+ public Optional<String> findModuleResourcePath(final Module module,
+ final Class<? extends SchemaSourceRepresentation> representation) {
+ checkArgument(YangTextSchemaSource.class.equals(requireNonNull(representation)),
+ "Unsupported representation %s", representation);
+ final SourceIdentifier id = Util.moduleToIdentifier(module);
+ return sources.contains(id)
+ ? Optional.of("/" + YangToSourcesProcessor.META_INF_YANG_STRING_JAR + "/" + id.toYangFilename())
+ : Optional.empty();
+ }
+
EffectiveModelContext getContext() {
return context;
}
Set<Module> getYangModules() {
return modules;
}
-
- Optional<String> moduleToResourcePath(final Module mod) {
- final SourceIdentifier id = Util.moduleToIdentifier(mod);
- return sources.contains(id)
- ? Optional.of("/" + YangToSourcesProcessor.META_INF_YANG_STRING_JAR + "/" + id.toYangFilename())
- : Optional.empty();
- }
-}
\ No newline at end of file
+}
import java.util.Collections;
import java.util.List;
import java.util.Set;
-import java.util.function.Function;
import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
* Generate sources from yang files using user provided set of
* {@link BasicCodeGenerator}s. Steps of this process:
* <ol>
- * <li>List yang files from {@link #yangFilesRootDir}</li>
- * <li>Process yang files using Yang Parser</li>
- * <li>For each {@link BasicCodeGenerator} from {@link #codeGenerators}:
- * <ol>
- * <li>Instantiate using default constructor</li>
- * <li>Call {@link BasicCodeGenerator#generateSources(EffectiveModelContext, File, Set, Function)}</li>
- * </ol></li>
+ * <li>List yang files from {@link #yangFilesRootDir}</li>
+ * <li>Process yang files using Yang Parser</li>
+ * <li>For each {@link BasicCodeGenerator} from {@link #codeGenerators}:
+ * <ol>
+ * <li>Instantiate using default constructor</li>
+ * <li>Call {@link BasicCodeGenerator#generateSources(EffectiveModelContext, File, Set,
+ * org.opendaylight.yangtools.yang2sources.spi.ModuleResourceResolver)}</li>
+ * </ol>
+ * </li>
* </ol>
*/
@Mojo(name = "generate-sources", defaultPhase = LifecyclePhase.GENERATE_SOURCES,
}
final Stopwatch watch = Stopwatch.createStarted();
Collection<File> generated = codeGenerator.generateSources(context.getContext(), outputDir,
- context.getYangModules(), context::moduleToResourcePath);
+ context.getYangModules(), context);
LOG.debug("{} Sources generated by {}: {}", LOG_PREFIX, codeGeneratorCfg.getCodeGeneratorClass(), generated);
LOG.info("{} Sources generated by {}: {} in {}", LOG_PREFIX, codeGeneratorCfg.getCodeGeneratorClass(),
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
-import java.util.Optional;
import java.util.Set;
-import java.util.function.Function;
import org.apache.maven.model.Build;
import org.apache.maven.model.Plugin;
import org.apache.maven.project.MavenProject;
import org.opendaylight.yangtools.yang2sources.plugin.ConfigArg.CodeGeneratorArg;
import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware;
+import org.opendaylight.yangtools.yang2sources.spi.ModuleResourceResolver;
public class GenerateSourcesTest {
@Override
public Collection<File> generateSources(final EffectiveModelContext context, final File outputBaseDir,
- final Set<Module> currentModules, final Function<Module, Optional<String>> moduleResourcePathResolver)
+ final Set<Module> currentModules, final ModuleResourceResolver moduleResourcePathResolver)
throws IOException {
called++;
outputDir = outputBaseDir;