001 package org.apache.maven.plugin; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022 import java.util.Iterator; 023 import java.util.List; 024 025 import org.apache.maven.plugin.descriptor.MojoDescriptor; 026 import org.apache.maven.plugin.descriptor.Parameter; 027 import org.codehaus.plexus.util.StringUtils; 028 029 public class PluginParameterException 030 extends PluginConfigurationException 031 { 032 033 private final List<Parameter> parameters; 034 035 private final MojoDescriptor mojo; 036 037 public PluginParameterException( MojoDescriptor mojo, List<Parameter> parameters ) 038 { 039 super( mojo.getPluginDescriptor(), "The parameters " + format( parameters ) + " for goal " 040 + mojo.getRoleHint() + " are missing or invalid" ); 041 042 this.mojo = mojo; 043 044 this.parameters = parameters; 045 } 046 047 private static String format( List<Parameter> parameters ) 048 { 049 StringBuilder buffer = new StringBuilder( 128 ); 050 if ( parameters != null ) 051 { 052 for ( Parameter parameter : parameters ) 053 { 054 if ( buffer.length() > 0 ) 055 { 056 buffer.append( ", " ); 057 } 058 buffer.append( '\'' ).append( parameter.getName() ).append( '\'' ); 059 } 060 } 061 return buffer.toString(); 062 } 063 064 public MojoDescriptor getMojoDescriptor() 065 { 066 return mojo; 067 } 068 069 public List<Parameter> getParameters() 070 { 071 return parameters; 072 } 073 074 private static void decomposeParameterIntoUserInstructions( MojoDescriptor mojo, Parameter param, 075 StringBuilder messageBuffer ) 076 { 077 String expression = param.getExpression(); 078 079 if ( param.isEditable() ) 080 { 081 messageBuffer.append( "Inside the definition for plugin \'" + mojo.getPluginDescriptor().getArtifactId() 082 + "\' specify the following:\n\n<configuration>\n ...\n <" + param.getName() + ">VALUE</" 083 + param.getName() + ">\n</configuration>" ); 084 085 String alias = param.getAlias(); 086 if ( StringUtils.isNotEmpty( alias ) && !alias.equals( param.getName() ) ) 087 { 088 messageBuffer.append( 089 "\n\n-OR-\n\n<configuration>\n ...\n <" + alias + ">VALUE</" + alias + ">\n</configuration>\n" ); 090 } 091 } 092 093 if ( StringUtils.isEmpty( expression ) ) 094 { 095 messageBuffer.append( "." ); 096 } 097 else 098 { 099 if ( param.isEditable() ) 100 { 101 messageBuffer.append( "\n\n-OR-\n\n" ); 102 } 103 104 //addParameterUsageInfo( expression, messageBuffer ); 105 } 106 } 107 108 public String buildDiagnosticMessage() 109 { 110 StringBuilder messageBuffer = new StringBuilder( 256 ); 111 112 List<Parameter> params = getParameters(); 113 MojoDescriptor mojo = getMojoDescriptor(); 114 115 messageBuffer.append( "One or more required plugin parameters are invalid/missing for \'" ) 116 .append( mojo.getPluginDescriptor().getGoalPrefix() ).append( ":" ).append( mojo.getGoal() ) 117 .append( "\'\n" ); 118 119 int idx = 0; 120 for ( Iterator<Parameter> it = params.iterator(); it.hasNext(); idx++ ) 121 { 122 Parameter param = it.next(); 123 124 messageBuffer.append( "\n[" ).append( idx ).append( "] " ); 125 126 decomposeParameterIntoUserInstructions( mojo, param, messageBuffer ); 127 128 messageBuffer.append( "\n" ); 129 } 130 131 return messageBuffer.toString(); 132 } 133 }