Java tutorial
/* * Copyright [2006] java.net * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.jvnet.hyperjaxb3.maven2; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Layout; import org.apache.log4j.Level; import org.apache.log4j.LogManager; import org.apache.log4j.Logger; import org.apache.log4j.PatternLayout; import org.apache.log4j.spi.LoggingEvent; import org.apache.log4j.varia.NullAppender; import org.apache.maven.model.Resource; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.Log; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.jvnet.mjiip.v_2.XJC2Mojo; import com.sun.tools.xjc.Options; @Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, requiresDependencyResolution = ResolutionScope.COMPILE, threadSafe = true) public class Hyperjaxb3Mojo extends XJC2Mojo { /** * Target directory for the generated mappings. If left empty, mappings are * generated together with sources. * */ @Parameter(property = "maven.hj3.target") public File target; /** * Name of the roundtrip test case. If omitted, no roundtrip test case is * generated. * */ @Parameter(property = "maven.hj3.roundtripTestClassName") public String roundtripTestClassName; /** * Patterns for files to be included as resources. * */ @Parameter public String[] resourceIncludes = new String[] { "**/*.hbm.xml", "**/*.orm.xml", "**/*.cfg.xml", "META-INF/persistence.xml" }; /** * Persistence variant. Switches between various persistence * implementations. Possible values are "hibernate" and "ejb-hibernate". * */ @Parameter(property = "maven.hj3.variant", defaultValue = "ejb") public String variant = "ejb"; /** * * Persistence unit name (EJB3 specific). * */ @Parameter(property = "maven.hj3.persistenceUnitName") public String persistenceUnitName; /** * * Persistence unit name (EJB3 specific). * */ @Parameter(property = "maven.hj3.persistenceXml") public File persistenceXml; /** * * Whether the <code>hashCode()</code> method should be generated. * */ @Parameter(property = "maven.hj3.generateHashCode", defaultValue = "true") public boolean generateHashCode = true; /** * * Whether the <code>equals(...)</code> methods should be generated. * */ @Parameter(property = "maven.hj3.generateEquals", defaultValue = "true") public boolean generateEquals = true; /** * * Whether the generated id property must be transient. * */ @Parameter(property = "maven.hj3.generateTransientId", defaultValue = "false") public boolean generateTransientId = false; /** * Generation result. Possible values are "annotations", "mappingFiles". * */ @Parameter(property = "maven.hj3.result", defaultValue = "annotations") public String result = "annotations"; @Parameter public String[] preArgs = new String[0]; @Parameter public String[] postArgs = new String[0]; /** * Sets up the verbose and debug mode depending on mvn logging level, and * sets up hyperjaxb logging. */ protected void setupLogging() { super.setupLogging(); final Logger rootLogger = LogManager.getRootLogger(); rootLogger.addAppender(new NullAppender()); final Logger logger = LogManager.getLogger("org.jvnet.hyperjaxb3"); final Log log = getLog(); logger.addAppender(new Appender(getLog(), new PatternLayout("%m%n %c%n"))); if (this.getDebug()) { log.debug("Logger level set to [debug]."); logger.setLevel(Level.DEBUG); } else if (this.getVerbose()) logger.setLevel(Level.INFO); else if (log.isWarnEnabled()) logger.setLevel(Level.WARN); else logger.setLevel(Level.ERROR); } /** * Logs options defined directly as mojo parameters. */ protected void logConfiguration() throws MojoExecutionException { super.logConfiguration(); getLog().info("target:" + target); getLog().info("roundtripTestClassName:" + roundtripTestClassName); getLog().info("resourceIncludes:" + resourceIncludes); getLog().info("variant:" + variant); getLog().info("persistenceUnitName:" + persistenceUnitName); getLog().info("persistenceXml:" + persistenceXml); getLog().info("generateHashCode:" + generateHashCode); getLog().info("generateEquals:" + generateEquals); getLog().info("generateTransientId:" + generateTransientId); getLog().info("result:" + result); getLog().info("preArgs:" + Arrays.toString(preArgs)); getLog().info("postArgs:" + Arrays.toString(postArgs)); try { getLog().info("XJC loaded from:" + Options.class.getResource("Options.class").toURI().toURL().toExternalForm()); } catch (IOException ignored) { } catch (URISyntaxException ignored) { } } protected List<String> getArguments() { final List<String> arguments = new ArrayList<String>(); if (this.preArgs != null) { arguments.addAll(Arrays.asList(this.preArgs)); } arguments.addAll(super.getArguments()); if ("ejb".equals(variant)) { arguments.add("-Xhyperjaxb3-ejb"); if (result != null) { arguments.add("-Xhyperjaxb3-ejb-result=" + result); } if (roundtripTestClassName != null) { arguments.add("-Xhyperjaxb3-ejb-roundtripTestClassName=" + roundtripTestClassName); } if (persistenceUnitName != null) { arguments.add("-Xhyperjaxb3-ejb-persistenceUnitName=" + persistenceUnitName); } if (persistenceXml != null) { arguments.add("-Xhyperjaxb3-ejb-persistenceXml=" + persistenceXml.getAbsolutePath()); } if (generateTransientId) { arguments.add("-Xhyperjaxb3-ejb-generateTransientId=true"); } } else if ("jpa1".equals(variant)) { arguments.add("-Xhyperjaxb3-jpa1"); if (result != null) { arguments.add("-Xhyperjaxb3-jpa1-result=" + result); } if (roundtripTestClassName != null) { arguments.add("-Xhyperjaxb3-jpa1-roundtripTestClassName=" + roundtripTestClassName); } if (persistenceUnitName != null) { arguments.add("-Xhyperjaxb3-jpa1-persistenceUnitName=" + persistenceUnitName); } if (persistenceXml != null) { arguments.add("-Xhyperjaxb3-jpa1-persistenceXml=" + persistenceXml.getAbsolutePath()); } } else if ("jpa2".equals(variant)) { arguments.add("-Xhyperjaxb3-jpa2"); if (result != null) { arguments.add("-Xhyperjaxb3-jpa2-result=" + result); } if (roundtripTestClassName != null) { arguments.add("-Xhyperjaxb3-jpa2-roundtripTestClassName=" + roundtripTestClassName); } if (persistenceUnitName != null) { arguments.add("-Xhyperjaxb3-jpa2-persistenceUnitName=" + persistenceUnitName); } if (persistenceXml != null) { arguments.add("-Xhyperjaxb3-jpa2-persistenceXml=" + persistenceXml.getAbsolutePath()); } } if (generateEquals) { arguments.add("-Xequals"); } if (generateHashCode) { arguments.add("-XhashCode"); } arguments.add("-Xinheritance"); if (this.postArgs != null) { arguments.addAll(Arrays.asList(this.postArgs)); } return arguments; } /** * Updates XJC's compilePath ans resources and update hyperjaxb2's * resources, that is, *.hbm.xml files and hibernate.config.xml file. * * @param xjcOpts * @throws MojoExecutionException */ protected void setupMavenPaths() { super.setupMavenPaths(); final Resource resource = new Resource(); resource.setDirectory(getGenerateDirectory().getPath()); for (String resourceInclude : resourceIncludes) { resource.addInclude(resourceInclude); } getProject().addResource(resource); if (this.roundtripTestClassName != null) { getProject().addTestCompileSourceRoot(getGenerateDirectory().getPath()); } } public static class Appender extends AppenderSkeleton { private final Log log; private final Layout layout; public Appender(final Log log, final Layout layout) { super(); this.log = log; this.layout = layout; } @Override public boolean requiresLayout() { return true; } @Override protected void append(LoggingEvent event) { if (event.getLevel().equals(Level.TRACE)) { log.debug(layout.format(event)); } else if (event.getLevel().equals(Level.DEBUG)) { log.debug(layout.format(event)); } else if (event.getLevel().equals(Level.INFO)) { log.info(layout.format(event)); } else if (event.getLevel().equals(Level.WARN)) { log.warn(layout.format(event)); } else if (event.getLevel().equals(Level.ERROR)) { log.error(layout.format(event)); } else if (event.getLevel().equals(Level.FATAL)) { log.error(layout.format(event)); } } @Override public void close() { } } }