1 /* 2 * Copyright (C) Christian Schulte, 2005-206 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 9 * o Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * o Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in 14 * the documentation and/or other materials provided with the 15 * distribution. 16 * 17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 18 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 19 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * 28 * $JOMC: MainModelValidateMojo.java 4613 2012-09-22 10:07:08Z schulte $ 29 * 30 */ 31 package org.jomc.mojo; 32 33 import java.util.logging.Level; 34 import org.apache.maven.plugin.MojoExecutionException; 35 import org.jomc.modlet.ModelContext; 36 import org.jomc.modlet.ModelValidationReport; 37 38 /** 39 * Validates a project's main model. 40 * 41 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 42 * @version $JOMC: MainModelValidateMojo.java 4613 2012-09-22 10:07:08Z schulte $ 43 * 44 * @phase process-classes 45 * @goal validate-main-model 46 * @threadSafe 47 * @requiresDependencyResolution test 48 */ 49 public final class MainModelValidateMojo extends AbstractJomcMojo 50 { 51 52 /** Constant for the name of the tool backing the mojo. */ 53 private static final String TOOLNAME = "ModelValidator"; 54 55 /** 56 * Execution strategy of the goal ({@code always} or {@code once-per-session}). 57 * 58 * @parameter default-value="once-per-session" expression="${jomc.validateMainModelExecutionStrategy}" 59 * @since 1.1 60 */ 61 private String validateMainModelExecutionStrategy; 62 63 /** Creates a new {@code MainModelValidateMojo} instance. */ 64 public MainModelValidateMojo() 65 { 66 super(); 67 } 68 69 @Override 70 protected void executeTool() throws Exception 71 { 72 this.logSeparator(); 73 this.logProcessingModel( TOOLNAME, this.getModel() ); 74 75 final ModelContext context = this.createModelContext( this.getMainClassLoader() ); 76 final ModelValidationReport validationReport = context.validateModel( this.getModel( context ) ); 77 78 this.log( context, validationReport.isModelValid() ? Level.INFO : Level.SEVERE, validationReport ); 79 80 if ( !validationReport.isModelValid() ) 81 { 82 throw new MojoExecutionException( Messages.getMessage( "failedValidatingMainModel" ) ); 83 } 84 85 this.logToolSuccess( TOOLNAME ); 86 } 87 88 @Override 89 protected String getGoal() throws MojoExecutionException 90 { 91 return "validate-main-model"; 92 } 93 94 @Override 95 protected String getExecutionStrategy() throws MojoExecutionException 96 { 97 return this.validateMainModelExecutionStrategy; 98 } 99 100 }