From: Robert Varga Date: Mon, 16 Feb 2015 22:10:12 +0000 (+0100) Subject: BUG-2179: split logging out of CodeGenerator X-Git-Tag: release/lithium~292 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=1e2025a2dd82f44c31e268870ab20babfbc9a75f;p=yangtools.git BUG-2179: split logging out of CodeGenerator Currently SPI requires downstream users to import maven infrastructure even if they are not using it. Split the two maven-related injection methods into dedicated interfaces. MavenLogAware is automatically deprecated, as maven 3.1+ works with slf4j out of the box, hence Log injection is no longer needed. Change-Id: Ibedc158d9bdbcf66c2df94fd578929729fa26821 Signed-off-by: Robert Varga --- diff --git a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/maven/sal/api/gen/plugin/CodeGeneratorImpl.java b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/maven/sal/api/gen/plugin/CodeGeneratorImpl.java index 99f426dcc6..867aca948f 100644 --- a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/maven/sal/api/gen/plugin/CodeGeneratorImpl.java +++ b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/maven/sal/api/gen/plugin/CodeGeneratorImpl.java @@ -23,7 +23,6 @@ import java.util.List; 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; @@ -35,19 +34,19 @@ import org.opendaylight.yangtools.yang.binding.BindingMapping; 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 additionalConfig; - - private static final Logger logger = LoggerFactory.getLogger(CodeGeneratorImpl.class); private MavenProject mavenProject; private File resourceBaseDir; @@ -124,10 +123,6 @@ public final class CodeGeneratorImpl implements CodeGenerator, BuildContextAware mavenProject.addCompileSourceRoot(outputBaseDir.getPath()); } - @Override - public void setLog(final Log log) { - } - @Override public void setAdditionalConfig(final Map additionalConfiguration) { this.additionalConfig = additionalConfiguration; diff --git a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocumentationGeneratorImpl.java b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocumentationGeneratorImpl.java index c3e7d30382..fafb859708 100644 --- a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocumentationGeneratorImpl.java +++ b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocumentationGeneratorImpl.java @@ -13,14 +13,12 @@ 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; 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 generateSources(SchemaContext arg0, File arg1, Set arg2) throws IOException { @@ -28,12 +26,6 @@ public class DocumentationGeneratorImpl extends GeneratorImpl implements CodeGen return generate(arg0, arg1, arg2); } - @Override - public void setLog(Log log) { - // use maven logging if necessary - - } - @Override public void setAdditionalConfig(Map additionalConfiguration) { // no additional config utilized @@ -43,9 +35,4 @@ public class DocumentationGeneratorImpl extends GeneratorImpl implements CodeGen public void setResourceBaseDir(File resourceBaseDir) { // no resource processing necessary } - - @Override - public void setMavenProject(MavenProject project) { - // no additional information needed - } } diff --git a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenerator.java b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenerator.java index 35fac76225..6a05f7577b 100644 --- a/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenerator.java +++ b/code-generator/maven-sal-api-gen-plugin/src/main/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenerator.java @@ -13,14 +13,12 @@ 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; 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 generateSources(SchemaContext context, File outputDir, Set currentModules) @@ -28,6 +26,7 @@ public class WadlGenerator implements CodeGenerator { 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 { @@ -38,12 +37,6 @@ public class WadlGenerator implements CodeGenerator { return generator.generate(context, currentModules); } - @Override - public void setLog(Log log) { - // TODO Auto-generated method stub - - } - @Override public void setAdditionalConfig(Map additionalConfiguration) { // TODO Auto-generated method stub @@ -55,11 +48,4 @@ public class WadlGenerator implements CodeGenerator { // TODO Auto-generated method stub } - - @Override - public void setMavenProject(MavenProject project) { - // TODO Auto-generated method stub - - } - } diff --git a/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocGenTest.java b/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocGenTest.java index 1335450395..4e0e254110 100644 --- a/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocGenTest.java +++ b/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/unified/doc/generator/maven/DocGenTest.java @@ -25,7 +25,7 @@ import org.junit.Test; 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; @@ -54,7 +54,7 @@ public class DocGenTest { final List sourceFiles = getSourceFiles("/doc-gen"); final Set modulesToBuild = parser.parseYangModels(sourceFiles); final SchemaContext context = parser.resolveSchemaContext(modulesToBuild); - final CodeGenerator generator = new DocumentationGeneratorImpl(); + final BasicCodeGenerator generator = new DocumentationGeneratorImpl(); Collection generatedFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, modulesToBuild); assertEquals(4, generatedFiles.size()); } diff --git a/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenTest.java b/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenTest.java index 756ba674ac..4485b429a6 100644 --- a/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenTest.java +++ b/code-generator/maven-sal-api-gen-plugin/src/test/java/org/opendaylight/yangtools/yang/wadl/generator/maven/WadlGenTest.java @@ -25,7 +25,7 @@ import org.junit.Test; 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; @@ -54,7 +54,7 @@ public class WadlGenTest { final List sourceFiles = getSourceFiles("/wadl-gen"); final Set modulesToBuild = parser.parseYangModels(sourceFiles); final SchemaContext context = parser.resolveSchemaContext(modulesToBuild); - final CodeGenerator generator = new WadlGenerator(); + final BasicCodeGenerator generator = new WadlGenerator(); Collection generatedWadlFiles = generator.generateSources(context, GENERATOR_OUTPUT_DIR, modulesToBuild); assertEquals(3, generatedWadlFiles.size()); } diff --git a/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/BasicCodeGenerator.java b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/BasicCodeGenerator.java new file mode 100644 index 0000000000..908385ecb5 --- /dev/null +++ b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/BasicCodeGenerator.java @@ -0,0 +1,54 @@ +/* + * 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 generateSources(SchemaContext context, File outputBaseDir, Set currentModules) + throws IOException; + + /** + * Provided map contains all configuration that was set in pom for code + * generator in additionalConfiguration tag + * + * @param additionalConfiguration + */ + void setAdditionalConfig(Map 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); +} diff --git a/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/CodeGenerator.java b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/CodeGenerator.java index d996c96b65..046ea5e52e 100644 --- a/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/CodeGenerator.java +++ b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/CodeGenerator.java @@ -7,67 +7,13 @@ */ 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 generateSources(SchemaContext context, File outputBaseDir, Set 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 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); } diff --git a/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/MavenLogAware.java b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/MavenLogAware.java new file mode 100644 index 0000000000..ef9fb637a2 --- /dev/null +++ b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/MavenLogAware.java @@ -0,0 +1,25 @@ +/* + * 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); +} diff --git a/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/MavenProjectAware.java b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/MavenProjectAware.java new file mode 100644 index 0000000000..602f78f04c --- /dev/null +++ b/yang/yang-maven-plugin-spi/src/main/java/org/opendaylight/yangtools/yang2sources/spi/MavenProjectAware.java @@ -0,0 +1,23 @@ +/* + * 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); +} diff --git a/yang/yang-maven-plugin-spi/src/test/java/org/opendaylight/yangtools/yang2sources/spi/CodeGeneratorTestImpl.java b/yang/yang-maven-plugin-spi/src/test/java/org/opendaylight/yangtools/yang2sources/spi/CodeGeneratorTestImpl.java index 7bfae12b3a..c45fdc8c48 100644 --- a/yang/yang-maven-plugin-spi/src/test/java/org/opendaylight/yangtools/yang2sources/spi/CodeGeneratorTestImpl.java +++ b/yang/yang-maven-plugin-spi/src/test/java/org/opendaylight/yangtools/yang2sources/spi/CodeGeneratorTestImpl.java @@ -17,7 +17,7 @@ import org.apache.maven.project.MavenProject; 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; diff --git a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java index c6c0badda7..0402e8b8a3 100644 --- a/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java +++ b/yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java @@ -32,8 +32,10 @@ import org.opendaylight.yangtools.yang.parser.util.NamedFileInputStream; 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; @@ -267,7 +269,7 @@ class YangToSourcesProcessor { 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())); @@ -284,11 +286,15 @@ class YangToSourcesProcessor { 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); diff --git a/yang/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/GenerateSourcesTest.java b/yang/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/GenerateSourcesTest.java index 1200e16cc5..063083eaed 100644 --- a/yang/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/GenerateSourcesTest.java +++ b/yang/yang-maven-plugin/src/test/java/org/opendaylight/yangtools/yang2sources/plugin/GenerateSourcesTest.java @@ -37,7 +37,9 @@ import org.opendaylight.yangtools.yang.model.api.Module; 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 { @@ -81,7 +83,7 @@ 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;