From 4ab00d5dbf8f4263d867726607ce84d4107ef1c6 Mon Sep 17 00:00:00 2001 From: Kai Moritz Date: Mon, 14 Nov 2016 19:04:32 +0100 Subject: [PATCH] WIP --- .../plugins/hibernate/AbstractSchemaMojo.java | 55 +--------------- .../juplo/plugins/hibernate/UpdateMojo.java | 49 ++++++++++++-- .../juplo/plugins/hibernate/ValidateMojo.java | 64 +++++++++++++++++++ 3 files changed, 110 insertions(+), 58 deletions(-) create mode 100644 src/main/java/de/juplo/plugins/hibernate/ValidateMojo.java diff --git a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java index c9ef2c59..ca6b9355 100644 --- a/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate/AbstractSchemaMojo.java @@ -12,8 +12,6 @@ import java.net.URL; import java.security.NoSuchAlgorithmException; import java.time.ZonedDateTime; import java.util.Collections; -import java.util.EnumSet; -import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedHashSet; @@ -49,7 +47,6 @@ import org.hibernate.boot.registry.classloading.spi.ClassLoaderService; import org.hibernate.boot.registry.classloading.spi.ClassLoadingException; import org.hibernate.boot.registry.selector.spi.StrategySelector; import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.cfg.AvailableSettings; import static org.hibernate.cfg.AvailableSettings.DIALECT; import static org.hibernate.cfg.AvailableSettings.DRIVER; import static org.hibernate.cfg.AvailableSettings.FORMAT_SQL; @@ -65,18 +62,11 @@ import static org.hibernate.cfg.AvailableSettings.PHYSICAL_NAMING_STRATEGY; import static org.hibernate.cfg.AvailableSettings.SHOW_SQL; import static org.hibernate.cfg.AvailableSettings.USER; import static org.hibernate.cfg.AvailableSettings.URL; -import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider; import org.hibernate.internal.util.config.ConfigurationException; import org.hibernate.jpa.boot.internal.ParsedPersistenceXmlDescriptor; import org.hibernate.jpa.boot.internal.PersistenceXmlParser; -import org.hibernate.tool.schema.TargetType; import org.hibernate.tool.schema.internal.ExceptionHandlerCollectingImpl; -import org.hibernate.tool.schema.internal.exec.ScriptTargetOutputToFile; -import org.hibernate.tool.schema.spi.ExecutionOptions; -import org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator; -import org.hibernate.tool.schema.spi.ScriptTargetOutput; -import org.hibernate.tool.schema.spi.TargetDescriptor; import org.scannotation.AnnotationDB; @@ -686,42 +676,6 @@ public abstract class AbstractSchemaMojo extends AbstractMojo ); } - /** Prepare the generation of the SQL */ - Map settings = new HashMap(); - settings.putAll( - serviceRegistry - .getService(ConfigurationService.class) - .getSettings() - ); - ExceptionHandlerCollectingImpl handler = - new ExceptionHandlerCollectingImpl(); - ExecutionOptions options = - SchemaManagementToolCoordinator - .buildExecutionOptions(settings, handler); - final EnumSet targetTypes = EnumSet.of(TargetType.SCRIPT); - if (execute) - targetTypes.add(TargetType.DATABASE); - TargetDescriptor target = new TargetDescriptor() - { - @Override - public EnumSet getTargetTypes() - { - return targetTypes; - } - - @Override - public ScriptTargetOutput getScriptTargetOutput() - { - String charset = - (String) - serviceRegistry - .getService(ConfigurationService.class) - .getSettings() - .get(AvailableSettings.HBM2DDL_CHARSET_NAME); - return new ScriptTargetOutputToFile(output, charset); - } - }; - /** * Change class-loader of current thread. * This is necessary, because still not all parts of Hibernate 5 use @@ -732,7 +686,8 @@ public abstract class AbstractSchemaMojo extends AbstractMojo try { thread.setContextClassLoader(classLoader); - build((MetadataImplementor)metadataBuilder.build(), options, target); + ExceptionHandlerCollectingImpl handler = + build((MetadataImplementor)metadataBuilder.build()); if (handler.getExceptions().size() > 0) { StringBuilder builder = new StringBuilder(); @@ -783,11 +738,7 @@ public abstract class AbstractSchemaMojo extends AbstractMojo } - abstract void build( - MetadataImplementor metadata, - ExecutionOptions options, - TargetDescriptor target - ) + abstract ExceptionHandlerCollectingImpl build(MetadataImplementor metadata) throws MojoFailureException, MojoExecutionException; diff --git a/src/main/java/de/juplo/plugins/hibernate/UpdateMojo.java b/src/main/java/de/juplo/plugins/hibernate/UpdateMojo.java index c5237bdc..09b74a3e 100644 --- a/src/main/java/de/juplo/plugins/hibernate/UpdateMojo.java +++ b/src/main/java/de/juplo/plugins/hibernate/UpdateMojo.java @@ -16,13 +16,22 @@ package de.juplo.plugins.hibernate; * limitations under the License. */ +import java.util.EnumSet; +import java.util.HashMap; import java.util.Map; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.hibernate.boot.spi.MetadataImplementor; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.engine.config.spi.ConfigurationService; import org.hibernate.service.ServiceRegistry; +import org.hibernate.tool.schema.TargetType; +import org.hibernate.tool.schema.internal.ExceptionHandlerCollectingImpl; +import org.hibernate.tool.schema.internal.exec.ScriptTargetOutputToFile; import org.hibernate.tool.schema.spi.ExecutionOptions; import org.hibernate.tool.schema.spi.SchemaManagementTool; +import org.hibernate.tool.schema.spi.SchemaManagementToolCoordinator; +import org.hibernate.tool.schema.spi.ScriptTargetOutput; import org.hibernate.tool.schema.spi.TargetDescriptor; @@ -61,19 +70,47 @@ public class UpdateMojo extends AbstractSchemaMojo @Override - void build( - MetadataImplementor metadata, - ExecutionOptions options, - TargetDescriptor target - ) + ExceptionHandlerCollectingImpl build(MetadataImplementor metadata) throws MojoExecutionException, MojoFailureException { - ServiceRegistry service = + final ServiceRegistry service = metadata.getMetadataBuildingOptions().getServiceRegistry(); SchemaManagementTool tool = service.getService(SchemaManagementTool.class); + final EnumSet targetTypes = EnumSet.of(TargetType.SCRIPT); + if (execute) + targetTypes.add(TargetType.DATABASE); + + TargetDescriptor target = new TargetDescriptor() + { + @Override + public EnumSet getTargetTypes() + { + return targetTypes; + } + + @Override + public ScriptTargetOutput getScriptTargetOutput() + { + String charset + = (String) service + .getService(ConfigurationService.class) + .getSettings() + .get(AvailableSettings.HBM2DDL_CHARSET_NAME); + return new ScriptTargetOutputToFile(output, charset); + } + }; + + ExecutionOptions options = + SchemaManagementToolCoordinator.buildExecutionOptions( + service + .getService(ConfigurationService.class) + .getSettings(), + new ExceptionHandlerCollectingImpl() + ); + Map config = options.getConfigurationValues(); tool.getSchemaMigrator(config).doMigration(metadata, options, target); diff --git a/src/main/java/de/juplo/plugins/hibernate/ValidateMojo.java b/src/main/java/de/juplo/plugins/hibernate/ValidateMojo.java new file mode 100644 index 00000000..ed31fdd9 --- /dev/null +++ b/src/main/java/de/juplo/plugins/hibernate/ValidateMojo.java @@ -0,0 +1,64 @@ +package de.juplo.plugins.hibernate; + +/* + * Copyright 2001-2005 The Apache Software Foundation. + * + * 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. + */ + +import java.util.Map; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.hibernate.boot.spi.MetadataImplementor; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.tool.schema.internal.ExceptionHandlerCollectingImpl; +import org.hibernate.tool.schema.spi.ExecutionOptions; +import org.hibernate.tool.schema.spi.SchemaManagementTool; +import org.hibernate.tool.schema.spi.TargetDescriptor; + + +/** + * Validate a database-schema against the configured mappings. + * + * @goal validate + * @phase process-classes + * @threadSafe + * @requiresDependencyResolution runtime + */ +public class ValidateMojo extends AbstractSchemaMojo +{ + @Override + public final void execute() + throws + MojoFailureException, + MojoExecutionException + { + super.execute(null); + } + + + @Override + ExceptionHandlerCollectingImpl build(MetadataImplementor metadata) + throws + MojoExecutionException, + MojoFailureException + { + ServiceRegistry service = + metadata.getMetadataBuildingOptions().getServiceRegistry(); + SchemaManagementTool tool = service.getService(SchemaManagementTool.class); + + Map config = options.getConfigurationValues(); + + tool.getSchemaMigrator(config).doMigration(metadata, options, target); + } +} -- 2.20.1