001package 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 022import java.util.LinkedHashMap; 023import java.util.List; 024import java.util.Map; 025 026import org.apache.maven.model.Plugin; 027import org.apache.maven.plugin.descriptor.MojoDescriptor; 028import org.codehaus.plexus.util.xml.Xpp3Dom; 029 030public class MojoExecution 031{ 032 033 private Plugin plugin; 034 035 private String goal; 036 037 private String executionId; 038 039 private MojoDescriptor mojoDescriptor; 040 041 private Xpp3Dom configuration; 042 043 /** 044 * Describes the source of an execution. 045 */ 046 public enum Source 047 { 048 049 /** 050 * An execution that originates from the direct invocation of a goal from the CLI. 051 */ 052 CLI, 053 054 /** 055 * An execution that originates from a goal bound to a lifecycle phase. 056 */ 057 LIFECYCLE, 058 } 059 060 private Source source = Source.LIFECYCLE; 061 062 /** 063 * The phase may or may not have been bound to a phase but once the plan has been calculated we know what phase 064 * this mojo execution is going to run in. 065 */ 066 private String lifecyclePhase; 067 068 /** 069 * The executions to fork before this execution, indexed by the groupId:artifactId:version of the project on which 070 * the forked execution are to be run and in reactor build order. 071 */ 072 private Map<String, List<MojoExecution>> forkedExecutions = new LinkedHashMap<String, List<MojoExecution>>(); 073 074 public MojoExecution( Plugin plugin, String goal, String executionId ) 075 { 076 this.plugin = plugin; 077 this.goal = goal; 078 this.executionId = executionId; 079 } 080 081 public MojoExecution( MojoDescriptor mojoDescriptor ) 082 { 083 this.mojoDescriptor = mojoDescriptor; 084 this.executionId = null; 085 this.configuration = null; 086 } 087 088 public MojoExecution( MojoDescriptor mojoDescriptor, String executionId, Source source ) 089 { 090 this.mojoDescriptor = mojoDescriptor; 091 this.executionId = executionId; 092 this.configuration = null; 093 this.source = source; 094 } 095 096 public MojoExecution( MojoDescriptor mojoDescriptor, String executionId ) 097 { 098 this.mojoDescriptor = mojoDescriptor; 099 this.executionId = executionId; 100 this.configuration = null; 101 } 102 103 public MojoExecution( MojoDescriptor mojoDescriptor, Xpp3Dom configuration ) 104 { 105 this.mojoDescriptor = mojoDescriptor; 106 this.configuration = configuration; 107 this.executionId = null; 108 } 109 110 /** 111 * Gets the source of this execution. 112 * 113 * @return The source of this execution or {@code null} if unknown. 114 */ 115 public Source getSource() 116 { 117 return source; 118 } 119 120 public String getExecutionId() 121 { 122 return executionId; 123 } 124 125 public Plugin getPlugin() 126 { 127 if ( mojoDescriptor != null ) 128 { 129 return mojoDescriptor.getPluginDescriptor().getPlugin(); 130 } 131 132 return plugin; 133 } 134 135 public MojoDescriptor getMojoDescriptor() 136 { 137 return mojoDescriptor; 138 } 139 140 public Xpp3Dom getConfiguration() 141 { 142 return configuration; 143 } 144 145 public void setConfiguration( Xpp3Dom configuration ) 146 { 147 this.configuration = configuration; 148 } 149 150 public String identify() 151 { 152 StringBuilder sb = new StringBuilder( 256 ); 153 154 sb.append( executionId ); 155 sb.append( configuration.toString() ); 156 157 return sb.toString(); 158 } 159 160 public String getLifecyclePhase() 161 { 162 return lifecyclePhase; 163 } 164 165 public void setLifecyclePhase( String lifecyclePhase ) 166 { 167 this.lifecyclePhase = lifecyclePhase; 168 } 169 170 @Override 171 public String toString() 172 { 173 StringBuilder buffer = new StringBuilder( 128 ); 174 if ( mojoDescriptor != null ) 175 { 176 buffer.append( mojoDescriptor.getId() ); 177 } 178 buffer.append( " {execution: " ).append( executionId ).append( "}" ); 179 return buffer.toString(); 180 } 181 182 public String getGroupId() 183 { 184 if ( mojoDescriptor != null ) 185 { 186 return mojoDescriptor.getPluginDescriptor().getGroupId(); 187 } 188 189 return plugin.getGroupId(); 190 } 191 192 public String getArtifactId() 193 { 194 if ( mojoDescriptor != null ) 195 { 196 return mojoDescriptor.getPluginDescriptor().getArtifactId(); 197 } 198 199 return plugin.getArtifactId(); 200 } 201 202 public String getVersion() 203 { 204 if ( mojoDescriptor != null ) 205 { 206 return mojoDescriptor.getPluginDescriptor().getVersion(); 207 } 208 209 return plugin.getVersion(); 210 } 211 212 public String getGoal() 213 { 214 if ( mojoDescriptor != null ) 215 { 216 return mojoDescriptor.getGoal(); 217 } 218 219 return goal; 220 } 221 222 public void setMojoDescriptor( MojoDescriptor mojoDescriptor ) 223 { 224 this.mojoDescriptor = mojoDescriptor; 225 } 226 227 public Map<String, List<MojoExecution>> getForkedExecutions() 228 { 229 return forkedExecutions; 230 } 231 232 public void setForkedExecutions( String projectKey, List<MojoExecution> forkedExecutions ) 233 { 234 this.forkedExecutions.put( projectKey, forkedExecutions ); 235 } 236 237}