import java.util.Map;
import java.util.Set;
-import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import org.opendaylight.yangtools.binding.generator.util.BindingGeneratorUtil;
import org.opendaylight.yangtools.sal.binding.generator.api.BindingGenerator;
import org.opendaylight.yangtools.yang.binding.YangModelBindingProvider;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
import org.opendaylight.yangtools.yang2sources.spi.BuildContextAware;
-import org.opendaylight.yangtools.yang2sources.spi.CodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonatype.plexus.build.incremental.BuildContext;
-public final class CodeGeneratorImpl implements CodeGenerator, BuildContextAware {
+public final class CodeGeneratorImpl implements BasicCodeGenerator, BuildContextAware, MavenProjectAware {
+ private static final Logger logger = LoggerFactory.getLogger(CodeGeneratorImpl.class);
private static final String FS = File.separator;
private BuildContext buildContext;
private File projectBaseDir;
private Map<String, String> additionalConfig;
-
- private static final Logger logger = LoggerFactory.getLogger(CodeGeneratorImpl.class);
private MavenProject mavenProject;
private File resourceBaseDir;
mavenProject.addCompileSourceRoot(outputBaseDir.getPath());
}
- @Override
- public void setLog(final Log log) {
- }
-
@Override
public void setAdditionalConfig(final Map<String, String> additionalConfiguration) {
this.additionalConfig = additionalConfiguration;
import java.util.Map;
import java.util.Set;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.unified.doc.generator.GeneratorImpl;
-import org.opendaylight.yangtools.yang2sources.spi.CodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
-public class DocumentationGeneratorImpl extends GeneratorImpl implements CodeGenerator {
+public class DocumentationGeneratorImpl extends GeneratorImpl implements BasicCodeGenerator {
@Override
public Collection<File> generateSources(SchemaContext arg0, File arg1, Set<Module> arg2) throws IOException {
return generate(arg0, arg1, arg2);
}
- @Override
- public void setLog(Log log) {
- // use maven logging if necessary
-
- }
-
@Override
public void setAdditionalConfig(Map<String, String> additionalConfiguration) {
// no additional config utilized
public void setResourceBaseDir(File resourceBaseDir) {
// no resource processing necessary
}
-
- @Override
- public void setMavenProject(MavenProject project) {
- // no additional information needed
- }
}
import java.util.Map;
import java.util.Set;
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang.wadl.generator.WadlRestconfGenerator;
-import org.opendaylight.yangtools.yang2sources.spi.CodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
-public class WadlGenerator implements CodeGenerator {
+public class WadlGenerator implements BasicCodeGenerator {
@Override
public Collection<File> generateSources(SchemaContext context, File outputDir, Set<Module> currentModules)
final File outputBaseDir;
if (outputDir == null) {
+ // FIXME: this hard-codes the destination
outputBaseDir = new File("target" + File.separator + "generated-sources" + File.separator
+ "maven-sal-api-gen" + File.separator + "wadl");
} else {
return generator.generate(context, currentModules);
}
- @Override
- public void setLog(Log log) {
- // TODO Auto-generated method stub
-
- }
-
@Override
public void setAdditionalConfig(Map<String, String> additionalConfiguration) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
}
-
- @Override
- public void setMavenProject(MavenProject project) {
- // TODO Auto-generated method stub
-
- }
-
}
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.yang2sources.spi.CodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
public class DocGenTest {
public static final String FS = File.separator;
final List<File> sourceFiles = getSourceFiles("/doc-gen");
final Set<Module> modulesToBuild = parser.parseYangModels(sourceFiles);
final SchemaContext context = parser.resolveSchemaContext(modulesToBuild);
- final CodeGenerator generator = new DocumentationGeneratorImpl();
+ final BasicCodeGenerator generator = new DocumentationGeneratorImpl();
Collection<File> generatedFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, modulesToBuild);
assertEquals(4, generatedFiles.size());
}
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.yang2sources.spi.CodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
public class WadlGenTest {
public static final String FS = File.separator;
final List<File> sourceFiles = getSourceFiles("/wadl-gen");
final Set<Module> modulesToBuild = parser.parseYangModels(sourceFiles);
final SchemaContext context = parser.resolveSchemaContext(modulesToBuild);
- final CodeGenerator generator = new WadlGenerator();
+ final BasicCodeGenerator generator = new WadlGenerator();
Collection<File> generatedWadlFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, modulesToBuild);
assertEquals(3, generatedWadlFiles.size());
}
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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 java.io.File;
+import java.io.IOException;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Set;
+import org.opendaylight.yangtools.yang.model.api.Module;
+import org.opendaylight.yangtools.yang.model.api.SchemaContext;
+
+/**
+ * Maven 3.1.x and newer uses SLF4J internally, which means we do not need to pass
+ * a logger instance around.
+ */
+public interface BasicCodeGenerator {
+ /**
+ * Generate sources from provided {@link SchemaContext}
+ *
+ * @param context
+ * parsed from YANG files
+ * @param outputBaseDir
+ * expected output directory for generated sources configured by
+ * user
+ * @param currentModules
+ * YANG modules parsed from yangFilesRootDir
+ * @return collection of files that were generated from schema context
+ * @throws IOException
+ */
+ Collection<File> generateSources(SchemaContext context, File outputBaseDir, Set<Module> currentModules)
+ throws IOException;
+
+ /**
+ * Provided map contains all configuration that was set in pom for code
+ * generator in additionalConfiguration tag
+ *
+ * @param additionalConfiguration
+ */
+ void setAdditionalConfig(Map<String, String> additionalConfiguration);
+
+ /**
+ * Provided folder is marked as resources and its content will be packaged
+ * in resulting jar. Feel free to add necessary resources
+ *
+ * @param resourceBaseDir
+ */
+ void setResourceBaseDir(File resourceBaseDir);
+}
*/
package org.opendaylight.yangtools.yang2sources.spi;
-import java.io.File;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.maven.plugin.logging.Log;
-import org.apache.maven.project.MavenProject;
-import org.opendaylight.yangtools.yang.model.api.Module;
-import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-
/**
* Classes implementing this interface can be submitted to maven-yang-plugin's
* generate-sources goal.
+ *
+ * @deprecated Use {@link BasicCodeGenerator} with appropriate traits.
*/
-public interface CodeGenerator {
-
- /**
- * Generate sources from provided {@link SchemaContext}
- *
- * @param context
- * parsed from yang files
- * @param outputBaseDir
- * expected output directory for generated sources configured by
- * user
- * @param currentModules
- * yang modules parsed from yangFilesRootDir
- * @return collection of files that were generated from schema context
- * @throws IOException
- */
- Collection<File> generateSources(SchemaContext context, File outputBaseDir, Set<Module> currentModules)
- throws IOException;
-
- /**
- * Utilize maven logging if necessary
- *
- * @param log
- */
- void setLog(Log log);
-
- /**
- * Provided map contains all configuration that was set in pom for code
- * generator in additionalConfiguration tag
- *
- * @param additionalConfiguration
- */
- void setAdditionalConfig(Map<String, String> additionalConfiguration);
-
- /**
- * Provided folder is marked as resources and its content will be packaged
- * in resulting jar. Feel free to add necessary resources
- *
- * @param resourceBaseDir
- */
- void setResourceBaseDir(File resourceBaseDir);
+@Deprecated
+public interface CodeGenerator extends BasicCodeGenerator, MavenLogAware, MavenProjectAware {
- /**
- * Provided maven project object. Any additional information about current
- * maven project can be accessed from it.
- *
- * @param project
- */
- void setMavenProject(MavenProject project);
}
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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 org.apache.maven.plugin.logging.Log;
+
+/**
+ * Bridge compatibility class for plugins using the maven logger functionality.
+ *
+ * @deprecated Use slf4j logging directly.
+ */
+@Deprecated
+public interface MavenLogAware {
+ /**
+ * Utilize maven logging if necessary
+ *
+ * @param log maven log instance
+ */
+ void setLog(Log log);
+}
--- /dev/null
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. 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 org.apache.maven.project.MavenProject;
+
+/**
+ * Bridge for plugins which need access to the underlying maven project.
+ */
+public interface MavenProjectAware {
+ /**
+ * Provided maven project object. Any additional information about current
+ * maven project can be accessed from it.
+ *
+ * @param project
+ */
+ void setMavenProject(MavenProject project);
+}
import org.opendaylight.yangtools.yang.model.api.Module;
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
-public class CodeGeneratorTestImpl implements CodeGenerator {
+public class CodeGeneratorTestImpl implements BasicCodeGenerator, MavenLogAware, MavenProjectAware {
private Log log;
import org.opendaylight.yangtools.yang2sources.plugin.ConfigArg.CodeGeneratorArg;
import org.opendaylight.yangtools.yang2sources.plugin.Util.ContextHolder;
import org.opendaylight.yangtools.yang2sources.plugin.Util.YangsInZipsResult;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
import org.opendaylight.yangtools.yang2sources.spi.BuildContextAware;
-import org.opendaylight.yangtools.yang2sources.spi.CodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.MavenLogAware;
+import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware;
import org.sonatype.plexus.build.incremental.BuildContext;
import org.sonatype.plexus.build.incremental.DefaultBuildContext;
codeGeneratorCfg.check();
- CodeGenerator g = Util.getInstance(codeGeneratorCfg.getCodeGeneratorClass(), CodeGenerator.class);
+ BasicCodeGenerator g = Util.getInstance(codeGeneratorCfg.getCodeGeneratorClass(), BasicCodeGenerator.class);
log.info(Util.message("Code generator instantiated from %s", LOG_PREFIX,
codeGeneratorCfg.getCodeGeneratorClass()));
log.debug(Util.message("Additional configuration picked up for : %s: %s", LOG_PREFIX,
codeGeneratorCfg.getCodeGeneratorClass(), codeGeneratorCfg.getAdditionalConfiguration()));
+ if (g instanceof MavenLogAware) {
+ ((MavenLogAware)g).setLog(log);
+ }
if (g instanceof BuildContextAware) {
((BuildContextAware)g).setBuildContext(buildContext);
}
- g.setLog(log);
- g.setMavenProject(project);
+ if (g instanceof MavenProjectAware) {
+ ((MavenProjectAware)g).setMavenProject(project);
+ }
g.setAdditionalConfig(codeGeneratorCfg.getAdditionalConfiguration());
File resourceBaseDir = codeGeneratorCfg.getResourceBaseDir(project);
import org.opendaylight.yangtools.yang.model.api.SchemaContext;
import org.opendaylight.yangtools.yang2sources.plugin.ConfigArg.CodeGeneratorArg;
import org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.YangProvider;
-import org.opendaylight.yangtools.yang2sources.spi.CodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.BasicCodeGenerator;
+import org.opendaylight.yangtools.yang2sources.spi.MavenLogAware;
+import org.opendaylight.yangtools.yang2sources.spi.MavenProjectAware;
public class GenerateSourcesTest {
+ "generated-sources" + File.separator + "spi"));
}
- public static class GeneratorMock implements CodeGenerator {
+ public static class GeneratorMock implements BasicCodeGenerator, MavenLogAware, MavenProjectAware {
private static int called = 0;
private static File outputDir;